Linux操作系统基础案例教程
上QQ阅读APP看书,第一时间看更新

2.1 Linux是什么

通常来说,我们所说的Linux由两部分组成,一部分是内核,也就是系统的运行核心,另一部分是建立在内核之上的各种系统和应用软件,这两部分组成了我们日常所说的Linux系统。我们日常所说的Linux系统往往是在Linux这个词前面再带上一两个词,比如:Red Hat Linux、Ubuntu Linux、中标普华Linux。这些都是发行Linux产品的厂商的名称,它们按照自己的市场定位、技术等发布一系列的Linux,我们常说的Red Hat Linux 9.0、RHEL 4这里的“9.0”和“4”指的是厂商为自己的Linux发布版本指定的版本号,而不是Linux的内核版本。那么什么是Linux内核呢?内核(Linux Kernel)是一组管理核心硬件资源的程序,它负责管理所有的硬件资源,是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统称为Linux操作系统。Linux内核源自UNIX的操作系统内核,因此它基本上可以兼容绝大部分UNIX标准(UNIX的标准有很多,比如POSIX、Sys V和BSD)。Linux支持多用户、多进程、多线程,可以运行在x86 PC、Sun Sparc、DEC Alpha、PowerPC、MIPS等多种硬件平台上,是目前支持硬件平台最多的内核。

建立在内核之上的各种软件,则由世界各地的人们自愿提供,这其中,最主要和最核心的部分,由FSF(Free Software Foundation,自由软件基金会)主要赞助的GNU组织提供,GNU是“GNU’s Not UNIX”的缩写。

GNU计划是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。这一计划就是要“重现当年软件界合作互助的团结精神”。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。

