Linux 之前, Unix 的历史
早在 Linux 出现之前的二十年 ( 大约在 1970 年代 ), 就有一个相当稳定而成熟的操作系统存在了!那就是 Linux 的老大哥Unix! 怎么这么说呢?!他们这两个家伙有什么关系呀?这里就给他说众所皆知的, Linux 的核心是由 Linus Torvalds 在 1991 年的时候给他开发出来的, 并且丢到网路上提供大家下载,后来大家觉得这个小东西 ( Linux Kernel ) 相当的小而精巧,所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了! 但是为什么这的小东西这么棒呢?!然而又为什么大家都可以免费的下载这个东西呢?!
· 1969 年以前∶一个没有完成的梦想∶ Bell, MIT 与 GE 的『 Multics』系统
早期的电脑并不像现在的个人电脑一样,他可不是一般人碰的起的呢~除非是军事或者是高科技用途,或者是学术单位的学术研究,否则,真的很难接触到。 非但如此,早期的电脑架构还很难使用,除了运算速度并不快之外,操作介面也很困扰的!在那个时候,写程式是件很可怜的事情,因为,程式设计者,必须要将程式相关的资讯在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将资讯读入主机中运算。光是这样就很麻烦了,如果程式有个小地方写错,哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!
在之后,经由作业系统的改良,使得后来可以使用键盘来进行资讯的输入/输出。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?好在 1960 年代初期麻省理工学院 (MIT) 发展了所谓的∶ 『相容分时系统( Compatible Time-Sharing System, CTSS )』, 它可以让大型主机透过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。架构有点像这样∶

图二、早期主机与终端机的相关性图示
如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软体安装的能力。 而且,比较先进的主机大概也只能提供 30 个不到的终端机而已。
为了更加强化大型主机的系统,以让主机的资源可以提供更多使用者来利用,所以在 1965 年前后, 由贝尔实验室 (Bell)、麻省理工学院 (MIT) 及奇异公司 (GE) 共同发起了 Multics 的计画, Multics 目的是想要让大型主机可以达成提供 300 个以上的终端机连线使用的目标。不过,到了 1969 年前后,计画进度落后,资金也短缺,所以该计画就宣告不治.....喔!是宣告失败~ (注∶ Multics 有复杂、多数的意思存在。)
· 1969 年∶ Ken Thompson 的小型 file server system
在认为 Multics 计画不可能成功之后,贝尔研究室 就退出该计画。不过,原本参与 Multics 计画的人员中,已经从该计画当中获得一些点子, Ken Thompson 就是其中一位!Thompson 因为自己的需要,希望开发一个小小的作业系统,以提供自己的需求。在开发时,有一部 DEC (Digital Equipment Corporation) 的 PDP-7 没人使用, 于是他就准备针对这部主机进行作业系统核心程式的撰写。本来 Thompson 是没时间的, 有趣的是,在 1969 年八月份左右,刚好 Thompson 的妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来! 经过四个星期的奋斗,他终于以组译语言 (Assembler) 写出了一个核心程式,同时包括一些核心工具程式, 以及一个小小的档案系统。那个系统就是 Unix 的原型! 当时 Thompson 将 Multics 庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为∶ Unics 。 Thompson 的这个档案系统有两个重要的概念,分别是∶
  • 所有的程式或系统装置都是档案
  • 不管建构编辑器还是附属档案,所写的程式只有一个目的,且要有效的完成目标。
