当前位置:Linux教程 - Linux业界 - 谈谈从Windows转向UNIX的一些困惑

谈谈从Windows转向UNIX的一些困惑

文章来源:techtarget
相信很多朋友Windows已经用得相当熟悉了,由于种种原因,想试试UNIX。无奈Windows的思想根深蒂固,这给学习UNIX造成很多困惑,经常四处碰壁。于是抱怨UNIX太难学,抛在一边眼不见为净,继续用着Windows。当然如果你只是普通用户,听听歌玩玩游戏灌灌水,那大可不必装什么UNIX,因为你根本没必要去跟UNIX瞎折腾。Windows那么方便,用着多舒服,何必自找麻烦,去弄那难配置又“莫名其妙”的UNIX?说到这里,很多人可以不用看这篇文章了。这篇文章是为想学UNIX的跟我一样菜的新手写的,目的是为了在学习过程中少走一些弯路。就从我个人的经历来说吧!

  最初听说UNIX,大概是在大一的时候。当时对这个系统超级崇拜,认为能驾驭这个系统的一定是绝顶大牛。某天偶然听说一个叫做Linux的系统,据说跟UNIX很像,而且还有一个叫做RedHat的东西。因为我有刻录机,于是在校网的某处下了三个ISO,刻成了盘,但一直不敢试,因为根本不知道怎么把它“放”到硬盘上去。也就是说,它有没有分区?有分区的话怎么弄?因为一直担心把Windows损坏,所以这几张盘就被我搁到了一边,这一搁就是一年。

  大二了,Windows已经玩得相当熟了,这时对分区之类的也算挺了解了吧,于是又从抽屉的角落里找到那几张盘,打算试试。具体怎么样我也记不清了,反正是安装成功了,不过刷新率非常低,眼睛根本受不了,所以没多久又被我删了,还是继续我的Windows……说出来不怕笑话,到这时我还不知道Linux有好多发行版本,以为RedHat“就是”Linux。

  大二的暑假,Windows我已经玩得不想再玩了,而且随着对UNIX的渐渐了解,我开始对这东西有了点好感。于是在网上搜了一通,由于当初对Linux的感觉相当糟糕,所以我没把目光放在Linux上,而是放到了BSD上。BSD有三个分支——FreeBSD、NetBSD和OpenBSD。当时看着NetBSD和OpenBSD感觉不大舒服(呵呵,其实看着Linux这几个字也不怎么舒服,这也是我当时不选Linux的原因之一,不过现在不会了),于是自然而然地选择了FreeBSD。

  然而,对于我这个有着很深的Windows思维的人来说,想一下子适应FreeBSD真的很不容易。还是回到分区。FreeBSD的“分区”是怎么样的?这让我怵了好久,直到从图书馆借到《FreeBSD使用大全》的时候才有点眉目。不过,当时并不知道这本书其实不大适合初学者。但那时在家里只能看这本书了,花了十几天吧,把这本书看了个大概。

  回到学校后就开始了学FreeBSD,但也是断断续续,没有当初学Windows那么大的好奇心。不过,虽然进展缓慢,收获多多少少还是有一些的。在这当中逛了好多论坛(ChinaUnix,FreeBSDChina等),看了好多文章,说实话感觉还真的挺不错。现在就稍微总结一下吧,以下仅以FreeBSD为例,因为我到现在为止,经过一些比较,还是认为FreeBSD最适合我的性格:) 嗯,不再瞎扯了,切入正题,呵呵。

