Linux & Windows

 

 

随便说说WindowsLinux 

    首先声明,这篇文章并非论述win/lin孰好孰坏的愤青文。我是一个双系统用户,这篇文章只是随便说一些我的使用体会,从各个角度说一说这两个系统的异同。文中可能对Linux的描述较多,也可以当做一个简单的Linux入门介绍文,不过这个介绍有点太抽象了。

    

    首先讲讲操作系统(为了打字方便,后面简称OS)这个概念吧。在计算机学术上对OS的定义来说,OS主要负责的是各种硬件资源的分配管理,所以,它应该只是一个内核。但对于Windows用户来说,提及OS,往往指的是所有由MS提供的东西,包括Win内核,也包括所有附带的上层应用,如mspaint, notepad等,当然也包括整个GUI的设计。对于普通的win用户来说,OS则更是指的Release。经常会听到这样的对话:你用的什么系统?”“我用的Win7”。对于Linux用户,内核与上层应用的界限是非常明显的,仅从普通用户(相对于开发人员而言)的角度来说,linux内核与windows内核最大的区别也许是GUI是否做在内核中。linux的内核是不包括GUI的,而windows则把GUI做到内核中了,所以windowsGUI方面消耗的资源相对要少一些,也更适合部署各种娱乐应用。(或许有人要出来跟我说linuxGUI消耗资源更少,vista上开不了特效的硬件在linux上都能开3D特效。这些读者,我建议你多用用linux之后再来看这个结论。)

    按理来说,Linux应该仅仅指linux kernel,不应该包括任何上层应用,然而实际情况下,Linux指代了一类东西。所以Linux没有Release这个概念(每个软件都有自己的Release),而发行版(Distribution)这个概念可以约等于WinRelease吧。通常,除了一些LiveCDDistro外,不同Distro最大的区别是包管理工具的不同。用Linux的用户都知道,每个Distro都有自己的软件仓库,仓库里有几乎所有的软件,用户可以直接从仓库中下载软件安装,而不需要在网上搜索下载,还要担心是否含有病毒。每个Distro的仓库的格式不一样,软件包的格式也不同,他们的风格也大不相同。如DebianAPT,它的特点就是方便用户,有很强的自动解决冲突的机制,用户只管装你要的软件,一句install就行,其他的我来;如Gentooemerge,它的特点是所有包都是源代码,在本地根据本地的优化设置进行编译,设置可以取舍某些软件中的特定功能;再如Arch的特点则是提供的软件包都是最新的,很适合喜欢尝鲜的用户;LFS则没有包管理机制,什么都要自己来,所以通常不适合桌面用户使用。但为什么说Distro只是约等于winRelease呢?WinRelease,从普通用户的角度来看,最大的区别就是GUI。而Linux下的GUI并不是Distro决定的,Linux下的GUI,可以简单的认为是由几种不同的桌面环境(DE)来决定的(其实不是这么简单,但你这么认为也没人会反对你),常见的DEGnome,KDE,openbox,xfce,awesome等,而所谓的3D效果,并不是DE,只是一个应用软件,compiz fusionCompiz Fusion里的绝大多数功能都只能用来装装B,无论对于开发,还是桌面娱乐都没有实用意义,所以用了很短的时间之后我也不用了。而每种DE,不仅仅是外观的不同,其设计理念也有很大的区别。如awesome是一个典型的平铺式窗口管理工具,它的特点是总是把前台的窗口撑满整个屏幕,并且能够方便调整各窗口大小,很适合开发人员使用。(我因为已经习惯了gnome,并且一直找不到时间折腾一下awesome的配置,不然肯定装awesome了)

 

    上面说的这么多,都是从一个桌面用户的角度来看的,下面稍微深入一点点,从一个更接近OS的角度来看两者的异同。

    对于习惯Windows的用户,刚开始用Linux的时候,目录树也许是最不习惯的部分之一。很多人难以理解我这么多分区都在哪里?挂载是怎么回事?windows用户总是习惯性的认为第一个分区的名字就叫C,第二个分区的名字就叫D。所以在linux下也总会问我的C盘在哪。其实,如果深入了解一下,就会发现其实WinLinux的目录结构是很相似的,看下图(用等宽字体浏览):


           \(根目录)                            桌面 

           |-home                               |-控制面板

           |-usr,local                           |-我的电脑

           |-proc,dev,tmp                    | |-C,D,E...

           |-boot                                |-网上邻居

           |-bin                                  |-我的文档

           |-etc                                  |-回收站

           |-mnt(media)                      |-...

           |-srv,var,lib...

           |-sbin

           |-...
           Linux的目录结构           Windows的目录结构


    从这里面可以看出,Windows的目录结构与Windows是相似的,它的根目录是桌面,在这个目录下有控制面板,我的电脑等目录,而在我的电脑中则有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长,但是功能却也很强大。从开发者看,我觉得最大的特点就是最大化了代码重用,因为所几乎所有软件都开源,所以免去了很多重复发明wheel(额,怕被当作敏感词……)的工作。曾经看到过很多软件开发商的怨言,自己的软件用了.net库,但用户电脑中可能没有装,所以虽然自己的软件只有几百K,但发布的安装包却不得不几十兆。软件的大小很多时候直接影响了用户的接受程度。但微软的各个Release都可谓是Life Changing,娱乐模式、办公模式,影响了大多数人的生活。Linux这方面,android也可谓是一个比较典型的例子吧,我个人觉得吸引那么多开发者参与到android应用的开发,主要原因还并不是andoid有多好用,而是上面开发软件太简单了。

    这里顺便说说命令行。很多windows小菜总是会觉得DOS是多么了不起的东西,看到别人在CMD中敲几条命令就会觉得非常了不起。为什么,我想了想,也许是因为它们觉得会敲命令的人能够记住很多命令,那么长长的东西,谁记得住啊!能记住的肯定都是牛人。然而其实大多数命令是不需要记太多东西的,这一方面,以命令行见长的*nix最有发言权。在*nix下,以bash为例,它提供的各种补全方式,还有各种对命令行操作的能力,甚至还有vi模式emacs模式,使得敲命令根本不需要记住很多东西,并且输入的过程也很轻松,再配合管道的使用(*nix中把文件当作通用标准接口),*nix的命令行在UI体验上,以绝对的优势领先了dos或者cmdWin2k8中提供了PowerShell,从同学的介绍来看,它确实也非常强大,至少在配置能力方面,绝不是cmd那样的小辈。但是,我觉得它有一个方面与*nixshell比是没有任何优势的,第三方程序,*nixshell功能强大,并不在与bash本身提供了多少功能,而在于各种第三方工具,使得命令行在*nix下几乎无所不能(当然也不可能绝对的无所不能)。

 

    似乎也写了不少了,但其实还是只讲了一点点。码字有点累,就歇歇吧,以后有空再写。最后做个简单的总结,这个总结有些笼统,而我也不善长总结,所以言词可能不是很准确,各位轻拍。

    从操作系统的角度看,两者是大同小异的。从开发者的角度看,Linux是开发友好的。从最终用户的角度看,Windows让你忘了硬件,忘了系统内核,Win让你感觉你在用软件,而Linux让你感觉你在用Linux

 

 

 