这些概念在后来对于 Linux 的发展有相当重要的影响喔!
· 1973 年∶ Unix 的正式诞生,Ritchie 等人以 C 语言写出第一个正式 Unix 核心
由于 Thompson 写的那个作业系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。 但是,比较重要的改版则发生在 1973 年。Unix 本来是以组译语言写成的,后来因为系统移植与效能的需求, 该系统被 B 语言所改写。不过,效能依旧不是很好。后来, Dennis Ritchie 将 B 语言重新改写成 C 语言,C 语言算是比较高阶的程式语言,可以在不同的机器上面运作,而 Ritchie 等人也同时将原本 Thompson 的那个作业系统重新以 C 语言改写, 最后发行出 Unix 的正式版本!
在这个时候需要特别注意的是,贝尔实验室是隶属于 AT&T 的,只是 AT&T 当时忙于其他商业活动, 所以对于 Unix 是采取比较开放的态度,此外, Unix 在这个时期的发展者都是贝尔实验室的工程师, 这些工程师对于程式当然相当有研究,所以, Unix 在此时当然是不容易被一般人所接受的! 此外,也需要特别强调,由于 Unix 是以较高阶的 C 语言写的,相对于组译语言需要与硬体有密切的配合, 高阶的 C 语言与硬体的相关性就没有这么大了!所以,这个改变也使得 Unix 很容易被移植到不同的机器上面喔!
· 1977 年∶ 重要的 Unix 分支∶ BSD 的诞生
前面说到,虽然贝尔属于 AT&T ,但是 AT&T 此时对于 Unix 是采取开放的态度, 此外, Unix 是以高阶的 C 语言写成的,理论上是具有可移植性的! 所以,只要取得 Unix 的原始码,并且针对大型主机的特性加以修订原有的原始码( Source Code ), 就可能将 Unix 移植到另一部不同的主机上头了。所以在 1973 年以后, Unix 便得以与学术界合作开发!最重要的接触就是与加州柏克莱 ( Berkeley ) 大学的合作了。 柏克莱大学的 Bill Joy 在取得了 Unix 的核心原始码后,著手修改成适合自己机器的版本, 并且同时增加了很多工具软体与编译程式,最终将他命名为 Berkeley Software Distribution (BSD) 。这个 BSD 是 Unix 很重要的一个分支, Bill Joy 也是 Unix 业者『 Sun 』这家公司的创办者! Sun 公司即是以 BSD 发展的核心进行自己的商业 Unix 版本的发展的。 (后来可以安装在 x86 硬体架构上面 FreeBSD 即是 BSD 改版而来!)
· 1979 年∶ 一个措手不及的版权宣告!
由于 Unix 的高度可移植性与强大的效能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了 Unix 作业系统的发展,例如 AT&T 自家的 System V、IBM 的 AIX 以及 HP 与 DEC 等公司,都有推出自家的主机搭配自己的 Unix 作业系统。
但是,如同我们前面提到的,作业系统的核心 ( Kernel ) 必须要跟硬体配合, 以提供及控制硬体的资源进行良好的工作!而在早期每一家生产电脑硬体的公司还没有所谓的『协定』的概念, 所以每一个电脑公司出产的硬体自然就不相同棉!因此他们必须要为自己的电脑硬体开发合适的 Unix 系统。 例如在学术机构相当有名的 Sun 、 Cray 与 HP 就是这一种情况。 他们开发出来的 Unix 作业系统以及内含的相关软体并没有办法在其他的硬体架构下工作的! 且由于没有厂商针对个人电脑设计 Unix 系统,因此,在早期并没有支援个人电脑的 Unix 作业系统的出现 ( 由于 Unix 强调的是多人多工的环境,但早期的 x86 个人电脑架构下的 CPU 是没有能力达到多工的作业,因此,并没有人对移植 Unix 到 x86 的电脑上有兴趣 )。 每一家公司自己出的 Unix 虽然在架构上面大同小异,但是却真的仅能支援自身的硬体, 所以棉,早先的 Unix 只能与伺服器 ( Server ) 或者是大型工作站 ( Workstation ) 划上等号!
但是这个高度开放的 Unix 系统在 1979 年有了重大的转折~因为 AT&T 由于商业的考量,以及在当时现实环境下的思考,于是将想 Unix 的版权收回去, 因此,在 AT&T 在 1979 年发行的第七版 Unix 中,特别提到了 『不可对学生提供原始码』的严格限制! 同时,也造成 Unix 业界之间的紧张气氛,并且也引爆了很多的商业纠纷~
· 1984 年之一∶ x86 架构的 Minix 诞生
关于 1979 年的版权声明中,影响最大的当然就是学校教 Unix 相关学问的教授了! 想一想,如果没有核心原始码,那么如何教导学生认识 Unix 呢? 这问题对于 Andrew Tanenbaum (谭宁邦)教授来说,实在是很伤脑筋的! 不过,学校的课程还是得继续啊!那怎么办?? 既然 1979 年的 Unix 第七版可以在 Intel 的 x86 架构上面进行移植, 那么是否意味著可以将 Unix 改写并移植到 x86 上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了 Minix 这个 Unix Like 的核心程式! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看 Unix 核心原始码! 并且强调他的 Minix 必须能够与 Unix 相容才行!谭宁邦在 1984 年开始撰写核心程式, 到了 1986 年终于完成,并于次年出版 Minix 相关书籍,同时与新闻群组相结合~
这个 Minix 版本比较有趣的地方是,他并不是完全免费的,无法在网路上提供下载! 必须要透过磁片/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网路上流传, 所以 Minix 的传递速度并没有很快速!此外,购买时,随磁片还会附上 Minix 的原始码! 这意味著使用者可以学习 Minix 的核心程式设计概念喔! (这个特色对于 Linux 的启始开发阶段,可是有很大的关系喔!) 此外,开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为 Minix 主要用在教育用途上面, 所以对于 Minix 是点到为止!所以, Minix 很受欢迎没错, 不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了!这样说,您明白吧??? ^_^
· 1984 年之二∶ GNU 与 FSF 计画的成立
Richard Mathew Stallman (史托曼) 在 1984 年发起的 GNU 计画,对于现今的自由软体风潮,真有不可磨灭的地位!目前我们所使用得很多自由软体,几乎均直接或间接助益于 GNU 这个计画呢! 那么史托曼是何许人也?为何他会发起这个 GNU 计画呢?
Richard Mathew Stallman (生于 1953 年, 网路上自称的 ID 为 RMS) 从小就很聪明!他在 1971 年的时候,进入骇客圈中相当出名的人工智慧实验室(AI Lab.), 这个时候的骇客专指电脑功力很强的人,而非破坏电脑的怪客 (cracker) 喔! 当时的骇客圈对于软体的著眼点几乎都是在『分享』,所以并没有专利方面的困扰! 这个特色对于史托曼的影响很大!不过,后来由于管理阶层的问题,导致实验室的优秀骇客离开该实验室,并且进入其他商业公司继续发展优秀的软体。但史托曼并不服输,仍然持续在原来的实验室开发新的程式与软体。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!
1983 年以后,因为实验室硬体的更换,使得史托曼无法继续以原有的硬体与作业系统继续自由程式的撰写~ 而且他进一步发现到,过去他所使用的 Lisp 作业系统,是麻省理工学院的专利软体, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了 Lisp 这个系统。 后来,他接触到 Unix 这个系统,并且发现, Unix 在理论与实际上,都可以在不同的机器间进行移植。 于是他开始转而使用 Unix 系统。因为 Lisp 与 Unix 是不同的系统,所以,他原本已经撰写完毕的软体是无法在 Unix 上面运行的!为此, 他就开始将软体移植到 Unix 上面。并且,为了让软体可以在不同的平台上运作, 因此,史托曼将他发展的软体均撰写成可以移植的型态!
1984 年,史托曼开始 GNU 计画,这个计画的目的是想要∶ 建立一个自由的开放的 Unix 作业系统。但是建立一个作业系统谈何容易啊!而且在当时的 GNU 是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不能不做这个计画,于是史托曼反其道而行~『既然作业系统太复杂,我就先写可以在 Unix 上面运行的小程式,这总可以了吧?呵呵!』在这个想法上, 史托曼便开始了程式的写作。在写作期间,为了不让自己吃上官司,他绝对不看专利软体的原始码!为了这个计画,他开始使用原本 Unix 上面跑的软体, 并自行撰写功能与 Unix 原有专利软体相仿的软体。
但不论是什么软体,都得要进行编译成为二进位档案(binary file)后才能够执行, 因此他便开始撰写 C 语言的编译器,那就是现在相当有名的 GNU C (gcc)! 这个点相当的重要!这是因为 C 语言编译器版本众多,但都是专利软体, 如果他写的 C 编译器够棒,效能够佳,那么将会大大的让 GNU 计画出现在众人眼前!
Tips:
我们在前面稍微提过,电脑仅认识 0/1 的资料,但是人类不认识啊! 人类对于纯文字的资料(就是所谓的 ASCII 档案格式)比较有感觉。 但是偏偏电脑又不认识 ASCII 格式的文字,很头痛,不是吗? 为此,就会有很多的所谓的『编译器』来辅助我们撰写程式。 我们一般使用文字编辑器以 ASCII 纯文字格式来撰写程式, 再透过所谓的『编译器(compiler)』』将刚刚完成的文字档案 『编译』成为电脑认识的二进位制(binary file)的档案, 以让电脑认识且可以执行的程式啊!
但开始时并不顺利,为此,他先转而将 Emacs 编辑器写成可以在 Unix 上面跑得软体, 并公开公布原始码,因为 Emacs 太优秀了,因此,很多人便直接向他购买。此时 Internet 尚未流行,所以,史托曼便藉著 Emacs 以磁带(tape)出售,赚了一点钱,进而开始全力撰写其他软体。并且成立 自由软体基金会 (FSF, Free Software Foundation),请更多工程师与志工撰写软体。终于还是完成了 GCC,这比 Emacs 还更有帮助! 此外,他还撰写了更多可以被呼叫的 C 函式库(GNU C library), 以及可以被使用来操作作业系统的基本介面 BASH shell ! 这些都在 1990 年左右完成了!
Tips:
如果纯粹使用文字编辑器来编辑程式的话,那么程式语法如果写错时, 只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs 则是一个很棒的编辑器!注意!是编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出您写入的语法可能有错误的地方,这对于程式设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢迎啊!
到了 1985 年,为了避免 GNU 所开发的自由软体被其他人所利用而成为专利软体, 所以他与律师草拟了有名的通用公共许可证 (General Public License, GPL), 并且称呼他为 copyleft (相对于专利软体的 copyright!)。 关于 GPL 的相关内容我们在下一个小节继续谈论,在这里,必须要说明的是, 由于有 GNU 所开发的几个重要软体,如∶
  • Emacs
  • GNU C (GCC)
  • GNU C Library (glibc)
  • Bash shell
