|
写在前面的
什么是linux,它的历史,它的众多的发行版
本小节部分内容摘自http://wiki.lupaworld.com/index.php/Linux历史
简单说,linux就是跟windows一样,是一种电脑操作系统.可以在包括个人电脑在内的各种计算机上使用。它使用的版权许可证是支持软件的自由免费、开放源代码的GNU通用公共许可证GPL。多年来,Linux获得了广大黑客、计算机爱好者、科研人员以及普通用户的喜爱,目前已经广泛用于计算机行业的各领域,包括了个人电脑、服务器、工作站以及各类智能嵌入式系统等等.
linux的历史可以上溯到上个世纪60年代末,美国贝尔实验室发明了UNIX,一个多用户多任务的操作系统。那个年代,计算机程序的源码都是公开的,尽管它们很多时候只能被专业前沿的程序员们看懂。到了70年代,操作系统开始商业化,出于利益最大化等的考虑,源代码开始向用户封闭,这给许多传统的程序员黑客带来了不便,他们能够发现程序中的漏洞并有解决的能力,但是提供程序的商业公司却拒绝让用户直接修改,这对传统黑客来说对计算机软件的发展是一个相当大的限制。

贝尔实验室的ken Thompson,Dennis Ritchie在一部PDP-7上开发了Unix操作系统
1984年,黑客Richard M Stallman成立了自由软件基金会FSF和开源组织GNU,并提出了著名的开源协议标准GPL,他的计划是开发出一套完整的免费、公开源代码的Unix操作系统和及其应用软件。GNU的意思就是GNU's Not Unix,以一个递归式的定义描述了自己和Unix有关又不同于Unix的特点。

图为GNU的标志(GNU在英文中同时也是一种牛的名称)

图为GNU掌门人Richard Stallman,他的爱好是音乐和蝴蝶,这是他对着一只蝴蝶唱情歌的照片
到80年代末,GNU计划的很多工作已经完工,包括了C语言的编译器GCC,文本编辑软件emacs等,但是操作系统计划hurd迟迟没有推出。这时,如我们所知道的芬兰大学生,著名黑客Linus Torvalds于 1991年10月在学校的ftp上发布了自己所编写的类Unix操作系统--Linux 0.02版的源代码,并宣布它遵守GPL协议,而且符合UNIX的操作系统POSIX标准,源代码可以在Unix主机上用gcc编译生成可执行的二进制代码,可以在个人计算机平台(Intel 80386)上运行。这正是互联网和个人电脑兴起和开始高速发展的时代,它吸引了世界各地的黑客对这个操作系统进行修改和完善,到1994年发布正式的 1.0版本时,已经有了相当大的名气,GNU组织也暂且搁下自己的hurd计划,全力支持linux的发展。我们今天说的linux,事实上只是一个简称,它的正式名称是GNU/linux。

linux创始人Linus Torvalds