首先,我必须让你摆脱一些误解。或许你会有这样的不屑:UNIX那黑头土脸的能算得上系统?能正常工作?能提供FTP和Web等服务?能受得了大负荷?ft,我才不相信,我才不用那破东西!如果你这么想,我可以很认真地告诉你,你错了!知道么,世界使用量第一的Web服务器Apache最初是为UNIX开发的,超级数据库Oracle最初也是为UNIX开发的,高端的服务器用的是什么操作系统?是UNIX!而不是你想象的Windows2003!

      当然,我用过2003,也用它架过相当多的服务,我知道2003的性能不错。但请相信,世界上这么多大型站点使用的都是UNIX,你说他们的管理员难道就都那么笨?如果Windows2003性能真的比UNIX好,他们会不用这么好的东西?事实是,他们选择了UNIX。不相信?好,你可以去这里看看:http://www.netcraft.com,随便输入几个大型站点,如www.google.com,www.yahoo.com,www.baidu.com,看看OS部分写的是什么?或者,你再看看这个网址:http://uptime.netcraft.com/up/today/top.avg.html,看看世界上运行时间最长的机器用的是什么系统?如果你还是执意认为Windows2003牛,那么OK,你可以把这篇“无聊”的文章抛在一边了:)

  如果你继续看下来了,那我继续说,呵呵。我们知道,Windows上的服务器很多都是以GUI页面和服务的方式存在的,但在UNIX中,它们基本上是在命令行下以daemon的形式存在。你可能很困惑,命令行下也能运行服务?嗯,没错,正是。daemon在UNIX中的地位,有点像服务在Windows中的地位,但又不尽然。现在你可以把daemon就当成服务看待。

  那么,UNIX下的文件是怎么样的?UNIX跟Windows不同,它把所有的文件都当成一回事,不像Windows那样以后缀名来区分不同类型的文件。可能你会很困惑,如果这样的话,我怎么打开不同的文件?事实上,在UNIX系统中,文件只是存储上硬盘上的单纯的字节。UNIX下区分不同文件的方法是看这些字节的前几个字符。当然,UNIX本身可不管你是什么文件,它只当你是一些字节。

      区分这些文件的工作由应用程序来负责,比如你有一个文件名为“diogin”的文件,你想“打开”它。怎么打开?我不知道它的文件格式!麻烦大了吧?不大。用file命令一看,这个文件是什么类型马上出来了,虽然不一定准,但绝大多数情况下是没错的。好了,现在你知道它是个可执行文件,在shell下敲入./diogin后,程序执行了,打印出了“Hello, World!”,呵呵……就这么简单。可是问题又来了,什么是shell?还有,UNIX没有像Windows那样的桌面吗?

      shell,简单地说,就是让用户与操作系统内核沟通的一个媒介,你在Windows下用过命令行吧,你可以把shell想象成命令行,但shell可比命令行强大多了,功能上根本不是一个数量级,这一点在你深入理解shell后肯定会感觉到。那桌面呢?这个可能是最让人困惑的问题了,当时我就一直不理解这个X跟桌面到底是怎么回事,甚至一度抱怨Windows怎么这么霸道,把我的思想全禁锢住了。首先必须明确,X是图形界面的基础,X不是桌面的简称!X提供了一些图形调用接口,至于怎么用这些接口,怎么显示你想要的图形,是你的事情,它可不管。那么,你应该用什么东西来控制自己想要显示的图形?