造成后来很多的软体开发者可以藉由这些基础的工具来进行程式开发! 进一步壮大了自由软体团体!这是很重要的!不过,对于 GNU 的最初构想 『建立一个自由的 Unix 作业系统』来说,有这些优秀的程式是仍无法满足,因为,当下并没有『自由的 Unix 核心』存在.....所以这些软体仍只能在那些有专利的 Unix 平台上工作~~一直到 Linux 的出现......
· 1988 年∶ 图形介面 XFree86 计画
有鉴于图形使用者介面 ( Graphical User Interface, GUI ) 的需求日益加重,在 1984 年由 MIT 与其他协力厂商首次发表了 X Window System ,并且更在 1988 年成立了非营利性质的 XFree86 这个组织。所谓的 XFree86 其实是 X Window System + Free + x86 的整合名称呢! 而这个 XFree86 的 GUI 介面更在 Linux 的核心 1.0 版于 1994 年释出时,整合于 Linux 作业系统当中!
Tips:
为什么称图形使用者介面为 X 呢?因为由英文单字来看, Window 的 W 接的就是 X 啦!意指 Window 的下一版就是了! 需注意的是, X Window 并不是 X Windows 喔!
· 1991 年∶ 芬兰大学生 Linus Torvalds 的一则简讯
到了 1991 年,芬兰的赫尔辛基大学的 Linus Torvalds 在 BBS 上面贴了一则消息, 宣称他以 bash, gcc 等工具写了一个小小的核心程式,这个核心程式可以在 Intel 的 386 机器上面运作,让很多人很感兴趣!从此开始了 Linux 不平凡的路程!
关于 GNU 计画
1984 年创立 GNU 计画与 FSF 基金会的 Stallman 先生认为, 写程式最大的快乐就是让自己发展的良好的软体让大家来使用了! 而既然程式是想要分享给大家使用的,不过,每个人所使用的电脑软硬体并不相同,既然如此的话,那么该程式的原始码 (Source code) 就应该要同时释出, 这样才能方便大家修改而适用于每个人的电脑中呢!这个将原始码释出的举动,就称为 Open Source !此外,史托曼同时认为,如果您将您程式的 Source code 分享出来时,若该程式是很优秀的,那么将会有很多人使用, 而每个人对于该程式都可以查阅 source code ,无形之中,就会有一票人帮您除错棉! 您的这支程式将会越来越壮大!越来越优秀呢!
而为了避免自己的开发出来的 Open source 的自由软体被拿去做成专利软体, 于是 Stallman 同时将 GNU 与 FSF 发展出来的软体,都挂上 GPL 的版权宣告~ 这个 FSF 的核心观念是『版权制度是促进社会进步的手段, 版权本身不是自然权力。』对于 FSF 有兴趣或者对于 GNU 想要更深入的了解时,请参考树德大学的洪朝贵教授的网站 http://saturn.stu.edu.tw/~ckhung/a/c_83.php,或直接到 GNU 去∶ http://www.gnu.org 里面有更为深入的解说!
Tips:
为什么要称为 GNU 呢?其实 GNU 是 GNU's Not Unix 的缩写, 意思是说, GNU 并不是 Unix 啊!那么 GNU 又是什么呢? 就是 GNU's Not Unix 嘛!.....如果您写过程式, 就会知道,这个 GNU = GNU's Not Unix 可是无穷回圈啊!忙碌~
另外,什么是 Open Source 呢?所谓的 source 是程式发展者写出的原始程式码, Open Source 就是,软体在发布时,同时将作者的原始码一起公布的意思!
那么这个 GPL ( GNU General Public License, GPL ) 是什么玩意儿? 为什么要将自由软体挂上 GPL 的『版权宣告』呢?这个版权宣告对于作者有何好处?首先, Stallman 对 GPL 一直是强调 Free 的,这个 Free 的意思是这样的∶
"Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users freedom to run, copy, distribute, study, change, and improve the software
大意是说, Free Software (自由软体) 是一种自由的权力,并非是『价格!』举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力, 但是,这并不代表您可以到处喝『免费的啤酒!(free beer)』,也就是说, 自由软体的重点并不是指『免费』的,而是指具有『自由度, freedom』的软体,史托曼进一步说明了自由度的意义是∶ 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软体。 这无疑是个好消息!因为如此一来,你所拿到的软体可能原先只能在 Unix 上面跑, 但是经过原始码的修改之后,你将可以拿他在 Linux 或者是 Windows 上面来跑!总之,一个软体挂上了 GPL 版权宣告之后,他自然就成了自由软体!这个软体就具有底下的特色∶
  • 取得软体与原始码∶您可以根据自己的需求来执行这个自由软体;
  • 复制∶您可以自由的复制该软体;
  • 修改∶您可以将取得的原始码进行程式修改工作,使之适合您的工作;
  • 再发行∶您可以将您修改过的程式,再度的自由发行,而不会与原先的撰写者冲突;
  • 回馈∶您应该将您修改过的程式码回馈于社群!
但请特别留意,您所修改的任何一个自由软体都不应该也不能这样∶
  • 修改授权∶您不能将一个 GPL 授权的自由软体,在您修改后而将他取消 GPL 授权~
  • 单纯贩卖∶您不能单纯的贩卖自由软体。
也就是说,既然 GPL 是站在互助互利的角度上去开发的,您自然不应该将大家的成果占为己有, 而取消 GPL 授权的!对吧!因此您当然不可以将一个 GPL 软体的授权取消, 即使您已经对该软体进行大幅度的修改!那么自由软体也不能贩卖吗?当然不是!还记得上一个小节里面,我们提到史托曼藉由贩卖 Emacs 取得一些经费,让自己生活不至于匮乏吧??是的! 自由软体是可以贩售的,不过,不可仅贩售该软体,应同时搭配售后服务与相关手册~这些可就需要工本费了呢!
很多人还是有疑问,目前不是有很多 Linux 开发商吗?为何他们可以贩售 Linux 这个 GPL 授权的软体? 原因很简单,因为他们大多都是贩售『售后服务!』所以,他们所使用的自由软体,都可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软体就不是 GPL 的授权软体了!) 但是,您可以购买他们的 Linux 光碟,如果您购买了光碟,他们会提供相关的手册说明文件,同时也会提供您数年不等的谘询、售后服务、软体升级与其他协力工作等等的附加价值! 所以说,目前自由软体工作者,他们所赖以维生的,几乎都是在『服务』这个领域呢! 毕竟自由软体并不是每个人都会撰写,有人有需要您的自由软体时,他就会请求您的协助,此时,您就可以透过服务来收费了!这样来说, 自由软体确实还是具有商业空间的喔!
Tips:
很多人对于 GPL 授权一直很疑惑,对于 GPL 的商业行为更是无法接受! 关于这一点,鸟哥在这里还是要再次的申明, GPL 是可以从事商业行为的! 而很多的作者也是藉由这些商业行为来得以取得生活所需,更进一步去发展更优秀的自由软体! 千万不要听到『商业』就排斥!这对于发展优良软体的朋友来说,是不礼貌的!
上面提到的大多是与使用者有关的项目,那么 GPL 对于自由软体的作者有何优点呢?大致的优点有这些∶
  • 软体安全性较佳;
  • 软体执行效能较佳;
  • 软体除错时间较短;
  • 贡献的原始码远永都存在。