linux的标志,一只黄嘴企鹅,也有人开玩笑说,linux是牛(GNU)生下的企鹅
linux本身是操作系统最核心的部分,它并没有任何界面,我们和它进行交流和调用是通过命令解释器shell来进行的,就是类似DOS命令行的方式。
随着计算机的发展,操作系统界面的图形化成为可能。80年代美国麻省理工学院MIT提出了X Window,这是UNIX体系的一个重要发明,它和windows NT不同的是,X Window没有直接嵌入到系统内核,而只是作为一个系统服务运行,就是说可以完全不要图形界面,只需要一个shell就可以与内核直接对话,对 linux来说,再加上源代码公开,这为节省系统开销提供了保证。
在Linux上可以安装X及其窗口管理器作为个人桌面操作系统;也可以只要一个最基本的命令行的shell做服务器并提供远程登录和维护;更可以进行裁减和更改,到只有几百K的核心,作为智能电器如手机等的嵌入式系统核心。
事实上、我们普通用户现在所用的PC个人电脑Linux系统,是基于各Linux开发组织的发行版本,它除了包含linux系统内核外,还包括了基本的shell,X Window系统,窗口管理器,以及各种应用软件。在这些基础上按照自己理念进行开发和整合,就形成各种各样的linux发行版,这才是我们常说的linux电脑操作系统。现在主流的发行版有Red Hat Linux (已经分为开源社区发行的Fedora Core系列和用于商业应用的Red Hat Enterprise Linux系列)、SUSE Linux、Debian Linux、Gentoo Linux、Mandriva Linux (前身为Mandrake Linux)、Ubuntu等,国产的有基于RedHat的红旗RedFlag Linux、基于Debian的华镭Ray Linux、以及国内开源社区发布的MagicLinux等等,它们各自有自己的特点
它的众多的发行版
本小节部分内容摘自http://news.onlinedown.net/info/10843-1.htm
前面我们介绍过,我们所使用的linux系统,是基于各种linux开发组织的发行版本。之所以有这些发行版本,是因为基于linux的项目太多也太散乱了,而且其中良莠不齐的情况很多。如果让用户自己去选择支持某个功能的软件并且自己去安装这些软件,是很不现实的。因此各个发行版所需要做的事情,主要就是提供自己的软件包管理功能。
目前使用比较广泛的软件包组织形式大概有三种,基于RPM的软件包管理形式,基于deb的软件包管理形式,以及直接使用源代码的软件包管理形式。
基于RPM的发行版的数量最多,用户群体也最大。国外有知名的如RedHat Linux、Mandrake Linux、SuSE Linux,国内有红旗Linux,Magic Linux,中标普华Linux等等.在这种Linux下安装软件,一般是选择已经编译好的RPM软件包,用rpm命令安装,系统会自动地把软件包解开,并复制到相应的目录中去,同时会在系统的数据库中加入软件包的相关信息。如果以后想要卸载某些软件,同样使用rpm命令加上参数-e,系统会去查询数据库,并删除相关的文件和目录。
RPM最大的优点是简单,几乎所有的功能都通过一个rpm命令辅助以不同的参数实现,比如如果想安装一个软件,使用命令rpm -i foobar-1.0-1.i386.rpm,而要删除一个软件,使用命令rpm -e foobar,假设说, 您碰到一个认不出来的文件,想要知道它是属於哪一个程序套件的话, 您可以这样做:rpm -qf /usr/X11R6/bin/xjewel,如果您想了解某个 RPM 文件,会在系统里安装哪些文件, 您可以这样做:rpm -qpl koules-1.2-2.i386.rpm,如果您找到一个新的 RPM 文件, 却不清楚它的内容,想要获得相关的信息, 可以这样做:rpm -qpi koules-1.2-2.i386.rpm.
当然简单和更有效率是需要付出一定的代价的,那就是"软件包依赖性问题"。由于一些软件在运行是往往还需要其他软件的支持,而用rpm命令安装软件包时系统会先检查它需要的软件是否已经安装,如果发现有一个它所依赖的软件包没有安装,安装程序就会退出,并让你先安装上其他软件,而在安装其他软件时又有可能发生依赖性问题……可以想象有多么麻烦!虽然rpm命令提供了“强制安装” 选项,但除非你有很大的把握,否则“强制安装”上去的软件很难正常工作。
为了解决这一恼人的问题,一些发行版使用了自己的解决方案,如Mandrake Linux在RPM的基础上加了一个前端界面,发现依赖性问题是它会自动到指定的网站上搜索并下载安装;Fedora则提供了一个名为yum的前端程序,发现RPM依赖性问题时也会到指定的网站上下载并装。
基于deb的软件包管理方式的发行版:这种软件包管理方式主要用在Debian Linux上,目前国内的发行版如新华华镭Linux、Hiweed-Debian Linux也采用了这种方式,采用这种方式的当然还包括Deb家族的新秀Ubuntu。对比于rpm的软件包管理方式,deb在设计之初已经考虑了软件依赖性的问题,并且从一开始就将尽可能广泛的软件囊括于自己的管理之下,因此在使用上看上去比rpm要简单的多。同样是安装一个软件,使用纯粹的rpm的系统,你不得不自己下载需要的rpm文件,确定rpm的依赖关系,下载所有依赖的rpm文件以及依赖的依赖的rpm文件,然后全部安装这些文件,而对于 deb来说,你需要的是安装某一个软件,比如apt-get install bind,然后由deb去查找自己的软件库,bind需要使用哪个deb文件来安装,这个deb文件依赖于哪个deb文件,从哪里下载这些deb文件等等这些信息全部属于deb软件包管理的范围,因此你只需要一个命令便可以完成整个软件的安装。当然,前面提到的yum也试图通过类似的机制弥补rpm的不足之处,但是由于采用的是不破坏原有机制的方法,在查找软件依赖性的性能上很难与deb匹敌。
无论如何,二者都是基于二进制的包管理方式,差别仅在于软件的安装过程中,在软件安装上以后,差别就不是很大了。
基于二进制软件包的发行版最大的问题始终还在于依赖性,一个简单的例子,我的软件依赖于GNome->依赖于GTK->依赖于 XLib->依赖于GCC运行期库。由于国外的软件往往对中文的显示没有做优化,如果要改进中文显示,往往要修改XLib这一层的软件,对于基于二进制软件包的发行版来说,修改了这一层意味着建筑于其上的GTK,GNome以及我的软件都将受到影响。为了避免这种影响,你不得不使用发行版本身提供的那些底层的库文件,即使那些库文件不一定适合你。(当然换个角度考虑,这也不一定是缺点,至少你编译的程序如果可以在你的机器上运行,其二进制软件包就可以在使用同一个版本的发行版的别的机器上运行.)
因此会有第三种包管理方式,基于源代码的软件包管理方式,这种发行版的典型代表是Gentoo.早期的Gentoo是一种纯粹的源代码发行版,它要求你必须要有一个已经存在的linux系统(或者livecd)才可以安装这个发行版,安装的时候它将编译一份干净的GCC用来编译后续的软件(Stage1),然后使用这个新编译的GCC编译包括linux内核在内的整个基本系统(Stage2),然后再重新用你的这个基本系统启动,然后在其中编译其它你需要的软件(Stage3),包括XWindow,Gnome等。你可以想像这是一个多么冗长的过程,从Stage1安装Gentoo对于普通配置的电脑来说经常需要几天的时间。