答案是窗口管理器,典型的如fvwm。有了这两个东西,应用程序就可以以特定的图形窗口方式显示了。现在你可能又会有问题了,不是说X是CS方式的架构吗?这个架构是怎么回事?在我们通常的理解中,Server一般是有着高性能的机器,而Client是普通的客户机。但这个理解却不适合X,X中的Server,指的是有键盘鼠标有显示器的机器,而Client则是指一些在X上运行的程序!这些程序,完全可以在另一台机器上运行,通过网络,向X服务器发送命令,X服务器收到这些命令后为这些程序显示图形。只要双方遵循X协议,不管你的客户程序在什么系统上运行,在哪运行,都无所谓。

      呃,说了半天,什么是桌面?桌面是在X和窗口管理器上集成了相当多的X应用软件的一整套系统的合称,它包括了底层的X,中间层的窗口管理器和上层的X应用程序。很简单明了吧?事实上UNIX系统的运行根本不需要X,只当你想要图形页面的时候才需要安装,它只是UNIX系统上运行的一个软件而已。那Windows的桌面呢?Windows的桌面是跟Windows内核紧密结合在一起的,区分不开,你就把它跟系统当成一整套的东西吧,因为结合得太紧密了,我也分不开,呵呵。

  当你开始使用UNIX系统的时候,你会遇到很多惊讶的事情,最让你惊讶的,可能就是重新编译内核。天哪,这是什么东西?刚从Windows转过来的用户可能会吓出一身冷汗。其实不用怕,编译内核是学习UNIX系统必须经过的一关,而且也不像想象中那么神秘。简单地说,就是改变系统最本质的部分,让它适合你的机器和你的需要,换句话说,你可以用重新编译内核来完全定制你的系统。

      最高级的系统都是能让自己定制的,我不需要我用不着的东西。很好,那开始编译吧!怎么入手?以FreeBSD操作系统为例,安装的时候你选择安装系统内核源码(呵呵,没错,是系统内核源码,这个东西是最有价值含量的,但现在你可以完全免费得到它,而不是花几千元去买一个完全保密的东西:)),这通常会安装在/usr/src/sys目录下,然后根据你的CPU架构(普通PC都是i386架构),选择不同的目录进入,里面会有内核配置文件。FreeBSD的内核配置文件为/usr/src/sys/i386/conf/GENERIC,即通用内核配置文件,适合大多数机器使用的内核配置文件。

      说到这里你可能明白了吧,默认安装的时候使用的就是按这个配置文件编译出来的内核,很明显,为了让大多数不同的电脑能用,里面肯定包含了很多你机器上没有的东西。现在你的任务就是把这些东西全都去掉,同时加进去你想要的东西。用任何一个文本编辑器打开它,怎么编辑我就不说了,你可以查看手册,里面有详细的说明的。编译的过程,会在某个目录下产生新的内核源码,你进入那个目录后就可以开始编译并安装新系统了。我的机器,删除没用的东西后的内核非常精简,256M的内存启动后完全Free的内存有231M,也就是说在启动过程中被“经历”过的内存区域只有25M,而且这不是活动内存,活动内存只有2650K!呵呵。跟Windows的上百兆内存占用相比……

  要想正常搞定新内核是有点挑战的,你需要对硬件相当熟悉。好了,接下来我讲讲文件安装吧,这也是在使用UNIX的过程中我感到挺困惑的一个问题。我们都知道,在Windows系统中,安装一个软件很简单,下载文件压缩包,解压,双击setup.exe开始安装,选择一下路径就OK了,很简单吧!安装好后,文件通常会写注册表,说实话这是很恶心的一件事情,当你重装过系统后就知道了,你需要重新安装一次这些软件,很麻烦吧?

      于是在Windows下产生一些新名词,典型的如“绿色软件”,意思是说不会写注册表,直接解压后就能用的软件。当这些思想深深地圈住你的时候,你接触了UNIX,你也用这套思想给搬过来了,于是你去下了个软件包,解压,咦,安装文件呢?找不到安装文件怎么安装?呵呵……我还是来简要说明一下UNIX下的文件安装吧,拿FreeBSD举个例子,在这里我就先不说FreeBSD的ports软件安装机制和package软件安装机制了,这些是在你想学FreeBSD后才需要掌握的东西。首先,你下载了一个软件包,这个软件包里面可能是源码,也可能是二进制软件。

      如果是源码,你解压后,它会自动生成一个目录。比如我假设这个软件包是httpd-2.0.55.tar.gz,你用tar zxvf httpd-2.0.55.tar.gz命令将它解压,在当前目录下得到httpd-2.0.55目录。cd httpd-2.0.55,进入这个目录,里面就是源码了,一般情况下会有一个Makefile的文件,这个是用来编译软件用的。现在只要做的,只是先做一下配置,./configure --help,会显示出配置帮助,你可以根据自己的需要来定制,配置好后敲入make命令,make程序会自动从这些源码编译出二进制软件,这个二进制软件跟上面我说的二进制软件基本一样,区别只在于一些不同机器上编译的一些细节,还有就是后者打过包而已。

      好了,现在你敲入make install来安装这个软件。那么,这个命令做了些什么东西呢?很简单,它只是把编译出来的软件复制到它应该去的地方,其它什么都没做!就这样么?它不写“注册表”么?对呀,写什么啊,UNIX的软件是靠它自己的配置文件来控制的!如果你想知道它详细的动作,你可以去看看Makefile文件里的install部分,看它是怎么写的,你就知道当你敲入这个命令后系统都做了些什么东西了。

      一个典型的UNIX软件,可以看作组件、二进制程序和配置文件组成,而这些文件都是独立的(当然除了某些必要的依赖软件在这之前必须安装外),当你知道这个软件在另一个系统上是二进制兼容的时候,你把这个软件所在的目录完全拷贝到那个系统上,这个软件可以立即正常工作!多自然的事情,还写什么注册表,塞什么“开始”菜单啊,UNIX就是这么井然有序!那么卸载呢?就是把这个文件夹删除!不会留下垃圾么?留什么垃圾啊,在Windows下的“绿色软件”不就是直接删除么?呵呵,可以这样说,UNIX下的软件,都是“绿色软件”。