这是因为既然是 Open Source 的自由软体,那么您的程式码将会有很多人帮您查阅,如此一来,程式的漏洞与程式的优化将会进展的很快!所以,在安全性与效能上面, 自由软体一点都不输给商业软体喔!此外,因为 GPL 授权当中,修改者并不能修改授权, 因此,您如果曾经贡献过程式码,嘿嘿!您将名留青史呢!不错吧! ^_^
不过,就鸟哥的观点来看, GPL 对于程式开发者的优点是相当多的,不过, 对于不熟悉程式的一般人来说, GPL 的优点其实不太容易看出来~ 首先,虽然他是随手可得的自由软体,不过,您也必须要会使用基本的编译器才行吧! (呵呵!这也是您为何要买这本书/察看鸟哥的网站的原因吧! ^_^) 这对于一般人来说并不容易!当然啦,如果每个人都跟 Stallman 一样神,那商业公司就不用存在啦!嘿嘿!对于不懂程式的人来说,商业公司是一个很快速的解决之道啊! 而对于我们广大的读者群来说,认识了/学习了 Linux 与自由软体的相关技巧后, 对于未来真的是有很不错的帮助喔!
Torvalds 的 Linux 发展
我们前面一节当中,提到了 Linux 是由 Torvalds 这个芬兰人所发明的。 那么为何托瓦兹可以发明 Linux 呢?凭空想像而来的?还是有什么渊源? 这里我们就来谈一谈棉!
与 Minix 之间
Linus Torvalds (托瓦兹, 1969 年出生)的外祖父是赫尔辛基大学的统计学家,他的外祖父为了让自己的小孙子能够学点东西, 所以从小就将托瓦兹带到身边来管理一些微电脑。在这个时期,托瓦兹接触了组合语言 (Assembly Language),那是一种直接与晶片对谈的程式语言,也就是所谓的低阶语言。 必须要很了解硬体的架构,否则很难以组合语言撰写程式的。
在 1988 年间,托瓦兹顺利的进入了赫尔辛基大学,并选读了电脑科学系。 在就学期间,因为学业的需要与自己的兴趣,托瓦兹接触到了Unix 这个作业系统。 当时整个赫尔辛基只有一部最新的 Unix 系统,同时仅提供 16 个终端机 (terminal)。 还记得我们上一节刚刚提过的,早期的电脑仅有主机具有运算功能, terminal 仅负责提供 Input/Output 而已。在这种情况下,实在很难满足托瓦兹的需求,因为.....光是等待使用 Unix 的时间,就很耗时~为此,他不禁想到∶『我何不自己搞一部 Unix 来玩?』不过,就如同 Stallman 当初的 GNU 计画一样,要写核心程式,谈何容易~
不过,幸运之神并未背离托瓦兹,因为不久之后,他就知道有一个类似 Unix 的系统, 并且与 Unix 完全相容,还可以在 Intel 386 机器上面跑的作业系统,那就是我们上一节提过的,谭宁邦教授为了教育需要而撰写的 Minix 系统! 他在购买了最新的 Intel 386 的个人电脑后,就立即安装了 Minix 这个作业系统。另外,由于 Minix 这个作业系统是有附上原始码的~所以,托瓦兹也经由这个原始码 学习到了很多的核心程式设计的设计概念喔!
对 386 硬体的多工测试
事实上,托瓦兹对于个人电脑的 CPU 其实并不满意,因为他之前碰的电脑都是工作站型的电脑,这类电脑的 CPU 特色就是可以进行『多工处理』的能力。什么是多工呢? 理论上,一个 CPU 在一个时间内仅能进行一项工作, 那如果有两个工作同时出现到系统中呢?举例来说, 您可以在现今的电脑中同时开启两个以上的办公软体,例如电子试算表与文书处理软体。这个同时开启的动作代表著这两个工作同时要交给 CPU 来处理~ 啊! CPU 一个时间点内仅能处理一个工作,那怎么办?没关系, 这个时候如果具有多工的 CPU 就会自动在不同的工作间切换~亦即我先跑 10% 的电子试算表,再转到文书处理器跑 10% ,再回去电子试算表.... 一直到将两个工作结束为止(不一定同时结束!如果某个工作先结束了, CPU 就会全速去跑剩下的那个工作了!)
Tips:
为什么有的时候我同时开两个档案(假设为 A, B 档案)所花的时间, 要比开完 A 再去开 B 档案的时间还要多?现在是否稍微可以理解? 因为如果同时开启的话, CPU 就必须要在两个工作之间不停的切换~ 而切换的动作还是会耗去一些 CPU 时间的!所以棉,同时启用两个以上的工作在一个 CPU 上, 要比一个一个的执行还要耗时一点。这也是为何现在 CPU 开发商要整合两个 CPU 于一个晶片中! 也是为何在运作情况比较复杂的伺服器上,需要比较多的 CPU 负责的原因!
早期 Intel 的 x86 架构电脑不是很受重视的原因,就是因为 x86 的晶片对于多工的处理不佳, CPU 在不同的工作之间切换不是很顺畅。但是这个情况在 386 电脑推出后, 有很大的改善。托瓦兹在得知新的 386 晶片的相关资讯后,他认为,以价格性能比的观点来看, Intel 的 386 便宜而且性能上也就稍微可以将就将就 ^_^。 所以他就贷款去买了一部 Intel 的 386 来玩。
前面提到,托瓦兹是玩组合语言的,组合语言对于硬体有很密切的关系, 为了彻底发挥 386 的效能,于是托瓦兹花了不少时间在测试 386 机器上! 他的重要测试就是在测试 386 的多功效能上。首先,他写了两个小程式,一个程式会持续输出 A ,另一个会持续输出 B,他将两个程式同时执行,结果,他看到萤幕上很顺利的一直出现 ABABABAB...... 他知道,他成功了! ^_^
Tips:
要达到多工(multitasking)的环境,除了硬体(主要是 CPU)需要能够具有多工的特性外, 作业系统也需要支援这个功能喔!一些不具有多工特性的作业系统, 想要同时执行两个程式是不可能的。除非先被执行的程式执行完毕,否则, 后面的程式不可能被主动执行。至于多工的作业系统中,每个程式被执行时, 都会有一个最大 CPU 使用时间,若该工作运作的时间超过这个 CPU 使用时间时, 该工作就会先被丢出 CPU 的运作中,而再度的进入核心工作排程中,等待下一次的 CPU 运作。 这有点像在开记者会啦,主持人(CPU)会问『谁要发问』?一群记者(工作程式) 就会举手(看谁的工作重要!),先举手的自然就被允许发问,问完之后, 主持人又会问一次谁要发问,当然,所有人(包括刚刚那个记者)都可以举手! 如此一次一次的将工作给他完成啊! ^_^ 多工的环境对于复杂的工作情况,帮助很大喔!
初次释出 Linux 0.02
探索完了 386 的硬体相关资讯,并且也安装了类似 Unix 的 Minix 作业系统, 同时还取得 Minix 的原始码,接下来,托瓦兹干嘛去了?? 因为 Minix 的发展控制在谭宁邦教授手上,他希望 Minix 能以教育的立场去发展,所以对于 Minix 的开发并不是十分的热中,但是一堆人对于 Minix 的功能需求又很强烈,例如一些介面与周边的驱动程式与新的协定等等。在无法快速的得到解决后, 托瓦兹就想,那我乾脆自己写一个更适合我自己用的 Minix 好了! 于是他就开始进行核心程式的撰写了。
对于托瓦兹来说, GNU 真的是一个不可多得的好家伙~ 因为他用来撰写属于自己小核心的工具,就是 GNU 的 bash 操作介面与 gcc 编译器等等自由软体。 他以 GNU 的软体针对 386 并参考 Minix 的设计理念(注意,仅是程式设计理念,并没有使用 Minix 的原始码)来写这个小核心。喝!没想到竟然可以写出这个小玩意,而这个小玩意竟然可以在 386 上面顺利的跑起来~还可以读取 Minix 的档案系统。真是太好了!不过还不够,他希望这个程式可以获得大家的一些修改建议, 于是他便将这个核心放置在网路上提供大家下载,同时在 BBS 上面贴了一则消息∶
Hello everybody out there using minix-
I'm doing a (free) operation system (just a hobby,
won't be big and professional like gnu) for 386(486) AT clones.
他说,他完成了一个好玩的小核心作业系统,这个核心是用在 386 机器上的,同时,他真的仅是好玩,并不是想要做一个跟 GNU 一样大的计画!这则新闻引起很多人的注意, 他们也去托瓦兹提供的网站上下载了这个核心来安装。有趣的是,因为托瓦兹放置核心的那个 FTP 网站的目录为∶ Linux ,从此,大家便称这个核心为 Linux 了。(请注意,此时的 Linux 就是那个 kernel 喔! 另外,托瓦兹所丢到该目录下的第一个核心版本为 0.02 呢!)
同时,为了让自己的 Linux 能够相容于 Unix 系统,于是托瓦兹开始将一些能够在 Unix 上面运作的软体拿来在 Linux 上面跑。不过,他发现到,是有很多的软体无法在 Linux 这个核心上运作。 这个时候他有两种作法,一种是修改软体,让该软体可以在 Linux 上跑, 另一种则是修改 Linux ,让 Linux 符合软体能够运作的规范! 由于 Linux 希望能够相容于 Unix ,于是托瓦兹选择了第二个作法『修改 Linux 』! 为了让所有的软体都可以在 Linux 上执行,于是托瓦兹开始参考标准的 POSIX 规范。
这个正确的决定让 Linux 在起步的时候体质就比别人优良~ 因为 POSIX 标准主要是针对 Unix 与一些软体运行时候的标准规范, 只要依据这些标准规范来设计的核心与软体,理论上,就可以搭配在一起执行了。而 Linux 的发展就是依据这个 POSIX 的标准规范, Unix 上面的软体也是遵循这个规范来设计的, 如此一来,让 Linux 很容易就与 Unix 相容共享互有的软体了! 同时,因为 Linux 直接放置在网路下,提供大家下载,所以在流通的速度上相当的快!导致 Linux 的使用率大增! 这些都是造成 Linux 大受欢迎的几个重要因素呢!
Linux 的发展∶虚拟团队的产生
Linux 虽然是托瓦兹发明的,而且内容还绝不会涉及专利软体的版权问题。不过,如果单靠托瓦兹自己一个人的话,那么 Linux 要茁壮实在很困难~ 因为一个人的力量是很有限的。好在托瓦兹选择 Linux 的开发方式相当的务实! 首先,他将释出的 Linux 核心放置在 FTP 上面,并请告知大家新的版本资讯, 等到使用者下载了这个核心并且安装之后,如果发生问题, 或者是由于特殊需求亟需某些硬体的驱动程式,那么这些使用者就会主动回报给托瓦兹。在托瓦兹能够解决的问题范围内,他都能很快速的进行 Linux 核心的更新与除错。
不过,托瓦兹总是有些硬体无法取得的啊,那么他当然无法帮助进行驱动程式的撰写与相关软体的改良。 这个时候,就会有些志工跳出来说∶『这个硬体我有,我来帮忙写相关的驱动程式。』 因为 Linux 的核心是 Open Source 的,骇客志工们很容易就能够跟随 Linux 的原本设计架构,并且写出相容的驱动程式或者软体。志工们写完的驱动程式与软体托瓦兹是如何看待的呢? 首先,他将该驱动程式/软体带入核心中,并且加以测试。只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意的将志工们写的程式码加入核心中! 总之,托瓦兹是个很务实的人,对于 Linux 核心所欠缺的项目,他总是『先求有且能跑, 再求进一步改良』的心态!这让 Linux 使用者与志工得到相当大的鼓励! 因为 Linux 的进步太快了!使用者要求虚拟记忆体,结果不到一个星期推出的新版 Linux 就有了! 这不得不让人佩服啊!
另外,为因应这种程式码的加入,于是 Linux 便逐渐发展成具有模组的功能! 亦即是将某些功能独立出于核心外,在需要的时候才载入到核心中。如此一来,如果有新的硬体驱动程式或者其他协定的程式码进来时,就可以模组化, 大大的增加了 Linux 核心的可维护能力!
后来,因为 Linux 核心加入了太多的功能, 光靠托瓦兹一个人进行核心的实际测试并加入核心原始程式实在太费力~结果,就有很多的朋友跳出来帮忙这个前置作业! 例如考克斯(Alan Cox)、与崔迪(Stephen Tweedie)等等, 这些重要的副手会先将来自志工们的修补程式或者新功能的程式码进行测试, 并且结果上传给托瓦兹看,让托瓦兹作最后核心加入的原始码的选择与整并!这个分层负责的结果,让 Linux 的发展更加的容易!
特别值得注意的是,这些托瓦兹的 Linux 发展副手,以及自愿传送修补程式的骇客志工, 其实都没有见过面,而且彼此在地球的各个角落,大家群策群力的共同发展出现今的 Linux , 我们称这群人为虚拟团队!而为了虚拟团队资料的传输,于是 Linux 便成立的核心网站∶ http://www.kernel.org ! 而这群素未谋面的虚拟团队们,在 1994 年终于完成的 Linux 的核心正式版! version 1.0 。 这一版同时还加入了 X Window System 的支援呢!更于 1996 年完成了 2.0 版, 同时因应商业版本的需求, 于是开始将核心版本以测试版及稳定版同时开发, 次版本偶数为稳定版,奇数为开发中的测试版。例如 2.6 与 2.5 版为相同的版本,不过, 2.6 为稳定版, 2.5 则为测试版。 测试版含有较多的功能,不过,稳定性可不敢说~并且托瓦兹指明了企鹅为 Linux 的吉祥物。
Tips:
奇怪的是,托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的 2.0 推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成了 Linux 的吉祥物了......
Linux 由于托瓦兹是针对 386 写的,跟 386 硬体的相关性很强,所以, 早期的 Linux 确实是不具有移植性的。不过,大家知道 Open source 的好处就是, 可以修改程式码去适合作业的环境。因此,在 1994 年以后, Linux 便被开发到很多的硬体上面去了! 目前除了 x86 之外, IBM、HP、Sun 等等公司出的硬体也都有被 Linux 所支援呢!
Linux distributions
好了,经过上面的说明,我们知道了 Linux 其实就是一个作业系统最底层的核心及其提供的核心工具。他是 GNU 授权模式,所以,任何人均可取得原始码与可执行这个核心程式,并且可以修改。 此外,因为 Linux 参考 POSIX 设计规范,于是相容于 Unix 作业系统, 故亦可称之为 Unix Like 的一种。
Linux 的出现让 GNU 计画放下了心里的一块大石头,因为 GNU 一直以来就是缺乏了核心程式, 导致他们的 GNU 自由软体只能在其他的 Unix 上面跑。既然目前有 Linux 出现了,且 Linux 也用了很多的 GNU 相关软体,所以 Stallman 认为 Linux 的全名应该称之为 GNU/Linux 呢! 不管怎么说,Linux 实在很不错,让 GNU 软体大多以 Linux 为主要作业系统来进行开发, 此外,很多其他的自由软体团队,例如 sendmail, wu-ftp, apache 等等也都有以 Linux 为开发测试平台的计画出现!如此一来, Linux 除了主要的核心程式外,可以在 Linux 上面运行的软体也越来越多,如果有心,就能够将一个完整的 Linux 作业系统搞定了!
虽然由 Torvalds 负责开发的 Linux 仅具有 Kernel 与 Kernel 提供的工具, 不过,如上所述,很多的软体已经可以在 Linux 上面运作了,因此, Linux + 各家软体就可以完成一个相当完整的作业系统了。不过,要完成这样的作业系统......还真难~ 因为 Linux 早期都是由骇客工程师所开发维护的,他们并没有考虑到一般使用者的能力...... 为了让使用者能够接触到 Linux ,于是很多的商业公司或非营利团体,就将 Linux Kernel (含 tools ) 与可运行的软体整合起来,加上自己具有创意的工具程式,这个工具程式可以让使用者以光碟或者透过网路直接安装/管理 Linux 系统。这个 Kernel + Softwares + Tools 的可完整安装的咚咚,我们称之为 Linux distribution , 一般中文翻译成 可完整安装套件,或者安装套件等等。
Tips:
由于 Linux 核心是由骇客工程师写的,要由原始码安装到 x86 电脑上面成为可以执行的 binary 档案, 这个过程可不是人人都会的~所以早期确实只有工程师对 Linux 有兴趣。 一直到一些社群与商业公司将 Linux 核心配合自由软体,并提供完整的安装程序, 且制成光碟后,对于一般使用者来说, Linux 才越来越具有吸引力! 因为只要一直『下一步』就可以将 Linux 安装完成啊! ^_^
我们前面说过, GNU 的 GPL 授权并非不能从事商业行为,于是很多商业公司便成立来贩售 Linux distribution。而由于 Linux 的 GPL 版权宣告,因此,商业公司所贩售的 Linux distributions 通常也都可以从 Internet 上面来下载的!此外,如果您想要其他商业公司的服务,那么直接向该公司购买光碟来安装,也是一个很不错的方式的!
不过,由于发展 Linux distributions 的公司实在太多了,例如有名的 Red Hat, Mandriva, Debian, SuSE 等等,所以很多人都很担心,如此一来每个 distribution 是否都不相同呢?这就不需要担心了,因为每个 Linux distributions 使用的 kernel 都是 http://www.kernel.org 所释出的,而他们所选择的软体,几乎都是目前很知名的软体,重复性相当的高,例如 WWW 伺服器的 Apache , Mail 伺服器的 Postfix/sendmail ,File 伺服器的 Samba 等等。
此外,为了让所有的 Linux distributions 开发不致于差异太大,还有 Linux Standard Base (LSB) 来规范开发者,以及目录架构的 File system Hierarchy Standard (FHS) 规范! 唯一差别的,可能就是该开发者自家所开发出来的管理工具,以及套件管理的模式吧!所以说,基本上,每个 Linux distributions 除了架构的严谨度与选择的套件内容外, 其实差异并不太大啦! ^_^ 。大家可以选择自己喜好的 distribution 来安装即可!
底下列出几个主要的 Linux distributions 发行者网址∶
  • Red Hat: http://www.redhat.com
  • Fedora: http://fedora.redhat.com
  • Mandriva: http://www.mandriva.com
  • Novell SuSE: http://www.novell.com/linux/suse/
  • Debian: http://www.debian.org/
  • Slackware: http://www.slackware.com/
  • Linpus: http://www.linpus.com.tw/
  • Gentoo: http://www.gentoo.org/
  • Ubuntu: http://www.ubuntulinux.org/
  • CentOS: http://www.centos.org/