GNU旗下的软件很多,著名的gcc(GNU的C编译器)、g++(GNU的C++编译器)、gjj(GNU的Java编译器)、编译工具make、管理外壳Bash、文本编辑器Emacs、启动管理器grub、图形库GTK+等,包括Linux日常必备的工具cp、ls、mv、tar、gzip、awk、sed、grep、dd等等,详细的软件列表可以从GNU网站(http://ftp.gnu.org/)或FSF自由软件基金会网站(http://directory.fsf.org/GNU/)得到。关于GNU的更多信息请参阅2.1.2节。

2.1.1 Linux的历史

20世纪90年代初期,计算机科学迅猛发展,信息技术开始渗透到各个行业。当时的计算市场被划分为了两个部分,一部分是以平民大众用户为主的低端市场,一部分是以商业计算、企业核心计算为主的高端市场。

在20世纪70年代末,IBM正在计划进入个人计算机市场,并在1981年正式推出了IBM个人计算机。IBM需要为自己的产品查找合适的、基于英特尔x86系列处理器的操作系统。IBM找到了微软,据称微软在手上没有任何筹码时即提出DOS一词。而微软则又在未告知自己正在与IBM谈判的情况下,找到了西雅图计算机公司,以5万美元的价格向该公司购买他们所开发的操作系统。微软将该软件更名为PC-DOS,再授权IBM使用该操作系统。微软还与其他计算机生产商谈判,将经过更改后的MS-DOS系统安装到每一台新计算机上。(当时苹果计算机技术先进,但苹果公司不肯开放自己的技术和体系架构,错过了占领大众市场的唯一机会)。

高端市场则是UNIX系统的天下,UNIX操作系统通常由硬件厂商自己开发,而且基本上只能运行在自己的硬件设备上,或者是只有运行在自己硬件设备上才能获得最佳的性能,例如IBM公司的AIX系列UNIX操作系统只运行在IBM的RS/6000系列机器上,Sun公司的Solaris系列UNIX操作系统只能运行在自己的Sparc体系计算机上,HP公司的HP-UX系列UNIX操作系统同样只运行在HP 9000系列计算机上,而这种结合了硬件和操作系统、完整的系统集成解决方案往往会以天价销售给企业,其运行、维护的价格也是高得离谱,因此,这种系统通常只提供给大型企业做核心运算,一般人根本不可能接触到这些UNIX,更别说使用它们了。

但是,随着低端IBM PC的发展,特别是Intel x86芯片的性能越来越好,DOS这么简单的一个单机操作系统已经不能满足大众市场上的需求,而UNIX又高不可攀,这时,出现了一个开放自己源代码的操作系统——Minix。Minix由Andrew S.Tanenbaum教授完全自主开发,它存在的目的并不是面向市场销售,而是面向教学,是这位教授为了便于学生掌握操作系统原理而开发的操作系统(可以说,它是一个为了实现而实现的操作系统),而且,最重要的是,Minix可以运行在当时已经在大众市场逐渐普及的Intel 80x86处理器上,任何人,只要拥有一台PC,就能自己研究和开发操作系统,这大大降低了部署和学习操作系统的门槛。

用现在的眼光来看,Minix可能并不强大,毕竟它存在的目的首先就是为了演示操作系统原理,而且它大约只有12000行代码,但这已经足以吸引很多爱好者了,越来越多的学校和学生开始以Minix为基础,学习操作系统,这其中,包括了一个叫Linus Torvalds的芬兰学生。他的目的是想设计一个代替Minix的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有UNIX操作系统的全部功能,因而开始了Linux雏形的设计。

1991年9月中旬,Linux 0.01版正式面世,并且被放到了网上。它立即引起了人们的注意。源代码被下载、测试、修改,最终反馈给Linus。几周以后,Linux 0.03版发布了。12月份,0.10版发布了。这时的Linux还显得很简陋。它只能支持AT硬盘,而且不用登录(启动就进入bash)。0.11版有了不少改进,可以支持多国语言键盘、软驱、VGA、EGA、Hercules等等。Linux的版本号从0.12直接上升到了0.95、0.96……不久,Linux的源代码就通过在芬兰和其他一些地方的FTP站点传遍了全世界。

Linux内核越来越强大,内核集成了所有的基本资源管理、调度和作业功能,这种架构被称之为整体内核。从Linux诞生开始,其整体内核架构就一直被争论不休,事实上,关于整体内核和微内核的论战,从这两种体系出现就没有停止过。最先抨击Linux这种整体内核架构的,正是Minix的作者,Andrew S.Tanenbaum教授,他如此评价Linux和Linus:“我还是坚持我的观点,在1991年还设计这样一个整体架构的内核是个根本性的错误。你该庆幸他不是我的学生。这么个设计,在我这儿得不了高分”。好在,Linus和大家并没有气馁,虽然Linus因此受到了打击,怎么知道他因此受到打击了呢?因为Linus后来承认说,这是他关于开发Linux所得到的最坏评价。Tanenbaum是当时的知名教授,他说的话自然很有分量。但这次面对Linux,他的话没能奏效,因为Linus不是个轻易服输的人。

随着越来越多的人加入开发Linux的队伍中来,Linux已经逐步成熟和稳定。Linux在GPL许可下发布,这样,任何人都能自由获得Linux的源代码,并进行复制、学习和修改,甚至发布自己的新版本。终于,软件厂商开始关注Linux,他们对Linux进行了很多改进,在其上编译并配置好各种软件,把这些整合好的软件打包成为一个整体销售。与其他操作系统或软件产品不同的是,Linux软件厂商所销售的并不是Linux本身,而是基于Linux的软件服务,服务是个很广泛的范畴,例如,把各种软件集成到一个系统中,保证它们都能正常运行,这就是一种服务,有人拿到软件不会用,于是去咨询专家如何使用,这也是一种服务。

这个时期,出现了很多专门的Linux厂商,其都推出了各自的Linux发行版,所谓Linux发行版,是指使用Linux内核和GNU软件整合到一起的一套完整的操作系统,对于普通用户来说,把所有这些软件整合到一起,不仅难度非常大,而且会消耗过多的时间和资源,因此,购买整合后的Linux发行版是一个很好的选择(当然你也可以选择自己做,比如使用LFS,Linux From Scratch,一种完全从源代码开始,编译所有软件的方式)。如前面所说,按照GPL协议,人们有权力出售那些遵循GPL协议的软件并获利,只要这种行为本身也遵循GPL协议(即出售的软件必须同时提供其源代码并告知买方其拥有的权利)。

早期著名发行版有Slackware,Redhat,SuSe(已被Novell收购),Mandrake(已改名为Mandriva)、TurboLinux,OpenLinux等,当时这些发行版主要依靠软盘、CD、DVD进行传播,后来随着Internet带宽和速度不断增强,直接通过网络传播成为可能,一批新兴的Linux发行版开始崭露头角,它们不依靠传统的宣传和传播渠道,完全依赖于Internet作为平台,通过下载镜像、直接网络安装等方式进行传播,比如Debian、Gentoo、LFS等。

随着Linux的迅速发展,Linux上的软件也开始得到迅猛发展,很多以前运行在UNIX上的经典软件,开始被爱好者移植到Linux上,同时,也涌现了大批优秀的基于Linux的自由软件,像Xfree 86、KDE、GNOME等等。正是这些软件的不断强大,反过来又进一步推动了Linux的发展和普及。

Linux的爱好者越来越多,大家已经不满足于仅仅在Intel 80x86架构上运行Linux,他们开始把Linux移植到其他平台上,例如Sun的Sparc平台、Motorola的PowerPC平台,还有ARM、Alpha等等。

今天,越来越多的厂商、商业用户和个人用户开始使用和支持Linux,很多厂商把自己的软件发布到Linux平台上,为Linux系统提供自己硬件的驱动,而很多商业机构开始使用Linux构建自己高效、稳定的计算环境。一旦有新硬件问世,Linux内核就能快速被改进以适应它。比如,Intel Xeon处理器才问世几个星期,Linux新内核就跟上来了。它还被用在了Alpha、MAC、PowerPC上。正如它在1991年诞生时那样,Linux正以同样的热情阔步走向新世纪。

2.1.2 关于GUN

GNU计划是由理查德·斯托曼在1983年9月27日公开发起的,它的目标是创建一套完全自由的操作系统。理查德·斯托曼最早是在net.unix-wizards新闻组上公布该消息,并附带一份《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。GNU是“GNU’s Not UNIX”的缩写,为避免与Gnu(非洲牛羚,发音与“new”相同)这个单词混淆,斯托曼宣布GNU应当发音为“Guh-NOO”,与“canoe”发音相似。UNIX是一种广泛使用的商业操作系统的名称。由于GNU将要实现UNIX系统的接口标准,因此GNU计划可以分别开发不同的操作系统。GNU计划采用了部分当时已经可自由使用的软件,例如TeX排版系统和X Window视窗系统等。不过GNU计划也开发了大批其他的自由软件,这些软件也被移植到其他操作系统平台上,例如Microsoft Windows、BSD家族、Solaris及MacOS。

到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件,所以他与律师草拟了有名的通用公共许可证(General Public License,GPL),并且称呼它为Copyleft(相对于专利软件的Copyright)。被称为“公共版权”。GNU也针对不同场合,提供GNU通用公共许可证与GNU自由文档许可证这两种协议条款。

为什么要将自由软件挂上GPL的“版权宣告”呢?这个版权宣告对于作者有何好处?首先,斯托曼对GPL一直是强调Free的,这个Free的意思是这样的:

“Free software” is a matter of liberty,not price.To understand the concept,you should think of“free” as in “free speech”,not as in “free beer”.

“自由软件”是权利问题,不是价格问题。要理解这个概念,自由应该是“言论自由”中的“自由”,而不是“免费啤酒”中的“免费”。

Free software is a matter of the users' freedom to run,copy,distribute,study,change and improve the software.More precisely,it refers to four kinds of freedom,for the users of the software.

自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由。更精确地说,自由软件赋予软件使用者四种自由。

The freedom to run the program as you wish,for any purpose(freedom 0).

按照自己的意愿自由地运行程序,为任何目的。

The freedom to study how the program works,and adapt it to your needs(freedom 1).Access to the source code is a precondition for this.

有研究该软件如何运行,以及按需改写该软件的自由。取得该软件源代码为达成此目的之前提。

The freedom to redistribute copies so you can help your neighbor(freedom 2).

有重新发布副本的自由,这样你可以借此来敦亲睦邻。

The freedom to improve the program,and release your improvements to the public,so that the whole community benefits(freedom 3).Access to the source code is a precondition for this.

有改进该软件,以及向公众发布改进的自由,这样整个社群都可受惠。取得该软件源码为达成此目的之前提。

大意是说,Free Software(自由软件)是一种自由的权力,并非是“价格!”。举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力,但是,这并不代表你可以到处喝“免费的啤酒!(free beer)”,也就是说,自由软件的重点并不是指“免费”的,而是指具有“自由度,Freedom”的软件,史托曼进一步说明了自由度的意义是:使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。

这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在UNIX上面运行,但是经过原始码的修改之后,你将可以拿他在Linux或者是Windows上面运行。总之,一个软件挂上了GPL版权宣告之后,他自然就成了自由软件!这个软件就具有下列特点:

(1)取得软件与原始码:你可以根据自己的需求来执行这个自由软件。

(2)复制:你可以自由地复制该软件。

(3)修改:你可以将取得的原始码进行程序修改工作,使之适合你的工作。

(4)再发行:你可以将你修改过的程序,再度自由发行,而不会与原先的撰写者冲突。

(5)回馈:你应该将你修改过的程序代码回馈于社群。

但请特别留意,你所修改的任何一个自由软件均不能:

(1)修改授权:你不能将一个GPL授权的自由软件,在你修改后而将其取消GPL授权。

(2)单纯贩卖:你不能单纯地贩卖自由软件。

自由软件与商业行为:很多人还是有疑问,目前不是有很多Linux开发商吗?为什么其可以出售Linux这个GPL授权的软件?原因很简单,因为其大多提供“售后服务”,所以,其所使用的自由软件,都可以在他们的网站上面下载!(当然,厂商自己开发的部分工具软件不属于GPL的授权软件)但是,你可以购买其Linux光盘,他们会提供相关的手册说明文件,同时也会提供你数年不等的咨询、售后服务、软件升级与其他协力工作等附加价值。

所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在“售后服务”这个领域,毕竟自由软件并不是每个人都会写,有人有需要时,他就会请求你的协助,此时,你就可以通过服务来收费了。

上面提到的大多是与用户有关的项目,那么GPL对于自由软件有何优点呢?大致的优点有这些:

(1)软件安全性较佳;

(2)软件执行效能较佳;

(3)软件除错时间较短;

(4)贡献的原始码永远都存在。

这是因为既然是Open Source的自由软件,那么你的程序代码将会有很多人帮你查阅,如此一来,程序的漏洞与程序的优化将会进展得很快!所以,在安全性与效能上面,自由软件一点都不输给商业软件。

1985年,理查德·斯托曼又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被Red Hat兼并的Cygnus Solutions。

到了1990年,GNU计划已经开发出的软件包括了一个功能强大的文字编辑器Emacs、C语言编译器gcc及大部分UNIX系统的程序库和工具。唯一依然没有完成的重要组件,就是操作系统的内核(称为Hurd)。

1991年,林纳斯·托瓦兹编写出了与UNIX兼容的Linux操作系统内核并在GPL条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。

1992年,Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。(尽管如此,GNU计划自己的内核Hurd依然在开发中,目前已经发布Beta版本。)

许多UNIX系统上也安装了GNU软件,因为GNU软件的质量比之前UNIX的软件还要好。GNU工具还被广泛地移植到Windows和Mac OS上。

GNU工程二十多年来已经成为一个对软件开发主要的影响力量,创造了无数的重要的工具,到20世纪90年代初,GNU项目已经开发出许多高质量的免费软件,其中包括有名的emacs编辑系统、bash shell程序、gcc系列编译程序、gdb调试程序等等。这些软件为Linux操作系统的开发创造了一个合适的环境,是Linux能够诞生的基础之一。以至于目前许多人都将Linux操作系统称为“GNU/Linux”操作系统。

GNU将能够执行UNIX的程序,但是不会和UNIX完全一样,特别是GNU计划拥有支持更长文件名、文件版本号、一个不怕死机的文件系统,或许还要有自动文件名补全、与终端机无关的显示支持、可能最后还要有一个基于Lisp的视窗系统,以使好几个Lisp程序和普通的UNIX程序能共享同一屏幕。C和Lisp都将成为系统的程序语言并会设法支持UUCP、MIT Chaosnet及Internet的通信协议。

GNU最初的目标是在有虚拟内存的68000/16000系列机器上开发,因为这样的环境是最容易开发程序来实现GNU的运行。让GNU能在其他较小的机器上运行的工作,将会留给那些希望能在这些机器上使用的人。

GNU不是公共的、毫无约束的软件(Public Domain)。GNU计划允许每一个人修改及传播GNU,但是决不允许传播者对他传播的程序再加进其他的限制。也就是说,不允许将修改后的程序据为己有。GNU计划希望能确保GNU所有的版本都能保持自由。

GNU的核心精神是自由与分享,对知识的渴求是支持其探索的唯一动力。