2010218 

继续说WindowsLinux的异同 

    没想到随手写的一篇文章也会引来这么多读者。初来博客园不久,对这里其实还不是很熟悉,看文章,主要都是关于.NetWeb开发的,但愿我的文章在这里不会显得不合群。

    上一篇文章里简单讲了下两个系统的发布方式、目录结构,还有简单提了下用户体验。这次简单讲讲帮助系统,还有工作模式。

 

    初学Linux的人在问别人问题的时候,肯定受到过这样的回答:“man xxx”,对一个比较熟练的Linux用户,man或者info肯定是家常便饭了,那么多命令,那么多参数,谁记得住呢?除了一些常用的命令外,肯定都是在用到的时候man一下看看怎么用。

    然而,国内的Windows用户(国外的我不清楚)似乎大多都忽略了系统中自带的帮助系统,我相信很少有人碰到问题是第一反应是按F1,而不是打开搜索引擎或者问人。国内的打包组则直接宣传说xp200M的帮助文件没用,直接删掉,减小系统体积。正是因为大家的忽略,很多写书的人借此大捞了一笔,在新华书店中,各种所谓的WindowsXP教程、Office教程,其实大部分都是直接抄的系统或者软件自带的帮助文件,连给的例子都是一字不动的抄出来的。不知道是系统帮助文件的组织方式不好呢还是啥,为什么大家都更愿意掏钱买书看,而不愿意看系统自带的帮助呢?

    在这里,我想表扬几个公司的文档,微软的(尤其是MSDN Library),Intel的(software developer's manuals),IBM的(developerWorks),其他公司的产品我用的比较少,文档也看的少,不清楚情况。其中MSDN Library推荐看英文的,其中文版绝大多数由机器翻译来的,效果不是很好,IBMdeveloperWorks也有中文的,并且都是人工翻译的,但量上比不上英文的多,也没有英文的新。MSDN LibraryIntelManual主要是产品文档,developWorks则是跟wiki一样是一个知识库。

 

    扯开了,我们继续回到Win/Linux的话题上面。一些准备从WinLinux的新手总会问的问题,Windowsxx软件在Linux用什么替代阿?在这个问题上,我总是很避讳替代”这个词语。有些软件在两个系统下是相同或非常相似的功能,可以说替代,但大多数软件,他们的功能并不相同,他们从本质上的工作方式就不相同,不具有替代性可言。例如用什么替代Visual Studio?从IDE的角度来说,可以用eclipse,也可以用vim+gcc+gdb+...然而,这仅仅是从IDE的角度说,实际上VS的主要职能是开发.NetC语言的开发可以说只能算是一个附加的功能吧;但eclipse的主要职能是C/C++Java的开发,想在eclipse下开发C#或者.net,最好不要这么想吧(虽然不是不行);而对于vim+gcc+gdb+...这个回答,初学者可能就难以理解了,他们界面不同,操作方式不一样,怎么能说是替代?对于新手,替代这个词更多的不是从功能上发问,而是从界面和操作方式上来发问的。

    上面说的替代的问题是由操作方式的不同引起的。还有一种情况是,Linux下可能没有某些需求,没有这样的软件。例如用什么替代MS Office?有些人可能会回答Open Office。首先我想否认这个回答,就这个问题,我宁愿回答Google Docs,也不会说是Open OfficeMS Office有很多很多的功能是OOo所没有的,且不说两者对文件格式的支持还有糟糕的GUI吧。我曾经想过,为什么Linux下没有一款能跟MSOffice相似的办公软件,思考的结果,窃以为,Linux用户没这样的需求。Linux用户多为开发人员,他们写文档时更青睐纯文本格式(vim/emacs是不二的选择),或者有些人会用latex,富文本格式的文档写的并不是很多,Open Office已经够用了。然而,在这方面的缺失,也许是Linux走向桌面化的过程中最大的障碍吧。

    所以,在有人想学用Linux,来向我请教如何入门时,我首先会询问他学习Linux的目的是什么。如果是当做桌面娱乐应用的话,最好还是不要,如果非要用的话,那就的舍得放弃Win下的很多功能,并且某些方面要适应Linux的工作方式(注意,不是说如何使用某些软件,而是要明白为何一件事在Windows下是这么做,而Linux下是另一种做法)。如果是做开发的话,那也得有心里准备,Linux下最好的开发套件是少不了vim或者emacs的,这两个软件的学习曲线非常长,要熟练也许至少得花上半年吧。

 

    有的时候我在想,为什么Linux下的这些软件,比如vim的学习曲线会那么长,同样是一个纯文本编辑器,为什么notepad到手就能用,gedit到手就能用,而vim却那么难呢?我觉得主要是概念的原因。notepad可以认为是一个很单纯的编辑器,没有任何概念可言,打开之后,就是码字。而vim则多了模式这个概念。其实,vim有个参数-y,通过vim -y打开之后默认就是插入模式,如果再把ctrl-c/ctrl-v/ctrl-h等分别映射成复制/粘贴/查找等,也就能跟notepad同样的使用(怎么退出?点X……vim一点的,ctrl-o,然后:q<cr>)。

    顺便就多讲讲vim吧。窃以为,学会vim其实很简单,只要了解几个普通/插入/命令/可视这四个模式就够了,这时候它已经比notepad强大了。然后,熟练使用hjkl等各种移动光标的键位,那就锦上添花了。但,这个时候只是会用vim,而不是熟练使用。窃以为,vim的精髓在于查找替换、正则式、脚本扩展这些能力上。notepad/word用户可能很少会用查找来移动光标定位吧?更多的是用眼睛定位,用方向键或者鼠标移动,对于很长的文本,这很累。查找使得定位快而准。替换也许对于普通的文本编辑来说用处并不大,但对于编程来说,几乎时时都要用,当然,不是简单的替换,而是正则替换,很多能力真的是太神奇了。再配合上宏,就如虎添翼了。脚本的扩展,则是vim最强大的地方。Unix哲学中的一条原则是Write Simple Parts,意思是说把自己的功能能做精,而不要去管别的功能,vim把基本的编辑功能做强大了,把其他的事情留给扩展来做了,如自动补全、语法高亮等,vim为这些功能都留了接口,但自己本身并不去实现。

    其实,这么看来vim并不难学,打击众人积极性的,也许仅仅是第一次进入后不知道如何退出吧?呵呵:-)

 

    不写了,总结一下吧。我觉得,Windows是一个对最终用户来说单纯的系统,或者也可以说是一个所见即所得的系统;Linux是一个很有思想的系统,它城府很深,有很多奇怪的概念,要理解它很难,但是理解之后却发现它做事很成熟,很讲究效率,也可以说它是一个所想即所得的系统。是不是也可以这样说呢:Windows是一个用眼睛用的系统,而Linux是一个用心用的系统?

 

 转载请注明出处:http://www.cnblogs.com/stephenjy/archive/2010/02/18/1669112.html 

 

posted on 2012-07-17 01:53  sherry00  阅读(201)  评论(0)    收藏  举报

导航