当然发行套件者不仅于此,您可以查阅其他的 Linux 新闻来发现喔!但是值得大书特书的,是中文 Linux 的延伸计画∶ CLE 这个套件!早期的 Linux 因为是工程师发展的,而这些工程师大多以英文语系的国家为主, 所以, Linux 对于国人的学习是比较困扰一点。后来由国人发起的 CLE 计画∶ http://cle.linux.org.tw/ 开发很多的中文套件级翻译了很多的英文文件,使得我们目前得以使用中文的 Linux 呢! 另外,目前正在开发中的还有台南县卧龙小三等老师们发起的众多自由软体计画,真是造福很多的朋友啊!
  • 自由软体技术交流网∶ http://freesf.tnc.edu.tw/index.php
  • B2D: http://b2d.tnc.edu.tw/
此外,如果只想看看 Linux 的话,还可以选择所谓的可光碟开机进入 Linux 的 Live CD 版本, 亦即是 KNOPPIX 这个 Linux distributions 呢!台湾也有阿里巴巴兄维护的中文 Live CD 喔!
  • http://www.knoppix.net/
  • 中文 KNOPPIX: http://knoppix.tnc.edu.tw/
Tips:
对于没有额外的硬碟或者是没有额外的主机的朋友来说, KNOPPIX 这个可以利用光碟开机而进入 Linux 作业系统的 Live CD 真的是一个不错的选择!您只要下载了 KNOPPIX 的映象档,然后将他烧录成为 CD, 放入您主机的光碟机,并设定光碟为第一个开机选项, 就可以使用 Linux 系统了呢!
如果您还想要知道更多的 Linux distributions 的下载与使用资讯,可以参考∶
  • http://www.linuxiso.org/
  • http://distrowatch.com/