Gentoo的创始人Daniel Robbins和他的孩子
Gentoo的创始人不喜欢在图形界面启动以后再打开一个xterm的窗口,系统内存就只剩下几兆,因此希望创建一个足够精简的,有最好性能的,用户可以完全定制的系统,它创造了Gentoo(参见linky_fan翻译的Gentoo的前世今生http://linky- fan.blog.hexun.com/5722851_d.html),并且在Gentoo大红大紫的时候离开了Gentoo,加入了微软,在微软工作了半年左右的时间以后,“不能否认微软的Linux实验室非常出色,但是我在这里不能完全发挥个人能力,这让我感到十分沮丧,而微软目前已经准备好了一系列新产品的发布,因此个人发挥的空间就更小了。”,他离开了微软,想回到Gentoo的开发阵营中,但是显然Gentoo阵营中不是所有的人都欢迎他,它们可能不相信Gentoo的创始人会加入"象微软这样的"公司,因此在更短的时间以后,他又不得不退出了自己一手创建的Gentoo。
Gentoo的包管理方式被认为是最出色的。它完全采用python语言实现,使用Portage的方式管理所有的软件。Portage对软件进行分门别类,每一类下面的每一种软件都占有一个目录,这个目录中保存了一系列的ebuild文件,代表一个软件的不同版本,以及这个版本在编译和安装到系统中时,依赖于哪些软件以及使用怎样的命令行进行编译和安装。在Gentoo下安装软件的命令也很简单,比如emerge bind,将会安装bind以及所有它需要的其它的库文件,你可以在安装的时候指定不同的use参数,比如你想要安装mplayer这个著名的媒体播放器,却不想安装XWindow,只想使用它的fbdev驱动在控制台上播放电影,你可以使用类似 USE="-x fbdev" emerge mplayer这样的命令。
使用源代码管理软件包对尽可能的优化系统性能提供了可能,但它的缺点就是要求使用者对自己所做的事情有比较充分的理解,明白自己在做什么,并有足够的技术可以解决安装过程中遇到的问题。同时它也要求使用者有一个性能不错的电脑以及要有足够的带宽,因为它的几乎所有的软件都是从网上下载源代码进行编译安装的。同时要有耐心,安装类似openoffice这样庞大的软件可能需要耗费几天的时间。
正因如此,在较新的Gentoo的版本中,已经不再提供Stage1和Stage2安装方式了。如果Daniel Robbins还在Gentoo,不知道他会对这个决定怎样评价。
另外还存在一个叫做LFS(Linux From Scratch)的项目,这个项目并不是一个发行版,它提供了一套文档来描述如何从源代码开始编译一个linux系统,它的文档只描述了类似Gentoo Stage2的一个过程,也没有打算要提供一个类似Gentoo这样的完整的发行版。可以参考 http://lfs.linuxsir.cn/main/ 和 http://www.linuxfromscratch.org/ ,一个是中文站点,一个是官方网站。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|