罗嗦了这么多,还是有两个方面得讲讲的,就是UNIX的目录结构和进程。拿FreeBSD为例,安装的时候会让你创建“挂载点”。可能你又有困惑了吧?可以这样理解:Windows下不是有C:,D:等盘符么,UNIX下的“挂载点”就相当于这个“盘符”,下面挂着文件系统,不同的文件系统可以有不同的格式。好了,你现在创建了/、swap、/var、/tmp、/home和/usr这几个“挂载点”,你用Windows下的思考方式,将它们相像成C盘、页面文件、D盘等等。其实没什么大碍,这样类比会让你比较好接受。好了,你进入了系统,ls /一下,发现了好多东西,你可能又惊讶了:怎么这么乱啊?

      当你熟悉了之后,你就不会这么说了——如果你一开始学的就是UNIX,你会说乱么?事实上,一点也不乱,而且非常有秩序——这些可是经过了几十年定格下来的目录结构!除了/var,/tmp,/home和/usr,其它都是在/目录下的文件或目录,而且对一个系统来说,这些东西基本上不会变化。swap目录是交换分区,相当于Windows下的页面文件,/tmp目录是临时“垃圾场”,当然里面的东西可不是“垃圾”,都是软件运行产生的临时文件。/home是用户的家目录所在地,每个用户(除了root)在登录后都被定位在家目录。/usr是使用频率最高的一个目录,因为绝大部分本地软件都安装在这里(/usr/local)。当然,你可以再自己建立新的“挂载点”,如/ftp,来提供ftp服务,呵呵。

  嗯,再谈谈进程,这东西也曾让我困惑了一段时间。Windows2003下,我们可以把进程减小到开机12个左右,普通的应用基本上不超出30个进程。但当你进入UNIX后,看着几十个上百个进程,是不是吓了一跳?其实这跟UNIX当初的设计有关。举个例子,apache在Windows下正常工作只显示两个进程,一个是主进程,另一个是服务进程。而在UNIX下,则视连接情况有不同的进程数。如果当前有50个连接,则会有51个进程,其中一个是主进程。也就是说,apache为每个连接启动一个进程(假设使用的是prefork方式的多道处理机制)。这样一来,进程数一下子就上去了,我们可以把它看成Windows下的线程(只是简单的类比而已,事实上不是两回事)。具体情况我就不多说了,打这么多字累死我了,_-_

  最后顺便讲讲FreeBSD的安装吧!安装的大致过程,在FreeBSD的手册里已经有详细的讲解。需要注意的是,必须弄明白什么是主分区、什么是扩展分区和逻辑分区。对于玩熟了Windows的人来说,这一步没什么问题。好,接下来我假设你已经有Windows系统在硬盘上了,而且你是把整个硬盘都给了Windows。现在你要划出一部分空间出来装FreeBSD。如果你的分区情况是:C盘为系统盘,占一个主分区;D、E、F盘为逻辑分区,在一个扩展分区上。注意,这个扩展分区也是主分区!接下来怎么办呢?这里必须明确:FreeBSD必须安装在主分区!所以你要从D,E,F这三个盘里分出空闲的空间,从哪里分?

      当然是F盘了,用什么分?请先准备一个软件:partition manager。这是一个分区软件,可以很容易地分区。怎么用这个软件我就不说了,你不会的话先研究一下它的说明,相信你能搞定(我给点思路,不是用删除,而是用压缩第二个主分区的方法来挤掉F盘,这样才会缩小第二个主分区,否则那部分空间还是第二个主分区的,等于白干)。于是,你把F盘腾了出来,得到了一个空闲空间。好了,现在准备工作做好了,插入盘开始安装。选分区的时候你就可以把FreeBSD放到那块空闲的硬盘区域上了。系统装好后,去借几本书开始认真学吧!只是FreeBSD方面的书实在太少,能在学校图书馆借到的就三本:《FreeBSD使用大全》、《FreeBSD技术内幕》和《FreeBSD手册》。当然如果你能把这三本书都看透,水平肯定不低了,呵呵。我就不说了,因为我太菜……

  嗯,一时也想不到还要什么要说了,就这样吧,有问题google,上UNIX方面的论坛是王道,呵呵。