那我到底应该要选择哪一个 distributions ?就如同我们上面提到的,其实每个 distributions 差异性并不大! 不过,由于套件管理的方式主要分为 Debian 的 pkg 及 Red Hat 系统的 RPM 方式, 目前鸟哥的建议是,先学习以 RPM 套件管理为主的 Fedora/SuSE/Mandriva 等台湾使用者较多的版本, 这样一来,发生问题时,可以提供解决的管道比较多。如果您已经接触过 Linux 了, 还想要更严谨的 Linux 版本,那可以考虑使用 Debian ,如果您是以效能至上来考量, 那么或许 Gentoo 是不错的建议!总之,版本很多,但是各版本差异其实不大,建议您一定要先选定一个版本后, 先彻头彻尾的了解他,那再继续玩其他的版本时,就可以很快的进入状况。 鸟哥的书/网站仅提供一个版本,不过是以比较基础的方式来介绍的, 因此,如果能够熟练这本书/网站的话,呵呵!哪一个 distributions 对您来说,都不成问题啦!
Linux 的特色
Linux 是 Torvalds 先生所开发出来的,基于 GPL 的版权宣告之下, 可以在 x86 的架构下运作,也可以被移植到其他的大型主机上面。 由于开发的相关理念与相容的问题,因此,我们也可以称 Linux 为 Unix Like 作业系统的一种。
Tips:
其实 Unix-Like 可以说是目前伺服器类型的作业系统的统称啦! 因为,不论是 FreeBSD, BSD, Sun Unix, HP Unix, Red Hat Linux, Mandrake Linux 等等,都是由同一个祖先 Thompson 所写的『Unix』来的, 因此,这些咚咚都被统称为 Unix-Like 的作业系统棉!
Linux 的特色
那么这个系统有什么特异功能呢?简单的说∶
  • 自由与开放∶由于 Linux 是基于 GPL ( General Public License ) 的架构之下,因此他是自由软体, 也就是任何人都可以自由的使用或者是修改其中的原始码的意思! 这就是所谓的『开放性架构』, 这对科学界来说是相当重要的!因为很多的工程师由于特殊的需求,常常需要修改系统的原始码, 使该系统可以符合自己的需求!而这个开放性的架构将可以满足各不同需求的工程师! 因此当然就有可能越来越流行棉!以鸟哥来说,目前环境工程界的空气品质模式最新版 Models-3/CMAQ 就是以 Linux 为基准平台设计的呢!
  • 配备需求低廉∶而 Linux 可以支援个人电脑的 x86 架构, 系统资源不必像早先的 Unix 系统那般,仅适合于单一公司 ( 例如 Sun ) 设备! 单就这一点来看,就可以造成很大的流行棉!不过,如果您想要在 Linux 下执行 X Window 系统, 那么硬体的等级就不能太低了!
  • 功能强大而稳定∶而且由于 Linux 功能并不会输给一些大型的 Unix 工作站,因此,近年来越来越多的公司或者是团体、 个人投入这一个作业系统的开发与整合工作!
  • 独立作业∶另外, 由于很多的软体套件逐渐被这套作业系统拿来使用,而很多套件软体也都在 Linux 这个作业系统上面进行发展与测试,因此, Linux 近来已经可以独力完成几乎所有的工作站或伺服器的服务了,例如 Web, Mail, Proxy, FTP.....。
