• 网页防崩溃器 > Unix、GNU 和Linux 的历史
  • Unix、GNU 和Linux 的历史

    免费下载 下载该文档 文档格式:PDF   更新时间:2014-08-07   下载次数:0   点击次数:1
    Unix、GNU 和Linux 的历史 Unix 有着悠久的历史,并且 Linux 就是由其发展而来的,因此要了解 Linux 就必须了 解Unix,而了解 Unix 就必须了解其历史.Unix 诞生之前,开发人员通常要提交一摞摞的 打孔卡片, 其中每张卡片代表一个命令或命令的一部分. 计算机读取并顺序执行这些卡片. 完成这些工作后,开发人员会得到计算机产生的输出.从提交到计算机完成输出通常需要 几天的时间.如果代码中有错误,那么输出就会有错误,而且开发人员必须重新开始.后来,电传打字机以及各种形式的分时系统极大地加速了开发过程,但是计算模型基本上是 一样的:一个字符序列(打孔卡片或键盘上的按键——仍然只是字符串)以批量作业的形式 提交并运行(或者运行失败),然后等待相应结果的输出.这对今天而言意义重大,因为这 是所有计算系统中数据的传输方式——按顺序传输的字符序列.无论是文本文件、网页、 电影或者音乐,它们全都只是 0、1 序列,并且一直如此.任何看起来有些不一样的东西都 只是缘于 0、1 序列上层的接口. 20 世纪 60 年代中期,Unix 与其他各种交互式、分时系统开始起步.Unix 及其约定至 今一直处于计算实践活动的中心地位;它的影响体现在了 DOS、Linux、Mac OS X 甚至 Microsoft Windows 上. 1.1 Unix 1965 年,贝尔实验室与通用电气公司(GE)加入了麻省理工学院(Massachusetts Institute of Technology,MIT)的一项名为 MULTICS(Multiplexed Information and Computing System, 多工信息与计算系统)的项目.Multics 一开始是要被设计成一个稳定的分时操作系统. "多工"的要求给项目带来了不必要的复杂度,最终导致贝尔实验室于 1969 年放弃该项目. Ken Thompson、Dennis Ritchie、Doug McIlroy 与Joe Ossanna 保留了该项目的一些思想, 大大降低了复杂度,并开发出了 Unix(该名称是对 MULTICS 的戏谑,因为 Unix 是受 MULTICS 启发而成的简化版的操作系统). Unix 的一个早期特征是引入了管道——这一机制由 Doug McIlroy 酝酿了几年,并由 1 第章第I部分 基本概念4Ken Thompson 在Unix 中实现.此外,管道同样采用串行数据流的概念,但是它引入了让 数据流通过的 stdin 和stdout.之前就有过与管道类似的东西,并且概念都相当简单:由一 个进程产生的输出作为另一个命令的输入. Unix 的管道方法引入的概念给系统其余部分的 设计带来了显著的影响. 大多数命令都有一个文件作为参数, 但是现有的命令被修改成默认从 "标准输入" (stdin) 读取,并向"标准输出"(stdout)输出;管道可以将这些数据从一个工具"导向"另一个工 具.这是个新概念,它很大程度上定义了 Unix 的shell;它使整个系统成为许多具有通用 功能工具的集合,这与庞大的专用应用程序的做法是相违背的.这一思想被概括为"做一 件事并把它做好" . 在保持与 Unix 工具的兼容性的同时, GNU 工具链被编写出来用于代替 Unix. GNU 项目的开发人员经常要负责重写 Unix 工具并增加附加功能, 同时还要恪守 "做 一件事并把它做好"的哲学. 例如,who 命令列出登录到系统的用户,每一行代表一个登录会话.wc 命令对字符、 单词与文本行进行计数.因此,下面的代码将显示有多少用户已登录: who | wc -l who 工具没有必要具备对登录用户数目进行计数的选项,因为通用的 wc 工具已经能 够做到这一点.虽然对于 who 而言不会太省事,但如果用于整套工具(包括任何需要编写 的新工具),这将省去大量的精力并降低复杂度,而复杂度越高便意味着引入额外漏洞的可 能性越高.当这样的方法用于更加复杂的工具时,如grep 或者 more,系统的灵活性将随 着每个增加的工具得到增强. 同样地,这样的系统意味着用户不必学习每个实用程序实现其"单词计数"特性的方 法.实际上有一些标准的开关:-q 一般表示 Quiet(静默),-v 一般表示 Verbose(详细)等.但是,如果 who -c 表示"对列出的条目进行计数" ,而cut -c 表示"剪切开头 n 个字符" , 那么-c 在这两个命令中的含义就不一致了.最好每个工具都完成各自的任务,并让 wc 为GNU 项目由 Richard Stallman 于1983 年发起, 目的是为了使用自由软件代替 具有专利权的商业 Unix.在1991 年Linux 内核项目启动之前,GNU 几乎完成了 替换所有用户空间工具的任务. 实际上, GNU 工具与它们原始的 Unix 版本相比, 至少实现了相同的功能,并且出于实际经验经常会提供额外的有用特性.独立测 试说明了 GNU 工具实际上可能比其传统的 Unix 版本更可靠(http://www. gnu.org/software/reliability.html). 对于 more 命令而言,情况实际上比表面看来要复杂;首先它必须找出行 数与列数.此外,系统中存在提供这一信息的工具集.按照这种方式,工具链 中的每个工具都可以被其他工具使用. 第1章Unix、GNU 和Linux 的历史 5 它们完成计数的工作. 再举一个更加极端的例子, sort 工具只对文本进行排序. 它可以按字母表顺序或数值 顺序(二者的区别在于,按照字母表顺序 10 在9之前,但是按照数值顺序 10 在9之后)进 行排序,但它并不对内容进行搜索,也不是每次显示一页.grep 和more 可以通过管道与 sort 组合起来,实现如下面的管道程序所示: grep foo /path/to/file | sort -n -k 3 | more 该管道程序将在/path/to/file 中搜索 foo. 命令的输出(stdout)将流入到 sort 命令的 stdin. 想象花园中的一根喷水软管,用它收集 grep 的输出,并连接到 sort 的输入.sort 从grep 接 收到过滤过的序列,并将排序后的结果输出到 more 的stdin,由more 来读取过滤与排序过 的数据,并对其进行分页输出. 我们最好理解其中的实际过程;该过程与人们直观认为的相反.首先运行的是 more, 它的输入被连接至一个管道.然后是 sort,并且其输出被连接至之前那个管道.接着创建 第二个管道,并且将 sort 的stdin 连接至该管道.最后执行 grep,将其 stdout 连接至与 sort 进程相连的那个管道. 当grep 开始运行并输出数据时,数据顺着管道流向 sort,sort 将其输入进行排序并顺 着管道输出到 more,由more 对管道输出的全部内容进行分页输出.在有错误的情况下, 这样的过程会出现不同的行为.如果 more 这个词键入错误,则不会有任何事情发生.如果grep 这个词键入错误,则more 和sort 会执行到错误被检测出来.对于本例而言,这样 的错误没有什么影响.但是,如果处于管道程序下游的命令具有某种永久性的效果(例如创 建或修改一个文件),那么即使没有执行整个管道,系统的状态还是会改变. 1.1.1 "一切皆文件"与管道 Unix 中还引入了一些关键性的概念. 其中之一便是著名的 "一切皆文件" 的设计方法. 按照这种设计思路,设备驱动程序、目录、系统配置、内核参数以及进程全都表示为文件 系统中的文件.任何事物,无论是纯文本文件(例如/etc/hosts)、块设备或字符设备驱动程序 (例如/dev/sda)或者是内核状态与配置(例如/proc/cpuinfo),它们都用文件的形式表示. 管道的存在使得系统中的工具在编写时假设它们处理的是文本流,而且实际上大多数 系统配置也是以文本的形式存在.可以使用现有的工具对配置文件进行排序、搜索、重新 格式化甚至比较与重组操作. "一切皆文件"的概念与 4 种可以执行的文件操作(open、close、read、write)意味着 Unix 实际上使用了一种简洁明了的系统设计方法. shell 脚本本身也是文本形式的系统实用 程序.我们可以编写下面这样的脚本程序: #!/bin/sh cat $0 echo "===" tac $0 这段代码使用 cat 工具简单地输出一个文件的内容, 然后使用 tac 工具将内容按相反的 顺序输出(tac 的用途可以顾名思义,因为字母 cat 颠倒过来就是 tac,这也是典型的 Unix 式第I部分 基本概念6的幽默).变量$0 是一个由系统定义的特殊变量,它包含所谓当前运行程序的名称. 因此该命令的输出如下所示: #!/bin/sh cat $0 echo "===" tac $0 === tac $0 echo "===" cat $0 #!/bin/sh 前4行是 cat 的结果,第5行是 echo 语句的结果,而最后 4 行则是 tac 的输出. 1.1.2 BSD AT&T 公司的贝尔实验室不能出售 Unix,因为它当时处于电信垄断地位,这样便阻碍 了Unix 进入诸如计算等其他行业.因此,AT&T 开始分发 Unix,特别针对的是渴望免费 获取操作系统的大学.实际上,高校能获取到源代码有额外的好处,尤其是对于系统管理 员,也包括学生.用户与管理员不仅可以运行操作系统,还能够查看(与修改)使操作系统 运行的代码.对于 AT&T 而言,提供源代码的访问权是很容易办到的;公司(在当时那个阶 段)也不是特别愿意独自开发和为 Unix 提供支持,这样一来用户可以自行提供支持.最终 的结果是许多有着 Unix 经验的大学生进入了各行各业, 当工作需要操作系统时, 他们便会 建议使用 Unix. Unix 使用量的增长是因为它在喜爱其简明设计的用户之间很流行, 也是缘 于其偶然的发布方式. 尽管 Unix 以免费或低价方式分发,并且包含了源代码,但根据自由软件基金会(Free Software Foundation,FSF)的定义,Unix 不是自由软件.FSF 对自由软件的定义是关于自 由而不是价格.Unix 许可证禁止 Unix 用户向其他人员进行重新发布,尽管许多用户开发 了自己的补丁与一些使用 Unix 子许可证的共享补丁(对于没有获得 AT&T 的Unix 许可证的 用户而言,这些补丁可能没有用处.核心软件仍然是 Unix;任何补丁都只是对它的修改). 加州大学伯克利分校的伯克利软件套件(Berkeley Software Distribution,BSD)创建和发布了 许多这样的补丁,从而修复了漏洞、增添了特性并改进了 Unix. "自由软件"与"开放源 码"这两个术语不会存在很长的时间,但是所有软件的发布都是基于一个思想:如果某物 有用,则它应当被共享.TCP/IP 作为 Internet 的两个核心协议通过 BSD 进入了 Unix,以 同样方式进入 Unix 的还有 BIND、 域名系统(Domain Name System, DNS)服务器和 Sendmail 邮件传输代理(mail transport agent,MTA).最终,BSD 为Unix 开发了足够多的补丁,以 至于该项目实际上取代了全部的原始 Unix 源代码.经过一场诉讼案,AT&T 与BSD 达成 协议,BSD 中残留的 AT&T 部分的代码将被重写或以新的许可证发布,这样 BSD 的所有 权将不属于 AT&T,并且可以自行发布.BSD 后来衍生出 NetBSD、OpenBSD、FreeBSD 以及其他一些变种. 第1章Unix、GNU 和Linux 的历史 7 1.2 GNU 我们已经提到 GNU 项目是从 1983 年开始的,而在当时大多数计算机制造商的软件都 是以闭源的形式连同硬件一起发布的,该项目是针对闭源的一项抵抗运动.早期一直都有 社区在用户之间共享源代码,如果有人认为可以进行改进,那么他们可以按照其意愿修改 代码.这并没有以法律文书的形式确定下来,它只是开发人员之间自然形成的一种文化. 如果有人对软件的某部分感兴趣,何不给他一份软件的副本(通常以源代码的形式分发,便 于他人对其进行修改并运行在自己的系统上.当时在一台机器上编译的二进制软件很少能 够在另一台机器上运行)?正如 Stallman 在Free Software,Free Society(2002)一书的第 1 章 中所说的那样, "软件的共享??与计算机一样古老,就像菜谱的共享与烹饪一样古老" . 从20 世纪 70 年代到 80 年代早期,Stallman 与MIT 的其他开发人员一直使用非兼容 分时系统(Incompatible Timesharing System,ITS).随着那一代硬件的衰落,新的硬件涌现 出来,并且随着硬件行业的发展与新增的特性,新的机器都带有预先定制的操作系统.在 当时,操作系统通常与硬件有着很强的相关性,因此随着运行 ITS 和CTSS 的硬件被新的 设计取代,这两种操作系统也逐渐衰亡. Stallman 的转变是从他试图修复一个打印机驱动程序开始的.他希望打印机在阻塞(经 常发生)时能够警告已提交任务的用户,让用户来解决阻塞问题.当时的打印机可以供每个 人使用.如果用户提交的任务将打印机阻塞,则要等到问题解决才能得到打印输出.但是 在这之后已经提交任务的用户则必须等待更长的时间.MIT 的用户在提交打印任务时,经 常遇到这样恼人的情况,等了几个小时(当时的打印机比现在要慢得多),最后发现打印机 甚至在自己提交打印任务之前就已经阻塞了.于是 Stallman 希望修改其中的代码.他并没 有指望原来的开发人员能为他开发这一特性,而是愿意自己进行修改,于是向开发人员索 要源代码的一份副本.他被拒绝了,因为驱动软件包含了与打印机工作原理有关的专利信 息,而这些信息对于其他打印机制造商而言可能是很有价值的商业竞争信息. 触动 Stallman 的不是软件特性本身,而是开发人员不愿意与其他开发人员共享代码的 现实.Stallman 不能认同这样的态度,因为直到当时他都认为代码的共享是理所当然的. 问题在于软件——尤其是那个打印机驱动程序——不像 Stallman 曾使用过的以前的操作系 统一样免费(这里没有自由的含义).这样的问题充斥了整个行业,而且不只针对某一个平 台,所以更换硬件也无济于事. ITS 是对当时同样在 MIT 开发的 IBM 的兼容分时系统(Compatible Time Sharing System,CTSS)的戏谑.CTSS 中的 C 强调它与 IBM 早期大型机的某 些兼容性.而ITS 中的 I 则标榜其叛逆的非兼容性. 第I部分 基本概念8Richard Stallman 是一个意志坚定、思想很有逻辑性的人(他将自己描述为"边缘性孤 独症者"),并且决心使用他所知的唯一方式来解决问题:编写新的操作系统来维护早期那 种不成文的自由,允许对于系统有同等的访问权,包括使系统运行的代码.由于当时没有 这样的操作系统,他必须自己编写,而且他确实这么做了. Stallman 打响了抗争的第一枪! From CSvax:pur-ee:inuxc!ixn5c!ihnp4!houxm!mhuxi!eagle!mit-vax!miteddie! RMS@MIT-OZ Newsgroups: net.unix-wizards,net.usoft Organization: MIT AI Lab, Cambridge, MA From: RMS%MIT-OZ@mit-eddie Subject: new Unix implementation Date: Tue, 27-Sep-83 12:35:59 EST 自由的 Unix! 从这个感恩节开始,我将要编写一个名为 GNU 的(表示 Gnu's Not Unix)与Unix 完全 兼容的软件系统,并免费分发给能够使用的人.这需要很多的时间、财力、程序与设备 的投入. 首先, GNU 需要一个内核以及所有用于编写与运行 C 程序的实用工具: 编辑器、 shell、 C 编译器、链接器、汇编器与其他一些工具.然后我们将增加一个文本格式化程序、一个 YACC、一个帝国游戏、一个电子表格和数以百计的其他程序.最终我们希望能包含 Unix 系统中带有的所有有用工具,以及其他任何有用的东西,包括联机与硬拷贝文档. GNU 将能够运行 Unix 程序, 但与 Unix 有区别. 我们将基于其他操作系统的经验进行 改进,使得 GNU 更加方便.特别是,我们计划使用更长的文件名、文件版本号、防崩溃 文件系统、文件名补全与独立于终端的显示支持,最后是基于 Lisp 的视窗系统.Lisp 程序 与普通的 Unix 程序可以通过该视窗系统来共享屏幕.C 语言与 Lisp 语言可以作为系统编 程语言使用.我们还需要优于 UUCP 且基于 MIT 的chaosnet 协议的网络软件.另外,可能 还需要某些与 UUCP 兼容的软件. GNU 是GNU's Not Unix 的递归缩写.如果将缩写 IBM 扩展开,则得到 International Business Machines,并且往下就不能展开了.如果将 GNU's Not Unix 扩展开,则得到 GNU's Not Unix's Not Unix.再扩展,则得到 GNU's Not Unix's Not Unix's Not Unix,依此类推.这是一种典型的"黑客式幽默"(耍点 小聪明或者标新立异),它通常是一种相当冷的幽默.在grep 手册页的末尾, NOTES 部分下的一行注释——GNU's not Unix, but Unix is a beast; its plural form is Unixen(GNU 不是 Unix,但Unix 是野兽,其复数形式为 Unixen)—— 则是对 Unix 的戏谑. 第1章Unix、GNU 和Linux 的历史 9 关于我本人 我叫 Richard Stallman, 原始 EMACS 编辑器的发明人, 现在就职于 MIT 的人工智能实 验室.我在编译器、编辑器、调试器、命令解释器、非兼容分时系统与 Lisp Machine 操作 系统方面开展了广泛性的工作.我最先在 ITS 中实现了独立于终端的显示支持.另外,我 已经实现了一个防崩溃文件系统,以及为 Lisp 机器实现了两个视窗系统. 编写 GNU 的目的 我认为的黄金准则是, 如果我喜欢一个程序, 那么我必须与喜欢它的其他人进行分享. 从良知的角度,我无法签署保密协议或者软件许可协议. 因此,为了可以继续使用计算机而又不破坏自己的原则,我决定将足够多的自由软件 集合起来,这样就可以不使用非自由软件. 贡献的方式 我正在向计算机制造商募集机器与资金,以及向个人募捐程序与工时. 已经有一个计算机制造商答应提供一台机器,但我们可能要使用更多的机器.如果您 捐赠计算机,可以预见到的一个结果是,GNU 不久将能运行在这些机器上.机器最好能在 居民区操作,而且不需要复杂的冷却或电源系统. 个人程序员的贡献方式可以是编写一些 Unix 程序的兼容副本,然后将其交给我.对 于大多数项目,这样的兼职工作可能很难协调.独立编写的部分放在一起可能无法运行. 但对于替换 Unix 这样的特殊任务,这样的问题是不存在的.大多数接口规范已经由 Unix 的兼容性确定下来了. 如果每个贡献的程序都能用于 Unix 的其余部分, 则很可能用于 GNU 的其余部分. 如果我募得资金,我就能雇佣一些全职或兼职的员工.工资不会很高,但我要寻找的 是认为人道主义与金钱一样重要的那些人.这样一来,就可以使这些人全身心地投入到 GNU 的工作中,同时确保他们生活无虞. 如有疑问请联系我本人. 当时已经有了 Unix,并且相当成熟,模块化也很好.因此 GNU 项目开始的目标是使 用自由软件代替 Unix 的用户空间工具. 内核是总体目标的另一部分, 尽管操作系统不能只 有一个独立的内核——内核需要编辑器、编译器和链接器来构建,以及某种初始化进程来 启动. 因此, 现有的专利软件系统被用来汇集一个免费的足以用来对自身进行开发的系统, 并最终编译内核.这一主题一直都没有被忽略;选用 Mach 微内核模型与最新的操作系统 内核设计思想一致.HURD 内核在相当一段时间内都是可用的,尽管它已经被某个新兴的 内核超过,而该新兴内核也是在 GNU 工具下开发的,并可以与 GNU 工具一起使用. HURD 表示 Hird of Unix-Replacing Daemons, 因为它的微内核方法使用多 个用户空间后台进程(在Unix 传统中称为守护进程)来实现 Unix 中的单内核的 功能. 而HIRD 表示 Hurd of Interfaces Representing Depth. 这又是一个像 GNU 一样的递归缩写,但这次是一对相互递归的缩写.这也是在表示 Gnus 的集合 名词 herd 上开的一个玩笑. 第I部分 基本概念10 当对于自由软件不成文的解释失败后,Stallman 需要寻找一种全新的方法来确保可自 由发布的软件保持自由的特性.GNU 通用公共许可证(General Public License,GPL)巧妙地 达到了这一目的.GPL 使用版权确保许可证本身不能被修改;许可证的余下部分声明,发 布对象具有代码的完全占有权的条件是, 他必须将同样的权利授权给他的发布对象(无论修 改与否),并且不能修改许可证.如此一来,所有的开发人员(和用户)都处于同一个平台. 在这个平台上,代码实际属于所有参与进来的人们,并且没有人能对许可证进行修改.这 样就确保了平等性. 软件的某一部分的作者可能对软件使用双重许可证, 如GPL 和一个更 具限制性的许可证,并且已经有很多这样的例子——如MySQL 项目. GNU 项目肩负的任务之一当然是编写作为自由软件的 shell 解释器.Brian Fox 编写了 bash(Bourne Again Shell) shell——该名称来源于 Steve Bourne 编写的原始/bin/sh,其名为 Bourne shell.因为 bash 带有 Bourne shell 的特性,并且还添加了一些特性,所以它便成为了 Bourne Again Shell.Brian 还编写了 readline 工具,用于在提交文本输入行进行分析之前可 以对它们进行灵活的编辑.或许是这一最有意义的特性使得 bash 成为主要的交互式 shell. Brian Fox 是自由软件基金会的第一位员工,该基金会是组织与协调 GNU 项目的实体. 1.3 Linux 芬兰的一名大学生 Linus Torvalds 当时正在使用 Minix,这是由 Vrije 大学(位于阿姆斯 特丹)的讲师 Andrew Tanenbaum 编写的一个简单的 Unix 克隆版本. 但是 Torvalds 为其特性 的匮乏感到沮丧,而且实际上 Minix 没有充分利用(相对而言仍然较新的)Intel 80386 处理 器,尤其是它的"保护模式"可以更好地隔离内核与用户空间.很快他便有了可用的 shell, 并随后使 GCC(GNU C compiler,现在称为 GNU Compiler Collection,因为它已经扩展到编 译C、Fortran、Java 与Ada 语言)运行起来.在当时,内核加上 shell 和编译器足以"引导" 系统启动——它们还能用来构建出自身的副本. Torvalds 在新闻组上的发帖 1991 年8月25 日, Torvalds 在MINIX 新闻组 comp.os.minix 中发布了如下内容: From: torvalds@klaava.helsinki.fi (Linus Benedict Torvalds) To: Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Summary: small poll for my new operating system 这里向使用 minix 的所有人问个好. 我正在为 386(486)AT的克隆品编写一个(免费)的操作系统(只是一个嗜好, 不会像 GNU 那样庞大且专业).从4月份开始萌发这一想法,现在差不多开始着手了.我希望得到任何 此时您也许已经看出其中的模式;尽管 bash 不是递归缩写,但它说明了 基于 Bourne shell 的事实. 同样, 在bourne again 中暗含了对于原始 Bourne shell 改进的含义. 第1章Unix、GNU 和Linux 的历史 11 喜爱或不喜爱 minix 的人的反馈意见,因为我的操作系统在其他方面与 minix 有些相似(由 于实际原因,文件系统具有相同的物理层). 最近我已经移植了bash(1.08)和gcc(1.40),而且看起来能正常工作.这就表明我可以在 几个月之内编写一些实用的东西了.我想知道大多数人都希望它能拥有哪些特性. 欢迎提出任何建议,但我不保证会去实现. Linus Torvalds torvalds@kruuna.helsinki.fi 有趣的是,Torvalds 认为 GNU 项目的成功是必然的.经过 8 年的发展,GNU 基本实 现了大部分目标(除了内核).在起初犯了试图撰写自己的许可证(如果您对知识产权法的国 际适用性的细节不熟悉的话,那么我们通常不建议这么做)的错误之后,Torvalds 也非常自 然地使用 GNU GPL(v2 版本)作为 Linux 内核项目的许可证. 实际上,相比于 Linux 内核下的 shell 脚本编程,本书更多的是关于使用 Unix 和GNU 工具进行 shell 脚本编程.总体而言,本书涉及的大部分工具都是来自自由软件基金会的 GNU 工具:grep、ls、find、less、sed 和awk,当然还有 bash 本身,以及 diff、basename 和dirname.Linux 下shell 脚本编程使用的大多数关键命令都是 GNU 工具.因此,有些人 倾向于用 GNU/Linux 来描述这种 GNU 用户空间与 Linux 内核的组合.本书的目的在于避 免过分的政治狂热的同时保持技术上的准确性.RedHat Linux 是RedHat 的Linux 发行版, 因此称之为 RedHat Linux.Debian GNU/Linux 则倾向于表现其含有 GNU 的成分,所以当 特别谈及 Debian 时,我们也保持同样的态度.当谈及 Linux 内核时,我们就使用 Linux 这 个词;而对于某个 GNU 工具,则会给出它的名称.渴望头版头条的新闻记者可能偶尔将 社区中存在的分歧想象得比实际情况要大得多.就像所有的大家庭一样,社区内部也有矛 盾——经常是激烈且公开的矛盾——但是本书不打算激化这些矛盾. GNU/Linux 系统的流行,特别是在桌面 PC 以及便携系统(不仅仅是在阴暗的数据中心 里面嗡嗡作响的服务器)上相对广泛的使用,孕育出了新一代基于共享哲学的工具集,并且 抛开了任何不必要的历史背景. Microsoft Windows 有着一套很不一样的哲学:最终用户不必关心底层系统的工作原 理,因此也不应当知晓其原理,即使是有经验的专家,这都缘于 Windows 使用的是闭源许 可证.两种哲学的区别不在于质,甚至也不在于量:Windows 采用的是一种不同的方法, 它假定了一种层次关系,其中开发人员知晓软件的原理,用户无须知晓任何原理. 所以,许多有经验的 Windows 用户在收到一份 GNU/Linux 发行版后,发现如果要对 系统进行某种"显然"应当要做的配置时,他们必须手动编辑文本文件或者指定某个特殊 参数, 这让他们感到很失望. 这种灵活性其实是系统的优势而非劣势. 在Windows 模型中, Unix 是被设计成由工程师来使用的.如果某人想用它来做某件事情,他 或她必须准备好学习系统的工作原理以及操作方法.Unix 的整体设计优雅而 简洁("一切皆文件" 、 "做一件事并把它做好"等),这意味着从系统的一部分 学到的原理可以适用于系统的其他部分. 第I部分 基本概念12 用户不必学习操作系统,因为他们不被允许对操作系统进行任何重要的配置:如内核调度 器、文件系统以及窗口管理器.这些配置已被开发人员调整到"一体适用"的程度来满足 大多数用户的需求. 1.4 本章小结 尽管无需 GNU/Linux 的历史背景也可以为其管理与编写 shell 脚本,但是如果对于它 们的来历没有一定的理解,很多看上去很奇怪的地方就会显得毫无道理可言.为RedHat、 SuSE 或Ubuntu 这样典型的 Linux 发行版与为嵌入式设备编写脚本存在差异,因为后者很 可能没有整套的 GNU 工具集而是运行 busybox.为商业 Unix 编写脚本也有一些区别,就像Web 开发人员要考虑确保网站在多种平台的多个浏览器上显示, 编写稳定的跨平台 shell 脚本需要一定量的测试. 甚至在为典型的 Linux 发行版编写脚本时,对于背景的了解也是有帮助的. /etc/sysconfig 是否存在?初始化脚本是位于/etc/rc.d/init.d还是/etc/init.d 中, 或者是否存在? 从某个特定发行版的哪些特性能看出该发行版沿袭了什么样的传统?对于系统历史背景的 了解有助于理解是使用 tar xzf 还是 tar -xzf,使用/etc/fstab 还是/etc/vfstab,以及运行 killall httpd 是只关闭 Apache 进程(GNU/Linux 的做法)还是关闭整个系统(Solaris 的做法)! 从这种历史的多元性出发, 第2章比较了 Unix 与GNU/Linux 环境之间选择的多样性.
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • 网页崩溃是怎么回事  网页崩溃如何修复  网页崩溃  网页崩溃怎么解决  为什么网页老是崩溃  网页经常崩溃  网页为什么会崩溃  网页崩溃是什么原因  网页总是崩溃怎么办  网页一直崩溃