随便说说Windows和Linux
首先声明,这篇文章并非论述Windows/Linux孰好孰坏的愤青文。我是一个双系统用户,这篇文章只是随便说一些我的使用体会,从各个角度说一说这两个系统的异同。文中可能对Linux的描述较多,也可以当做一个简单的Linux入门介绍文,不过这个介绍有点太抽象了。
首先讲讲操作系统(为了打字方便,后面简称OS)这个概念吧。在计算机学术上对OS的定义来说,OS主要负责的是各种硬件资源的分配管理,所以,它应该只是一个内核。但对于Windows用户来说,提及OS,往往指的是所有由MS提供的东西,包括Win内核,也包括所有附带的上层应用,如mspaint, notepad等,当然也包括整个GUI的设计。对于普通的Win用户来说,OS则更是指的Release。经常会听到这样的对话:“你用的什么系统?”“我用的Win7”。对于Linux用户,内核与上层应用的界限是非常明显的,仅从普通用户(相对于开发人员而言)的角度来说,Linux内核与Windows内核最大的区别也许是GUI是否做在内核中。Linux的内核是不包括GUI的,而Windows则把GUI做到内核中了,所以Windows在GUI方面消耗的资源相对要少一些,也更适合部署各种娱乐应用。(或许有人要出来跟我说Linux的GUI消耗资源更少,Vista上开不了特效的硬件在Linux上都能开3D特效。这些读者,我建议你多用用Linux之后再来看这个结论。)
按理来说,Linux应该仅仅指Linux Kernel,不应该包括任何上层应用,然而实际情况下,Linux指代了一类东西。所以Linux没有Release这个概念(每个软件都有自己的Release),而发行版(Distribution)这个概念可以约等于Win的Release吧。通常,除了一些LiveCD的Distro外,不同Distro最大的区别是包管理工具的不同。用Linux的用户都知道,每个Distro都有自己的软件仓库,仓库里有几乎所有的软件,用户可以直接从仓库中下载软件安装,而不需要在网上搜索下载,还要担心是否含有病毒。每个Distro的仓库的格式不一样,软件包的格式也不同,他们的风格也大不相同。如Debian的APT,它的特点就是方便用户,有很强的自动解决冲突的机制,用户只管装你要的软件,一句install就行,其他的我来;如Gentoo的emerge,它的特点是所有包都是源代码,在本地根据本地的优化设置进行编译,设置可以取舍某些软件中的特定功能;再如Arch的特点则是提供的软件包都是最新的,很适合喜欢尝鲜的用户;LFS则没有包管理机制,什么都要自己来,所以通常不适合桌面用户使用。但为什么说Distro只是约等于Win的Release呢?Win的Release,从普通用户的角度来看,最大的区别就是GUI。而Linux下的GUI并不是Distro决定的,Linux下的GUI,可以简单的认为是由几种不同的桌面环境(DE)来决定的(其实不是这么简单,但你这么认为也没人会反对你),常见的DE有Gnome,KDE,openbox,xfce,awesome等,而所谓的3D效果,并不是DE,只是一个应用软件-Compiz Fusion。Compiz Fusion里的绝大多数功能都只能用来装装B,无论对于开发,还是桌面娱乐都没有实用意义,所以用了很短的时间之后我也不用了。而每种DE,不仅仅是外观的不同,其设计理念也有很大的区别。如awesome是一个典型的平铺式窗口管理工具,它的特点是总是把前台的窗口撑满整个屏幕,并且能够方便调整各窗口大小,很适合开发人员使用。(我因为已经习惯了GNOME,并且一直找不到时间折腾一下awesome的配置,不然肯定装awesome了)
上面说的这么多,都是从一个桌面用户的角度来看的,下面稍微深入一点点,从一个更接近OS的角度来看两者的异同。
对于习惯Windows的用户,刚开始用Linux的时候,目录树也许是最不习惯的部分之一。很多人难以理解我这么多分区都在哪里?挂载是怎么回事?Windows用户总是习惯性的认为第一个分区的名字就叫C盘,第二个分区的名字就叫D盘。所以在Linux下也总会问“我的C盘在哪”。其实,如果深入了解一下,就会发现其实Win和Linux的目录结构是很相似的,看下图(用等宽字体浏览):
\(根目录) 桌面
Linux的目录结构 Windows的目录结构
从这里面可以看出,Windows的目录结构与Linux是相似的,它的根目录是桌面,在这个目录下有控制面板,我的电脑等目录,而在我的电脑中则有C、D这些目录,通常第一个分区挂载于桌面\我的电脑\C这个目录下,其他逻辑分区也一样。这里,控制面板是一个特殊的目录,它是把很多在system32目录中的管理工具“软链接”到了这个目录下,网上邻居也是特殊的目录,把网络相关的状态信息显示在这个目录中,我的文档则相当于Linux下把某个目录Bind Mount过来,回收站则是把各个分区上的Recycled目录组合在一起,库其实跟回收站的原理差不多。Windows中逻辑分区挂载点是写在注册表中的,Linux下的挂载点写在/mnt/fstab中。
对于Linux目录,这样理解也许会容易一些:/boot目录存放的是系统内核文件,以及boot loader(如grub)的文件,系统启动之后,内核完全存在于内存中,这个目录也就没用了。/home目录可以认为是我的文档,但其组织方式与我的文档不同,Windows下“我的文档”是在逻辑磁盘上的某些目录的集合,而/home,通常情况下是单独挂载的分区(不单独挂载也行,跟\共用逻辑分区);/usr目录有点类似于C:\Windows目录,字体目录等都在这里面,而/usr/share则相当于Program Files目录,存放各个软件的文件;/lib目录则类似于Program Files\Common Files,是各种软件共享的库存放的地方。/usr/local这个目录的结构跟/usr的结构很相像,但在某些发行版(如Debian)中,这个目录是普通用户(需要加入staff组)可以访问的,所以普通用户安装软件可以装到这里面。(当然,这种做法比较适合单机用户,或者多用户机器上只有较低权限的管理员使用,多用户机器上,还是推荐将自己的软件装到自己的home目录中);/mnt或者/media目录可以认为跟我的电脑很类似了,只是,通常移动硬盘分区会挂载在这下面,当然,如果你愿意,你也可以把所有分区按分区顺序挂载到/media/{C,D,E...}下;/proc目录是一个特殊的目录,它可以认为是内存的一个映射,从里面可以直接读取到很多内存中的内容,各个进程的状态信息等,当然,有些信息需要一定的权限才可以读取;/dev目录是一个特殊的目录,是所有物理硬件(如sda)、逻辑硬件(如tty)的映射,这里每个文件代表一个硬件设备;/etc可以认为是Windows的注册表,但这里都是全局的配置,相当于HKLM这个根键;/bin嘛,其实就是把所有的应用程序的可执行文件放在这里,/sbin中的s表示system的意思,作用也就好理解了,可以认为是系统的一些必要工具。
其实,仅从操作系统原理的角度来看这两个系统,它们并没有太本质的区别,内存管理、硬件资源管理、进程管理等,都是相同或相似的概念,不同的实现而已。它们的不同点至于使用的理念不一样,*nix无论是内核还是上层软件,大多遵循所谓的Unix哲学,Unix哲学即指导了代码的编写风格,也影响了软件的使用习惯。Windows,我不知道是否也有Windows哲学一说,但是Windows应用程序的代码风格跟*nix是很不一样的,而且使用习惯更是不同,它们的理念不同,可以认为这算是IT界的两大宗教吧。这里不深入讨论Unix哲学或者Windows哲学的细节。我只想笼统的说一下我对这两种理念的感觉。Windows因为都是由微软提供,并且第三方的软件一般也都使用微软提供的开发工具开发,所以聚合是最大的特点,UI风格比较统一。也因为聚合的特点,Windows的设计重心是ease of use,相对来说,Windows的东西对开发者是不友好的,但对最终用户却很友好,这也是为什么Windows会有这么多的桌面用户。*nix想法,它对开发者是友好的,但对用户不友好。*nix中几乎任何一款工具的学习曲线都要比Windows长,但是功能却也很强大。从开发者看,我觉得最大的特点就是最大化了代码重用,因为所几乎所有软件都开源,所以免去了很多重复发明轮子的工作。曾经看到过很多软件开发商的怨言,自己的软件用了.NET库,但用户电脑中可能没有装,所以虽然自己的软件只有几百K,但发布的安装包却不得不几十兆。软件的大小很多时候直接影响了用户的接受程度。但微软的各个Release都可谓是Life Changing,娱乐模式、办公模式,影响了大多数人的生活。Linux这方面,android也可谓是一个比较典型的例子吧,我个人觉得吸引那么多开发者参与到android应用的开发,主要原因还并不是andoid有多好用,而是上面开发软件太简单了。
这里顺便说说命令行。很多Windows小菜总是会觉得DOS是多么了不起的东西,看到别人在CMD中敲几条命令就会觉得非常了不起。为什么,我想了想,也许是因为它们觉得会敲命令的人能够记住很多命令,那么长长的东西,谁记得住啊!能记住的肯定都是牛人。然而其实大多数命令是不需要记太多东西的,这一方面,以命令行见长的*nix最有发言权。在*nix下,以bash为例,它提供的各种补全方式,还有各种对命令行操作的能力,甚至还有vi模式、emacs模式,使得敲命令根本不需要记住很多东西,并且输入的过程也很轻松,再配合管道的使用(*nix中把文件当作通用标准接口),*nix的命令行在UI体验上,以绝对的优势领先了dos或者cmd。Win2k8中提供了PowerShell,从同学的介绍来看,它确实也非常强大,至少在配置能力方面,绝不是cmd那样的小辈。但是,我觉得它有一个方面与*nix的shell比是没有任何优势的,第三方程序,*nix的shell功能强大,并不在与bash本身提供了多少功能,而在于各种第三方工具,使得命令行在*nix下几乎无所不能(当然也不可能绝对的无所不能)。
似乎也写了不少了,但其实还是只讲了一点点。码字有点累,就歇歇吧,以后有空再写。最后做个简单的总结,这个总结有些笼统,而我也不善长总结,所以言词可能不是很准确,各位轻拍。
从操作系统的角度看,两者是大同小异的。从开发者的角度看,Linux是开发友好的。从最终用户的角度看,Windows让你忘了硬件,忘了系统内核,Win让你感觉你在用软件,而Linux让你感觉你在用Linux。
转载请注明出处:http://www.cnblogs.com/stephenjy/archive/2010/02/17/1668913.html