从Windows转向UNIX的困惑及其应对

来源:互联网 发布:linux vi命令 编辑:程序博客网 时间:2024/05/18 01:56
[摘要]本问讲述了从windows转向UNIX的一些常见问题,并介绍了FreeBSD的安装方法
[关键词] windows;unix;FreeBSD
[参考文献]天极:www.yesky.com;硅谷动力:www.enet.com.cn;黑基论坛:bbs.hackbase.com
众多读者对Windows已经很熟悉了,由于种种原因,想试试UNIX。但是使用Windows的思维模式根深蒂固,这给学习UNIX造成很多困惑。于是抱怨UNIX太难学,抛在一边眼不见为净,继续用着Windows。但UNIX有它不可取代的长处,值得读者去尝试。
    最早接触UNIX,约在三年前。我们知道Linux的系统跟UNIX很像,而且还有一个叫做RedHat的东西。因为我们有刻录机,于是在网上下了三个ISO,刻成了盘,但一直没有试,因为根本不知道怎么把它“放”到硬盘上去。它有没有分区?有分区的话怎么弄?因为一直担心把Windows损坏,所以这几张盘就被搁置一边。随着对UNIX的渐渐了解,我们开始对这东西有了点好感。于是在网上搜了一通,由于当初对Linux的感觉相当糟糕,所以我们没把目光放在Linux上,而是放到了BSD上。BSD有三个分支——FreeBSD、NetBSD和OpenBSD。当时看着NetBSD和OpenBSD的界面感觉不大舒服,于是自然而然地选择了FreeBSD。
    然而,对于我们这些有着很深的Windows思维的人来说,想一下子适应FreeBSD真的很不容易。还是回到分区。FreeBSD的“分区”是怎么样的? 然后就开始学FreeBSD,但也是断断续续,没有当初学Windows那么大的好奇心。不过,虽然进展缓慢,收获多多少少还是有一些的。世界使用量第一的Web服务器Apache最初是为UNIX开发的,超级数据库Oracle最初也是为UNIX开发的,高端的服务器用的操作系统就是UNIX!。   
当初,我们使用Windows2003,也用它架过相当多的服务,我们知道2003的性能不错。但世界上这么多大型站点使用的都是UNIX,证明了它确实是很优秀的。
我们知道,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,简单地说它就是让用户与操作系统内核沟通的一个媒介,使用者可以把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,即通用内核配置文件,适合大多数机器使用的内核配置文件。默认安装的时候使用的就是按FreeBSD的内核配置文件编译出来的内核。为了让大多数不同的电脑能用,里面包含了很多使用者机器上没有的东西。现在使用者的任务就是把这些东西全都去掉,同时加进去使用者想要的东西。可以用任何一个文本编辑器打开它,至于怎么编辑,使用者可以查看手册。在编译的过程中,会在某个目录下产生新的内核源码,使用者进入那个目录后就可以开始编译并安装新系统了。我们的机器,删除没用的东西后的内核非常精简,256M的内存启动后完全Free的内存有231M,也就是说在启动过程中被“经历”过的内存区域只有25M,而且这不是活动内存,活动内存只有2650K!跟Windows的上百兆内存占用相比有天壤之别!
    要想正常吃透新内核是有些难度的,使用者需要对硬件相当熟悉。安装也是在使用UNIX的过程中感到挺困惑的一个问题。我们都知道,在Windows系统中,安装一个软件很简单,下载文件压缩包,解压,双击setup.exe开始安装,选择一下路径就可以了。安装好后,文件通常会写注册表,使用者需要重新安装一次这些软件。
    于是在Windows下产生一些新名词,典型的如“绿色软件”,意思是说不会写注册表,直接解压后就能用的软件。当这些思想深深地圈住使用者的时候,使用者接触UNIX时,也把这套思想给搬过来了。在固定的思想模式的驱使下,使用者去下载了个软件包,解压后却无法找到安装文件。UNIX下的文件安装,以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就是这么井然有序。至于卸载,就是把这个文件夹删除,而不会留下垃圾。可以这样说,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也必须安装在主分区),那么使用者应该从F盘中分出空闲的空间,插入安装盘安装,选分区的时候可以把FreeBSD放到那块空闲的硬盘区域上。这样,一个完整的系统就装好了。