所以,目前 Linux 已经是相当成熟的一套作业系统棉!而且不耗资源又可以自由取得!呵呵, 可以说造成微软相当大的压力呀!此外,由于他的系统硬体要求很低,加上目前很多的人由于『Intel 的阴谋』( 呵呵!开玩笑的,因为 Tom 的硬体评论 (http://www.big5.tomshardware.com/) 网站常常这样取笑 Intel 的说!呵!很好笑!) 而造成手边有相当多的淘汰掉的硬体配备, Linux 在这些被淘汰的硬体中就可以执行的相当的顺畅与稳定!因此也造成相当多朋友的关注棉!
这也是造成 Linux 成为最近几年来最受瞩目的作业系统之一,如前所述, 他会受到瞩目的原因主要是因为他是『free』的,就是可以自由取得的作业系统啦! 然后他是开放性的系统,也就是你可以随时的取得程式的原始码,这对于程式开发工程师是很重要的!而且,虽然他是 Free 的自由软体,不过功能却很强大!另外, Linux 对于硬体的需求是很低的,这一点更造成它流行的主因,因为硬体的汰换率太快了,所以很多人手边都有一些很少在用的零件,这些零件组一组就可以用来跑 Linux 了,反正做一个工作站又不用使用到萤幕 ( 只要主机就可以棉 ) ,因此 Linux 就越来越流行棉!(插个嘴,也就是因为 Linux 具有 1.硬体需求低、 2.架构开放、 3.系统稳定性及保密×××够强、 4.完全免费,所以造成一些所谓『反微软联盟』的程式设计高手不断的开发新软体!以与 Microsoft 进行抗衡!)
Linux 的优缺点
那干嘛要使用 Linux 做为我们的主机系统呢?这是因为 Linux 有底下这些优点∶
  • 稳定的系统∶
    Linux 本来就是基于 Unix 概念而发展出来的作业系统,因此, Linux 具有与 Unix 系统相似的的程式介面跟操作方式,当然也继承了 Unix 稳定并且有效率的特点。常听到安装 Linux 的主机连续运做一年以上而不曾当机、不必关机是稀松平常的事;
  • 免费或少许费用∶
    由于 Linux 是基于 GPL 的基础下的产物,因此任何人皆可以自由取得 Linux , 至于一些『安装套件』的发行者, 他们发行的安装光碟也仅需要些许费用即可获得!不同于 Unix 需要负担庞大的版权费用,当然也不同于微软需要一而再、 再而三的更新你的系统,并且缴纳大量费用棉!
  • 安全性、漏洞的快速修补∶
    如果你常玩网路的话,那么你最常听到的应该是 『没有绝对安全的主机』!没错!不过 Linux 由于支援者日众,有相当多的热心团体、个人参与其中的开发, 因此可以随时获得最新的安全资讯,并给予随时的更新,亦即是具有相对的较安全!
  • 多工、多使用者∶
    与 Windows 系统不同的, Linux 主机上可以同时允许多人上线来工作, 并且资源的分配较为公平,比起 Windows 的单人假多工系统要稳定的多棉! 这个多人多工可是 Unix-Like 上面相当好的一个功能,怎么说呢?你可以在一部 Linux 主机上面规划出不同等级的使用者,而且每个使用者登入系统时的工作环境都可以不相同, 此外,还可以允许不同的使用者在同一个时间登入主机,以同时使用主机的资源。
  • 使用者与群组的规划∶
    在 Linux 的机器中,档案的属性可以分为『可读、可写、可执行』 等参数来定义一个档案的适用性,此外,这些属性还可以分为三个种类, 分别是『档案拥有者、档案所属群组、其他非拥有者与群组者』。 这对于专案计画或者其他计画开发者具有相当良好的系统保密性。
  • 相对比较不耗资源的系统∶
    Linux 只要一部 p-100 以上等级的电脑就可以安装并且使用愉快棉!还不需要到 P-4 或 AMD K8 等级的电脑呢!不过,如果你要架设的是属于大型的主机(服务上百人以上的主机系统), 那么就需要比较好一点的机器了。不过,目前市面上任何一款个人电脑均可以达到这一个要求棉!
  • 适合需要小核心程式的嵌入式系统∶
    由于 Linux 只要几百 K 不到的程式码就可以完成一个完整的作业系统, 因此相当适合于目前家电或者是小电子用品的作业系统呢!那就是当红炸子鸡『嵌入式』系统啦! Linux 真的是很适合例如手机、数位相机、PDA、家电用品等等的微电脑作业系统呢! ^_^
反正 Linux 好处说不完啦!不过虽然 Linux 具有这样多的好处, 但是他先天上有一个足以致命的地方,使他的普及率受到很大的限制,就是 Linux 需要使用『指令列』 的终端机模式进行系统的管理!虽然近年来有很多的图形介面开发使用在 Linux 上面,但毕竟要熟悉 Linux 还是以指令列来使用是比较好的,因此要接受 Linux的玩家必须比较要能熟悉对电脑下指令的行为,而不是用滑鼠点一点 icon 就行了!不过如果只是要架一些简单的小站呢?是不是大家都可以做的到?没错!其实只要对 Linux 做一些小小的设定就可以架站了!Linux 还可以改进的地方∶
  • 没有特定的支援厂商∶因为在 Linux 上面的所有套件几乎都是自由软体, 而每个自由软体的开发者可能并不是公司团体,而是非营利性质的团体。如此一来, 在您 Linux 主机上面的软体若发生问题,该如何是好? 好在由于目前 Linux 商业界的整合还不错,目前在台湾比较具名的 Red Hat 与 SuSE 均有设立了服务点。您可以经由这个服务点来直接向他们购买/谘询相关的软硬体问题呢! 不过,如果您并非选择有专门商业公司的 Linux distributions 时?怎么办? 没有专人到府服务呢~这点倒是还不需要太担心, 因为拜网路风行之赐,你要问的问题几乎在网路上都可以找到答案喔!看你有没有用心去找就是了!
  • 图形介面作的还不够好∶虽然早在 1994 年 Linux 1.0 版释出时, 就已经含有 XFree86 的 X Window 架构了。不过, X Window 毕竟是 Linux 上的一个软体, 他并不是 Linux 最核心的部分,有没有他对 Linux 的伺服器执行都没有影响的! 所以鸟哥通常是不玩 X Window 的啦! 但其实有更多人对于 Linux 并非是著眼在网路伺服器,而是一般桌上型电脑的使用, 这一点对于 Linux 来说,还是不够好!即使目前已有 KDE (http://www.kde.org/) 及 GNOME (http://www.gnome.org/) 等优秀的视窗管理程式, 不过,毕竟整合度还是需要加强,希望未来可以看到整合度超高的 Linux 桌上型电脑呢!
其他 Linux 相关
还有一些资料需要提醒大家的呢!
· 依循标准∶
Linux 有个优良的传统,那就是支援比较公认而正式的标准, 例如开发时就使用的 POSIX 规范。此外,由于 Linux 是一个没有『规格品』样式的新鲜玩意儿, 如果大家都自己玩自己的,那么可想而知的是,未来想要在 Linux 这个作业系统上面发展软体与硬体的厂商一定会无所适从的! 为了让软体开发商、与硬体发展者有一个依循的方向,因此而有 Linux Standard Base (LSB) 及 File system Hierarchy Standard (FHS) 这些个玩意儿的诞生!所以,各个 distribution 也都要遵循 LSB 上面的规范,软硬体发展者也都会依循 LSB ,所以棉,我们才会常常说,各大 distribution 虽然在提供的工具与创意上面有所不同,但是基本上,他们的 Linux 架构都是很类似的!因此,你只要玩一套 Linux distribution 也就够了!其他的 distribution 应该就难不倒你棉!
  • FHS: http://www.pathname.com/fhs/
  • LSB: http://www.linuxbase.org/
· 伺服器、工作站、终端机...
由于网路的盛行,我们或许常常会听到一些名词ㄋㄟ~所以,底下先来介绍几个简单的网路名词吧! ^_^,来认识一下什么是伺服器 ( Server )、工作站 ( Workstation ) 与终端机 ( Ternianl )?简单的来说,你可以这样认为∶
  • 伺服器 ( Server )∶提供 Internet 一种以上的网路服务的主机,例如 yahoo 提供的是 WWW 的服务,那么 yahoo 就可以称之为 伺服器 了!那么,你自己架设一台 mail server 呢?呵呵!那也是一个小型的伺服器棉!所以,你必须要清楚的知道, 伺服器是有规模大小之分的!目前一部 Linux 上面就可以架设多个伺服器软体棉!例如 WWW 伺服器的 Apache 软体、 FTP 伺服器的 Wu-ftp 软体等等的;
  • 工作站 ( Workstation ) ∶基本上, 工作站可以视为仅提供一群特定人士,作为数值分析、科学用途的机器。例如鸟哥的研究室有一部 Sun 的机器,他仅提供我们研究室内部几部电脑的连线,当我们有需要使用到 Fortran 这个程式语言时,就连线进入 Sun 这部机器,并在上面进行我们所需要的计算工作! 这个就是工作站啦。而工作站与伺服器的差别,大概就在于有没有提供 internet 上面的服务而已,例如,如果我将 Sun 上面的 mail server 开启之后, 那么这部机器就可以称之为伺服器了!同时也是我们的工作站喔! 当然,更广义的定义是,只要是没有对 Internet 上面提供网路服务的,那就是工作站了!这当然也就包含所谓的终端机!
  • 终端机 ( Terminal ) ∶简单的说,就是 end-user ( 就是你啦 ) 前面的那部电脑!呵呵,例如鸟哥都是使用我的工作机 ( Windows ) 连上我们的主机来工作,那么这一部 Windows 的电脑,就可以称为 terminal 机器棉!不过,更狭义的来说,『终端机』本身应该是不具备任何可以作业的软体的, 在终端机上面一定要连上 Server 之后,才能进行各项作业! 那才是最狭义的终端机棉!例如我们前面说过的 早期的大型主机连线模式!
大致上的分别可以用上面的观点来看!
· 几个常见的授权模式与定义
现在市面上有好多的软体,有的是自由软体,有的是专利软体。 有的专利软体免费,有的自由软体要钱~啊!好烦啊!怎么分辨这些东西? 其实,鸟哥并不是律师,对于法律也不十分懂,不过,还是有几个授权模式可以来谈一谈~
  • Open Source ∶Open source 表示软体释出时, 一定伴随著原始码的释出喔!通常他有几个好处∶

    1. 程式设计师通常会等到程式成熟之后才会释出 ( 免得被笑, ^_^ ), 所以通常程式在雏形的时候,就已经具有相当的优良体质;
    2. Open Source 的精神,相信当程式原设计人将程式原始码释出之后, 其他的程式设计师接受这份原始码之后,由于需要将程式改成自己所需的样式, 所以会经由本身的所学来加以改良,并从中加以改良与除虫,所以程式的 debug 功能会比传统的 close source 来的快!
    3. 由于程式是伴随原始码的,因此,系统将会不易存在鲜为人知的***程式或一些安全漏洞, 相对而言,会比较更加的安全!
Open source 的代表授权为 GNU 的 GPL 及 BSD 等等∶
  • GNU General Public License ∶ 这个可以由刚刚的说明了解,他主要定义在『自由软体』上面,任何挂上 GPL 授权的软体,需要公布其原始码 ( Open Source ),GPL 有几个主要的大方向∶

    1. 任何个人或公司均可释出自由软体 ( free software );
    2. 任何释出自由软体的个人或公司,均可由自己的服务来收取适当的费用;
    3. 该软体的原始码 ( Source Code ) 需要随软体附上,并且是可公开发表的;
    4. 任何人均可透过任何正常管道取得此一自由软体,且均可取得此一授权模式。
更多的 GPL 可参考附录 A 的中文化条文!
  • Berkeley Software Distribution (BSD) ∶使用 BSD source code 最常接触到的就是 BSD 授权模式了!这个授权模式其实与 GPL 很类似,而其精神也与 Open Source 相呼应呢!
此外,近期以来还有 Apache 的授权、 Sun 的授权,好多好多~
  • Close Source ∶ 程式的核心是封闭的,优点是有专人维护,您不需要去更动他;缺点则是灵活度大打折扣, 使用者无法变更该程式成为自己想要的样式,此外,若有***程式或者安全漏洞, 将会花上相当长的一段时间来除错!这也是所谓专利软体 (copyright) 常见的软体出售方式。 代表的授权模式有∶

    • Freeware ∶不同于 Free software , Freeware 为『免费软体』而非『自由软体!』虽然它是免费的软体,但是不见得要公布其原始码, 端看释出者的意见棉!这个东西与 Open Source 毕竟是不太相同的东西喔! 此外,目前很多标榜 免费软体 的程式很多都有小问题!例如假借免费软体的名义, 实施使用者资料窃取的目的!所以 『来路不明的软体请勿安装!』
    • Shareware ∶共享软体这个名词就有趣了! 与免费软体有点类似的是, Shareware 在使用初期,它也是免费的,但是, 到了所谓的『试用期限』之后,您就必须要选择『付费后继续使用』或者『将它移除』 的宿命~通常,这些共享软体都会自行撰写失效程式,让你在试用期限之后就无法使用该软体。

转载于:https://blog.51cto.com/crazylinux/160792

什么是 Linux ?相关推荐

  1. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  2. linux环境下nacos的安装+启动,阿里云服务器安装nacos

    nacos安装+启动(linux环境): 基础:安装java环境 官网下载压缩包:如 nacos-server-1.2.1.tar.gz 放在自定义目录下 # 解压 tar -xvf nacos-se ...

  3. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败

    [Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...

  4. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多

    Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...

  5. 作为一个java程序员,常用的linux命令(越攒越多)

    本篇记录我在工作中不断遇到的常用的linux命令,并进行总结,时常更新! 1. 升级服务时先停止服务,然后进行替换 linux中杀进程时候,如果你是知道它所占用的端口号的话,可以通过 netstat ...

  6. 设置linux初始root密码

    简单一步设置linux第一个root密码 sudo passwd root #输入当前账户密码 #输入准备设置的root密码 #确认密码 如下所示:

  7. Linux/docker下oracle开启监听,开启自动启动

    写在前头: 之前呢,使用docker安装了oracle,但它默认是会关闭的.使用了几天以后突然连接异常了,报的问题是oracle监听有问题了,我知道了是oracle服务自动关闭了,监听也跟着关了.所以 ...

  8. Linux通过端口号杀死指定进程

    前言: 我们在服务器上升级项目的时候,需要将原来的项目停止,然后启动新的项目. 这时候我们只知道应用所占的端口号,如何将进程杀死呢? linux中杀进程时候,如果你是知道它所占用的端口号的话,可以通过 ...

  9. 设置腾讯云linux服务器中 MySQL 允许远程访问

    申请了一台linux腾讯云服务器,想要把数据库搭建在上面,本地的Windows直接可以访问 以下就是具体的操作流程,首先你需要安装好一个mysql,安装方法–>mysql安装(Linux) 接着 ...

  10. Linux下安装Java8

    Linux(ubuntu)下Java8安装 1.下载jdk8 这个看大家了,linux版本的就可以 2.创建jvm文件夹 在根目录下创建名为jvm的文件夹(在哪里创建看个人) $ sudo mkdir ...

最新文章

  1. Elasticsearch 如何做到快速检索?
  2. 赚到!4个Python初学者必学的Numpy小技巧
  3. 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
  4. 哈希表 Hashtable c# 1613537346
  5. 亚马逊招聘实习生,ML、CV、机器人和语音处理领域
  6. 现在企业为何越来越难呢?
  7. html文件vbs病毒,一段病毒常用的VBS代码
  8. 跨域请求的常用方式及解释
  9. (转)Android之发送短信的两种方式
  10. JS 屏蔽按键效果和改变按键效果
  11. Java根据word模板生成word文件
  12. 2018-PAT春季考试小结
  13. note同步不及时 one_如何提高onenote同步速度?
  14. SQL Server 下载和安装详细教程(点赞收藏)
  15. 小程序 横向 纵向排列
  16. java实现远程控制
  17. 几个你需注意的数据库设计原则(新手必看)
  18. FinClip小程序开放平台灰度发布上线,实现你对“千人千面”的所有创想
  19. 【STM32】按键抖动及消除
  20. js实现轮播图(简单滚动轮播)

热门文章

  1. GoF23-迪米特法则
  2. php在线点播,php如何实现视频在线播放
  3. 万字长文揭秘37手游的自研任务调度平台
  4. UMFPACK的使用
  5. 私厨菜谱app的设计与实现(一)
  6. 图像处理之—振铃现象
  7. 阿里的低代码开发平台lowcode-engine
  8. 2022-2028年中国静脉留置针行业市场现状分析及未来前景规划报告
  9. Linux下的硬件驱动——USB设备(上)(驱动配置部分)
  10. js获取dom元素的子元素,父元素,兄弟元素小记