120 KiB
第一章、Linux 是什么与如何学习
最近更新日期:20//
众所皆知的,Linux 的核心原型是 1991 年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出 Linux 这个操作系统? 为什么他要选择 386 的计算机来开发?为什么 Linux 的发展可以这么迅速?又为什么 Linux 是免费且可以自由学习的? 以及目前为何有这么多的 Linux 套件版本(distributions)呢?了解这些东西后,才能够知道为何 Linux 可以免除专利软件之争, 并且了解到 Linux 为何可以同时在个人计算机与大型主机上面大放异彩! 所以,在实际进入 Linux 的世界前,就让我们来谈一谈这些有趣的历史故事吧! ^_^
1.1 Linux 是什么
1.1 Linux 是什么
我们知道 Linux 这玩意儿是在计算机上面运行的,所以说 Linux 就是一组软件。问题是这个软件是操作系统还是应用程序? 且 Linux 可以在哪些种类的计算机硬件上面运行?而 Linux 源自哪里?为什么 Linux 还不用钱?这些我们都得来谈一谈先!免得下次人家问你, 为什么复制软件不会违法时,你会答不出来啊!^_^
1.1.1 Linux 是什么?操作系统/应用程序?
我们在第零章、计算机概论里面有提到过整个计算机系统的概念, 计算机主机是由一堆硬件所组成的,为了有效率的控制这些硬件资源,于是乎就有操作系统的产生了。 操作系统除了有效率的控制这些硬件资源的分配,并提供计算机运行所需要的功能(如网络功能)之外, 为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一整组系统调用接口来给软件设计师开发用喔!
知道为什么要讲这些了吗?嘿嘿!没错,因为 Linux 就是一套操作系统!如同下图所示, Linux 就是核心与系统调用接口那两层。至于应用程序算不算 Linux 呢?当然不算啦!这点要特别注意喔!
由上图中我们可以看到其实核心与硬件的关系非常的强烈。早期的 Linux 是针对 386 来开发的, 由于 Linux 只是一套操作系统并不含有其他的应用程序,因此很多工程师在下载了 Linux 核心并且实际安装之后,就只能看着计算机开始运行了!接下来这些高级工程师为了自己的需求,再在 Linux 上面安装他们所需要的软件就是了。
Tips Torvalds 先生在 1991 年写出 Linux 核心的时候,其实该核心仅能“驱动 386 所有的硬件”而已, 所谓的“让 386 计算机开始运行,并且等待使用者指令输入”而已,事实上,当时能够在 Linux 上面跑的软件还很少呢!
由于不同的硬件他的功能函数并不相同,例如 IBM 的 Power CPU 与 Intel 的 x86 架构就是不一样! 所以同一套操作系统是无法在不同的硬件平台上面运行的!举例来说,如果你想要让 x86 上面跑的那套操作系统也能够在 Power CPU 上运行时,就得要将该操作系统进行修改才行。如果能够参考硬件的功能函数并据以修改你的操作系统程序码, 那经过改版后的操作系统就能够在另一个硬件平台上面运行了。 这个动作我们通常就称为“软件移植”了!
例题:请问 Windows 操作系统能否在苹果公司的 MAC 计算机上面安装与运行?答:由上面的说明中,我们知道硬件是由“核心”来控制的,而每种操作系统都有他自己的核心。 在 2006 年以前的苹果计算机公司是请 IBM 公司帮忙开发硬件(所谓的 Power CPU), 而苹果计算机公司则在该硬件架构上发展自家的操作系统(就是俗称的 MAC 是也)。Windows 则是开发在 x86 架构上的操作系统之一, 因此 Windows 是没有办法安装到 MAC 计算机硬件上面的。
不过,在 2006 年以后,苹果计算机转而请 Intel 设计其硬件架构,亦即其硬件架构已经转为 x86 系统, 因此在 2006 年以后的苹果计算机若使用 x86 架构时,其硬件则“可能”可以安装 Windows 操作系统了。 不过,你可能需要自己想些方式来处理该硬件的兼容性啰!
Tips Windows 操作系统本来就是针对个人计算机 x86 架构的硬件去设计的,所以他当然只能在 x86 的个人计算机上面运行, 在不同的硬件平台当然就无法运行了。也就是说,每种操作系统都是在他专门的硬件机器上面运行的喔!这点得要先了解。 不过,Linux 由于是 Open Source 的操作系统,所以他的程序码可以被修改成适合在各种机器上面运行的, 也就是说,Linux 是具有“可移植性”,这可是很重要的一个功能喔! ^_^
Linux 提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭 Unix 良好的传统来的,所以相当的稳定而功能强大!此外, 由于这个优良的架构可以在目前的个人计算机(x86 系统)上面跑, 所以很多的软件开发者渐渐的将他们的工作心血移转到这个架构上面,所以 Linux 操作系统也有很多的应用软件啦!
虽然 Linux 仅是其核心与核心提供的工具,不过由于核心、核心工具与这些软件开发者提供的软件的整合, 使得 Linux 成为一个更完整的、功能强大的操作系统啰!约略了解 Linux 是何物之后,接下来,我们要谈一谈, “为什么说 Linux 是很稳定的操作系统呢?他是如何来的?”
1.1.2 Linux 之前,Unix 的历史
早在 Linux 出现之前的二十年(大约在 1970 年代),就有一个相当稳定而成熟的操作系统存在了! 那就是 Linux 的老大哥“Unix”是也!怎么这么说呢?他们这两个家伙有什么关系呀?这里就给他说一说啰!
众所皆知的,Linux 的核心是由 Linus Torvalds 在 1991 年的时候给他开发出来的, 并且丢到网络上提供大家下载,后来大家觉得这个小东西(Linux Kernel)相当的小而精巧, 所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了! 但是为什么这个小东西这么棒呢?又为什么大家都可以免费的下载这个东西呢? 嗯!等鸟哥慢慢的唬 xx....喔不!听我慢慢的道来!
- 1969 年以前:一个伟大的梦想--Bell,MIT 与 GE 的“Multics”系统
早期的计算机并不像现在的个人计算机一样普遍,他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途,或者是学术单位的前瞻性研究,否则真的很难接触到。 非但如此,早期的计算机架构还很难使用,除了运算速度并不快之外,操作接口也很困扰的! 因为那个时候的输入设备只有读卡机、输出设备只有打印机, 使用者也无法与操作系统互动(批次型操作系统)。
在那个时候,写程序是件很可怜的事情,因为程序设计者,必须要将程序相关的信息在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将信息读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错, 哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!
在那之后,由于硬件与操作系统的改良,使得后来可以使用键盘来进行信息的输入。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊! 好在 1960 年代初期麻省理工学院(MIT)发展了所谓的: “相容分时系统(Compatible Time-Sharing System, CTSS)”, 它可以让大型主机通过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。 架构有点像这样:
Tips 这个相容分时系统可以说是近代操作系统的始祖呢!他可以让多个使用者在某一段时间内分别使用 CPU 的资源, 感觉上你会觉得大家是同时使用该主机的资源!事实上,是 CPU 在每个使用者的工作之间进行切换, 在当时,这可是个划时代的技术喔!
如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软件安装的能力。 而且,比较先进的主机大概也只能提供 30 个不到的终端机而已。
为了更加强化大型主机的功能,以让主机的资源可以提供更多使用者来利用,所以在 1965 年前后, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE, 或称为通用电器)共同发起了 Multics 的计划 [1], Multics 计划的目的是想要让大型主机可以达成提供 300 个以上的终端机连线使用的目标。 不过,到了 1969 年前后,计划进度落后,资金也短缺,所以该计划虽然继续在研究,但贝尔实验室还是退出了该计划的研究工作。 (Multics 有复杂、多数的意思存在。)
Tips 最终 Multics 还是有成功的发展出他们的系统,完整的历史说明可以参考: www.multicians.org/网站内容。 Multics 计划虽然后来没有受到很大的重视,但是他培养出来的人材是相当优秀的! ^_^
- 1969 年:Ken Thompson 的小型 file server system
在认为 Multics 计划不可能成功之后,贝尔研究室就退出该计划。不过,原本参与 Multics 计划的人员中,已经从该计划当中获得一些点子, Ken Thompson [2] 就是其中一位!
Thompson 因为自己的需要,希望开发一个小小的操作系统以提供自己的需求。 在开发时,有一部 DEC (Digital Equipment Corporation)公司推出的 PDP-7 刚好没人使用, 于是他就准备针对这部主机进行操作系统核心程序的撰写。本来 Thompson 应该是没时间的(有家有小孩的宿命?), 无巧不巧的是,在 1969 年八月份左右,刚好 Thompson 的妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来!
经过四个星期的奋斗,他终于以组合语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是 Unix 的原型! 当时 Thompson 将 Multics 庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。(当时尚未有 Unix 的名称)
Thompson 的这个文件系统有两个重要的概念,分别是:
- 所有的程序或系统设备都是文件
- 不管建构编辑器还是附属文件,所写的程序只有一个目的,且要有效的完成目标。
这些概念在后来对于 Linux 的发展有相当重要的影响喔!
Tips 套一句常听到的广告词:“科技始终来自于人性”,当初 Thompson 会写这套 Unix 核心程序, 却是想要移植一套名为“太空旅游”的游戏呢! ^_^
- 1973 年:Unix 的正式诞生,Ritchie 等人以 C 语言写出第一个正式 Unix 核心
由于 Thompson 写的那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。 但是因为 Unics 本来是以组合语言写成的,而如第零章计算机概论谈到的, 组合语言具有专一性,加上当时的计算机机器架构都不太相同,所以每次要安装到不同的机器都得要重新编写组合语言,真不方便!
后来 Thompson 与 Ritchie 合作想将 Unics 改以高阶程序语言来撰写。当时现成的高阶程序语言有 B 语言。 但是由 B 语言所编译出来的核心性能不是很好。后来Dennis Ritchie [3] 将 B 语言重新改写成 C 语言,再以 C 语言重新改写与编译 Unics 的核心, 最后正名与发行出 Unix 的正式版本!
Tips 这群高级骇客实在很厉害!因为自己的需求来开发出这么多好用的工具! C 程序语言开发成功后,甚至一直沿用至今呢!你说厉不厉害啊!这个故事也告诉我们,不要小看自己的潜能喔! 你想作的,但是现实生活中没有的,就动手自己搞一个来玩玩吧!
由于贝尔实验室是隶属于美国电信大厂AT&T公司的, 只是 AT&T 当时忙于其他商业活动,对于 Unix 并不支持也不排斥。此外,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 [4]在取得了 Unix 的核心源代码后,着手修改成适合自己机器的版本, 并且同时增加了很多工具软件与编译程序,最终将它命名为 Berkeley Software Distribution (BSD)。这个 BSD 是 Unix 很重要的一个分支,Bill Joy 也是 Unix 业者“Sun(升阳)”这家公司的创办者! Sun 公司即是以 BSD 发展的核心进行自己的商业 Unix 版本的发展的。 (后来可以安装在 x86 硬件架构上面 FreeBSD 即是 BSD 改版而来!)
- 1979 年:重要的 System V 架构与版权宣告
由于 Unix 的高度可移植性与强大的性能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了 Unix 操作系统的发展,例如 AT&T 自家的 System V、IBM 的 AIX 以及 HP 与 DEC 等公司, 都有推出自家的主机搭配自己的 Unix 操作系统。
但是,如同我们前面提到的,操作系统的核心(Kernel)必须要跟硬件配合, 以提供及控制硬件的资源进行良好的工作!而在早期每一家生产计算机硬件的公司还没有所谓的“协定”的概念, 所以每一个计算机公司出产的硬件自然就不相同啰!因此他们必须要为自己的计算机硬件开发合适的 Unix 系统。 例如在学术机构相当有名的 Sun、Cray 与 HP 就是这一种情况。 他们开发出来的 Unix 操作系统以及内含的相关软件并没有办法在其他的硬件架构下工作的! 另外,由于没有厂商针对个人计算机设计 Unix 系统,因此,在早期并没有支持个人计算机的 Unix 操作系统的出现。
Tips 如同相容分时系统的功能一般,Unix 强调的是多用户多任务的环境! 但早期的 286 个人计算机架构下的 CPU 是没有能力达到多任务的作业,因此,并没有人对移植 Unix 到 x86 的计算机上有兴趣。
每一家公司自己出的 Unix 虽然在架构上面大同小异,但是却真的仅能支持自身的硬件, 所以啰,早先的 Unix 只能与服务器(Server)或者是大型工作站(Workstation)划上等号! 但到了 1979 年时,AT&T 推出 System V 第七版 Unix 后,这个情况就有点改善了。 这一版最重要的特色是可以支持 x86 架构的个人计算机系统,也就是说 System V 可以在个人计算机上面安装与运行了。
不过因为 AT&T 由于商业的考虑,以及在当时现实环境下的思考,于是想将 Unix 的版权收回去。因此, AT&T 在 1979 年发行的第七版 Unix 中,特别提到了 “不可对学生提供源代码”的严格限制! 同时,也造成 Unix 业界之间的紧张气氛,并且也引爆了很多的商业纠纷~
Tips 目前被称为纯种的 Unix 指的就是 System V 以及 BSD 这两套啰!
- 1984 年之一:x86 架构的 Minix 操作系统开始撰写并于两年后诞生
关于 1979 年的版权声明中,影响最大的当然就是学校教 Unix 核心源代码相关学问的教授了! 想一想,如果没有核心源代码,那么如何教导学生认识 Unix 呢?这问题对于 Andrew Tanenbaum (谭宁邦, [5])教授来说,实在是很伤脑筋的!不过,学校的课程还是得继续啊!那怎么办?
既然 1979 年的 Unix 第七版可以在 Intel 的 x86 架构上面进行移植, 那么是否意味着可以将 Unix 改写并移植到 x86 上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了 Minix 这个 Unix Like 的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看 Unix 核心源代码! 并且强调他的 Minix 必须能够与 Unix 相容才行!谭宁邦在 1984 年开始撰写核心程序, 到了 1986 年终于完成,并于次年出版 Minix 相关书籍,同时与新闻群组(BBS 及 News)相结合~
Tips 之所以称为 Minix 的原因,是因为他是个 Mini (微小的) 的 Unix 系统啰!^_^
这个 Minix 版本比较有趣的地方是,他并不是完全免费的,无法在网络上提供下载! 必须要通过磁片/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网络上流传, 所以 Minix 的传递速度并没有很快速!此外,购买时,随磁片还会附上 Minix 的源代码! 这意味着使用者可以学习 Minix 的核心程序设计概念喔! (这个特色对于 Linux 的启始开发阶段,可是有很大的关系喔!)
此外,Minix 操作系统的开发者仅有谭宁邦教授,因为学者很忙啊 (鸟哥当了老师之后,才发现,真的忙...)!加上谭宁邦始终认为 Minix 主要用在教育用途上面, 所以对于 Minix 是点到为止!没错,Minix 是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了! 这样说,你明白吧?^_^
- 1984 年之二:GNU 计划与 FSF 基金会的成立
Richard Mathew Stallman(史托曼)在 1984 年发起的 GNU 计划,对于现今的自由软件风潮, 真有不可磨灭的地位!目前我们所使用的很多自由软件或开源软件,几乎均直接或间接受益于 GNU 这个计划呢! 那么史托曼是何许人也?为何他会发起这个 GNU 计划呢?
- 一个分享的环境:
Richard Mathew Stallman(生于 1953 年, 网络上自称的 ID 为 RMS, [6])从小就很聪明!他在 1971 年的时候,进入骇客圈中相当出名的人工智能实验室(AI Lab.), 这个时候的骇客专指计算机功力很强的人,而非破坏计算机的怪客(cracker)喔!
当时的骇客圈对于软件的着眼点几乎都是在“分享”,骇客们都认为互相学习对方的程序码,这样才是产生更优秀的程序码的最佳方式! 所以 AI 实验室的骇客们通常会将自己的程序码公布出来跟大家讨论喔!这个特色对于史托曼的影响很大!
不过,后来由于管理阶层以及骇客群们自己的生涯规划等问题,导致实验室的优秀骇客离开该实验室, 并且进入其他商业公司继续发展优秀的软件。但史托曼并不服输,仍然持续在原来的实验室开发新的程序与软件。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!
- 使用 Unix 开发阶段:
1983 年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件与操作系统继续自由程序的撰写~ 而且他进一步发现到,过去他所使用的 Lisp 操作系统,是麻省理工学院的专利软件, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了 Lisp 这个系统。 后来,他接触到 Unix 这个系统,并且发现,Unix 在理论与实际上,都可以在不同的机器间进行移植。虽然 Unix 依旧是专利软件, 但至少 Unix 架构上还是比较开放的!于是他开始转而使用 Unix 系统。
因为 Lisp 与 Unix 是不同的系统,所以,他原本已经撰写完毕的软件是无法在 Unix 上面运行的!为此, 他就开始将软件移植到 Unix 上面。并且,为了让软件可以在不同的平台上运行, 因此,史托曼将他发展的软件均撰写成可以移植的型态!也就是他都会将程序的源代码公布出来!
- GNU 计划的推展[7]:
1984 年,史托曼开始GNU计划, 这个计划的目的是:创建一个自由、开放的 Unix 操作系统(Free Unix)。 但是创建一个操作系统谈何容易啊!而且在当时的 GNU 是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不想放弃这个计划,那可怎么办啊?
聪明的史托曼干脆反其道而行~“既然操作系统太复杂,我就先写可以在 Unix 上面运行的小程序,这总可以了吧?”在这个想法上, 史托曼开始参考 Unix 上面现有的软件,并依据这些软件的作用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的源代码, 以避免吃上官司。后来一堆人知道免费的 GNU 软件,并且实际使用后发现与原有的专利软件也差不了太多,于是便转而使用 GNU 软件, 于是 GNU 计划逐渐打开知名度。
虽然 GNU 计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件, 都得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译器,那不就是大家都需要的软件了吗? 因此他便开始撰写 C 语言的编译器,那就是现在相当有名的 GNU C Compiler(gcc)! 这个点相当的重要!这是因为 C 语言编译器版本众多,但都是专利软件, 如果他写的 C 编译器够棒,性能够佳,那么将会大大的让 GNU 计划出现在众人眼前!如果忘记啥是编译器, 请回到第零章去瞧瞧编译程序吧!
但开始撰写 GCC 时并不顺利,为此,他先转而将他原先就已经写过的 Emacs 编辑器写成可以在 Unix 上面跑的软件,并公布源代码。 Emacs 是一种程序编辑器,他可以在使用者撰写程序的过程中就进行程序语法的检验,此一功能可以减少程序设计师除错的时间! 因为 Emacs 太优秀了,因此,很多人便直接向他购买。
此时网际网络尚未流行,所以,史托曼便借着 Emacs 以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其他软件。并且成立自由软件基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软件。终于还是完成了 GCC,这比 Emacs 还更有帮助! 此外,他还撰写了更多可以被调用的 C 函数库(GNU C library),以及可以被使用来操作操作系统的基本接口 BASH shell! 这些都在 1990 年左右完成了!
Tips 如果纯粹使用文字编辑器来编辑程序的话,那么程序语法如果写错时,只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs 则是一个很棒的编辑器!注意!是编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出你写入的语法可能有错误的地方,这对于程序设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢迎啊!
- GNU 的通用公共许可证:
到了 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 的出现...更多的 FSF 开发的软件可以参考如下网页:
Tips 事实上,GNU 自己开发的核心称为 hurd, 是一个架构相当先进的核心。不过由于开发者在开发的过程中对于系统的要求太过于严谨,因此推出的时程一再延后,所以才有后来 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 等 GNU 的工具写了一个小小的核心程序,该核心程序单纯是个玩具,不像 GNU 那么专业。 不过该核心程序可以在 Intel 的 386 机器上面运行就是了。这让很多人很感兴趣!从此开始了 Linux 不平凡的路程!
1.1.3 关于 GNU 计划、自由软件与开放源代码
GNU 计划对于整个自由软件与开放源代码软件来说是占有非常重要的角色!下面我们就来谈谈这咚咚吧!
- 自由软件的活动:
1984 年创立 GNU 计划与 FSF 基金会的 Stallman 先生认为,写程序最大的快乐就是让自己发展的良好的软件让大家来使用了! 另外,如果使用方撰写程序的能力比自己强,那么当对方修改完自己的程序并且回传修改后的程序码给自己,那自己的程序撰写功力无形中就更往上爬了! 这就是最早之前 AI 实验室的骇客风格!
而既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不相同, 既然如此的话,那么该程序的源代码(Source code)就应该要同时释出, 这样才能方便大家修改而适用于每个人的计算机中呢!这个将源代码连同软件程序释出的举动,在 GNU 计划的范畴之内就称为自由软件(Free Software)运动!
此外,史托曼同时认为,如果你将你程序的 Source code 分享出来时,若该程序是很优秀的,那么将会有很多人使用, 而每个人对于该程序都可以查阅 source code,无形之中,就会有一票人帮你除错啰! 你的这支程序将会越来越壮大!越来越优秀呢!
- 自由软件的版权 GNU GPL:
而为了避免自己的开发出来的 Open source 自由软件被拿去做成专利软件, 于是 Stallman 同时将 GNU 与 FSF 发展出来的软件,都挂上 GPL 的版权宣告~ 这个 FSF 的核心观念是“版权制度是促进社会进步的手段, 版权本身不是自然权力。”对于 FSF 有兴趣或者对于 GNU 想要更深入的了解时,请参考朝阳科技大学洪朝贵教授的网站 people.ofset.org/~ckhung/a/c_83.php,或直接到 GNU 去: 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 code 是程序发展者写出的原始程序码, Open Source 就是,软件在发布时,同时将作者的源代码一起公布的意思!
- 自由(Free)的真谛:
那么这个 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 软件的授权取消,即使你已经对该软件进行大幅度的修改! 那么自由软件也不能贩卖吗?当然不是!还记得上一个小节里面, 我们提到史托曼借由贩卖 Emacs 取得一些经费,让自己生活不至于匮乏吧?是的! 自由软件是可以贩售的,不过,不可仅贩售该软件,应同时搭配售后服务与相关手册~ 这些可就需要工本费了呢!
- 自由软件与商业行为:
很多人还是有疑问,目前不是有很多 Linux 开发商吗?为何他们可以贩售 Linux 这个 GPL 授权的软件? 原因很简单,因为他们大多都是贩售“售后服务!”所以,他们所使用的自由软件, 都可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软件就不是 GPL 的授权软件了!) 但是,你可以购买他们的 Linux 光盘,如果你购买了光盘,他们会提供相关的手册说明文档, 同时也会提供你数年不等的谘询、售后服务、软件升级与其他协力工作等等的附加价值!
所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在“服务”这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要你的自由软件时,他就会请求你的协助, 此时,你就可以通过服务来收费了!这样来说, 自由软件确实还是具有商业空间的喔!
Tips 很多人对于 GPL 授权一直很疑惑,对于 GPL 的商业行为更是无法接受! 关于这一点,鸟哥在这里还是要再次的申明,GPL 是可以从事商业行为的! 而很多的作者也是借由这些商业行为来得以取得生活所需,更进一步去发展更优秀的自由软件! 千万不要听到“商业”就排斥!这对于发展优良软件的朋友来说,是不礼貌的!
上面提到的大多是与使用者有关的项目,那么 GPL 对于自由软件的作者有何优点呢?大致的优点有这些:
- 软件安全性较佳;
- 软件执行性能较佳;
- 软件除错时间较短;
- 贡献的源代码永远都存在。
这是因为既然是提供源代码的自由软件,那么你的程序码将会有很多人帮你查阅, 如此一来,程序的漏洞与程序的优化将会进展的很快!所以,在安全性与性能上面, 自由软件一点都不输给商业软件喔!此外,因为 GPL 授权当中,修改者并不能修改授权, 因此,你如果曾经贡献过程序码,嘿嘿!你将名留青史呢!不错吧! ^_^
对于程序开发者来说,GPL 实在是一个非常好的授权,因为大家可以互相学习对方的程序撰写技巧, 而且自己写的程序也有人可以帮忙除错。那你会问啊,对于我们这些广大的终端用户,GPL 有没有什么好处啊?有啊!当然有! 虽然终端用户或许不会自己编译程序码或者是帮人家除错,但是终端用户使用的软件绝大部分就是 GPL 的软件, 全世界有一大票的工程师在帮你维护你的系统,这难道不是一件非常棒的事吗? ^_^
Tips 就跟人类社会的科技会进步一样,授权也会进步喔!因应源代码分区与重组的问题,与其他开源软件的授权包容性,以及最重要的数码版权管理 (Digital Rights Management, DRM) 等问题,GPL 目前已经出到第三版 GPLv3。但是,目前使用最广泛的,还是 GPLv2 喔!包括 Linux 核心就还是使用 GPLv2 的说!
- 开放源代码:
由于自由软件使用的英文为 free software,这个 free 在英文是有两种以上不同的意义,除了自由之外,免费也是这个单字! 因为有这些额外的联想,因此许多的商业公司对于投入自由软件方面确实是有些疑虑存在的!许多人对于这个情况总是有些担心~
为了解决这个困扰,1998 年成立的“开放源代码促进会 (Open Source Initiative)”提出了开放源代码 (Open Source,亦可简称开源软件) 这一名词! 另外,并非软件可以被读取源代码就可以被称为开源软件喔!该软件的授权必须要符合下面的基本需求,才可以算是 open source 的软件哩![8]
- 公布源代码且用户具有修改权:用户可以任意的修改与编译程序码,这点与自由软件差异不大;
- 任意的再散佈:该程序码全部或部份可以被贩售,且程序码可成为其他软件的元件之一,作者不该宣称具有拥有权或收取其他额外费用。
- 必须允许修改或衍生的作品,且可让再发布的软件使用相似的授权来发表即可。
- 承上,用户可使用与原本软件不同的名称或编号来散佈。
- 不可限制某些个人或团体的使用权
- 不可限制某些领域的应用:例如不可限制不能用于商业行为或者是学术行为等特殊领域等等
- 不可限制在某些产品当中,亦即程序码可以应用于多种不同产品中。
- 不可具有排他条款,例如不可限制本程序码不能用于教育类的研究中,诸如此类。
根据上面的定义,GPL 自由软件也可以算是开源软件的一个,只是对于商业应用的限止稍微多一些而已。 与 GPL 自由软件相比,其他开源软件的授权可能比较轻松喔!比较轻松的部份包括:再发布的授权可以跟原本的软件不同; 另外,开源软件的全部或部份可作为其他软件的一部分,且其他软件无须使用与开源软件相同的授权来发布!这跟 GPL 自由软件差异就大了! 自由软件的 GPL 授权规定,任何软件只要用了 GPL 的全部或部份程序码,那么该软件就得要使用 GPL 的授权!这对于自由软件的保障相当大! 但对于想要保有商业公司自己的商业机密的专属软件来说,要使用 GPL 授权还是怕怕的!这也是后来商业公司拥抱其他 open source 开源软件授权的缘故!因为可以用于商业行为啰!更多的差异或许可以参考一下开源促进会的说明。
另外,Open source 这个名词只是一个指引,而实际上并不是先有 open source 才有相关的授权。早在 open source 出来之前就有些开源软件的授权存在了 (例如 GPL 啊!)! 不过有 open source 这个名词之后,大家才更了解到开源软件授权的意义就是了。那常见的开放源代码授权有哪些呢?
- Apache License 2.0
- BSD 3-Clause "New" or "Revised" license
- BSD 2-Clause "Simplified" or "FreeBSD" license
- GNU General Public License (GPL)
- GNU Library or "Lesser" General Public License (LGPL)
- MIT license
- Mozilla Public License 2.0
- Common Development and Distribution License
鸟哥也不是软件授权的高手!每个授权详细的内容也可以参考 OSI 协会的介绍啦[9]。
Tips 如前所述,GPL 也是合乎 Open source 所定义的授权之一,只是它更着重于保护自由软件本身的学习与发展就是了!那如果你想要开发开源软件时, 到底使用哪种授权比较好呢?其实跟你对这个软件的未来走向的定义有关啦!简单的来说,如果你的软件未来你允许它用于商业活动中, 可以考虑 BSD 之类的授权,如果你的软件希望少一些商业色彩,GPLv2 大概是不二选择啰!那如果你的软件允许分支开发, 甚至可以考虑分成两种版本分别授权哩! ^_^
- 专属软件/专利软件 (close source)
相对于 Open Source 的软件会释出源代码,Close source 的程序则仅推出可执行的二进制程序(binary program)而已。 这种软件的优点是有专人维护,你不需要去更动他;缺点则是灵活度大打折扣,使用者无法变更该程序成为自己想要的样式! 此外,若有木马程序或者安全漏洞,将会花上相当长的一段时间来除错!这也是所谓专利软件(copyright)常见的软件出售方式。
虽然专利软件常常代表就是需要花钱去购买,不过有些专利软件还是可以“免费”提供福斯使用的!免费的专利软件代表的授权模式有:
-
Freeware:
en.wikipedia.org/wiki/Freeware不同于 Free software,Freeware 为“免费软件”而非“自由软件!”虽然它是免费的软件,但是不见得要公布其源代码, 端看释出者的意见啰!这个东西与 Open Source 毕竟是不太相同的东西喔!此外,目前很多标榜免费软件的程序很多都有小问题! 例如假藉免费软件的名义,实施使用者数据窃取的目的! 所以“来路不明的软件请勿安装!” -
Shareware:
en.wikipedia.org/wiki/Shareware共享软件这个名词就有趣了!与免费软件有点类似的是,Shareware 在使用初期,它也是免费的,但是, 到了所谓的“试用期限”之后,你就必须要选择“付费后继续使用”或者“将它移除”的宿命~ 通常,这些共享软件都会自行撰写失效程序,让你在试用期限之后就无法使用该软件。
1.2 Torvalds 的 Linux 发展
1.2 Torvalds 的 Linux 发展
我们前面一节当中,提到了 Unix 的历史,也提到了 Linux 是由 Torvalds 这个芬兰人所发明的。那么为何托瓦兹可以发明 Linux 呢? 凭空想像而来的?还是有什么渊源?这里我们就来谈一谈啰!
1.2.1 与 Minix 之间
Linus Torvalds(托瓦兹, 1969 年出生, [10])的外祖父是赫尔辛基大学的统计学家, 他的外祖父为了让自己的小孙子能够学点东西,所以从小就将托瓦兹带到身边来管理一些微计算机。 在这个时期,托瓦兹接触了组合语言(Assembly Language),那是一种直接与芯片对谈的程序语言,也就是所谓的低阶语言。 必须要很了解硬件的架构,否则很难以组合语言撰写程序的。
在 1988 年间,托瓦兹顺利的进入了赫尔辛基大学,并选读了计算机科学系。在就学期间,因为学业的需要与自己的兴趣, 托瓦兹接触到了 Unix 这个操作系统。当时整个赫尔辛基只有一部最新的 Unix 系统,同时仅提供 16 个终端机(terminal)。 还记得我们上一节刚刚提过的,早期的计算机仅有主机具有运算功能,terminal 仅负责提供 Input/Output 而已。在这种情况下, 实在很难满足托瓦兹的需求,因为.....光是等待使用 Unix 的时间,就很耗时~为此,他不禁想到: “我何不自己搞一部 Unix 来玩?”不过,就如同 Stallman 当初的 GNU 计划一样,要写核心程序,谈何容易~
不过,幸运之神并未背离托瓦兹,因为不久之后,他就知道有一个类似 Unix 的系统, 并且与 Unix 完全相容,还可以在 Intel 386 机器上面跑的操作系统, 那就是我们上一节提过的,谭宁邦教授为了教育需要而撰写的 Minix 系统! 他在购买了最新的 Intel 386 的个人计算机后,就立即安装了 Minix 这个操作系统。 另外,上个小节当中也谈到,Minix 这个操作系统是有附上源代码的, 所以托瓦兹也经由这个源代码学习到了很多的核心程序设计的设计概念喔!
1.2.2 对 386 硬件的多任务测试
事实上,托瓦兹对于个人计算机的 CPU 其实并不满意,因为他之前碰的计算机都是工作站型的计算机, 这类计算机的 CPU 特色就是可以进行“多任务处理”的能力。什么是多任务呢?理论上, 一个 CPU 在一个时间内仅能进行一个程序, 那如果有两个以上的程序同时出现到系统中呢?举例来说, 你可以在现今的计算机中同时打开两个以上的办公软件,例如电子试算表与文书处理软件。 这个同时打开的动作代表着这两个程序同时要交给 CPU 来处理~
啊!CPU 一个时间点内仅能处理一个程序,那怎么办?没关系,这个时候如果具有多任务能力的 CPU 就会在不同的程序间切换~ 还记得前一章谈到的 CPU 频率吧?假设 CPU 频率为 1GHz 的话,那表示 CPU 一秒钟可以进行 109 次工作。 假设 CPU 对每个程序都只进行 1000 次运行周期,然后就得要切换到下个程序的话,那么 CPU 一秒钟就能够切换 106 次呢! (当然啦,切换工作这件事情也会花去一些 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, 最后一个会将两个程序进行切换。他将三个程序同时执行,结果,他看到屏幕上很顺利的一直出现 ABABAB...... 他知道,他成功了! ^^
Tips 要达到多工(multitasking)的环境,除了硬件(主要是 CPU)需要能够具有多任务的特性外,操作系统也需要支持这个功能喔! 一些不具有多任务特性的操作系统,想要同时执行两个程序是不可能的。除非先被执行的程序执行完毕,否则, 后面的程序不可能被主动执行。
至于多任务的操作系统中,每个程序被执行时,都会有一个最大 CPU 使用时间,若该工作运行的时间超过这个 CPU 使用时间时, 该工作就会先被丢出 CPU 的运行中,而再度的进入核心工作调度中等待下一次被 CPU 取用来运行。
这有点像在开记者会啦,主持人(CPU)会问“谁要发问”?一群记者(工作程序) 就会举手(看谁的工作重要!),先举手的自然就被允许发问,问完之后, 主持人又会问一次谁要发问,当然,所有人(包括刚刚那个记者)都可以举手! 如此一次一次的将工作给他完成啊! ^_^ 多任务的环境对于复杂的工作情况,帮助很大喔!
1.2.3 初次释出 Linux 0.02
探索完 386 的硬件性能之后,终于拿到 Minix 并且安装在托瓦兹的 386 计算机上之后,托瓦兹跟 BBS 上面一堆工程师一样, 他发现 Minix 虽然真的很棒,但是谭宁邦教授就是不愿意进行功能的加强,导致一堆工程师在操作系统功能上面的欲求不满! 这个时候年轻的托瓦兹就想:“既然如此,那我何不自己来改写一个我想要的操作系统?” 于是他就开始了核心程序的撰写了。
撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将源代码编译成为可可执行文件的编译器。 好在有 GNU 计划提供的 bash 工作环境软件以及 gcc 编译器等自由软件, 让托瓦兹得以顺利的撰写核心程序。他参考 Minix 的设计理念与书上的程序码,然后仔细研究出 386 个人计算机的性能最优化, 然后使用 GNU 的自由软件将核心程序码与 386 紧紧的结合在一起,最终写出他所需要的核心程序。 而这个小玩意竟然真的可以在 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.
I've currently ported bash (1.08) and gcc (1.40),
and things seem to work. This implies that i'll get
something practical within a few months, and I'd like to know
what features most people want. Any suggestions are welcome,
but I won't promise I'll implement them :-)
他说,他完成了一个小小的操作系统,这个核心是用在 386 机器上的, 同时,他真的仅是好玩,并不是想要做一个跟 GNU 一样大的计划! 另外,他希望能够得到更多人的建议与回馈来发展这个操作系统!这个概念跟 Minix 刚好背道而驰呢! 这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个核心来安装。 有趣的是,因为托瓦兹放置核心的那个 FTP 网站的目录为:Linux, 从此,大家便称这个核心为 Linux 了。(请注意,此时的 Linux 就是那个 kernel 喔! 另外,托瓦兹所丢到该目录下的第一个核心版本为 0.02 呢!)
同时,为了让自己的 Linux 能够相容于 Unix 系统,于是托瓦兹开始将一些能够在 Unix 上面运行的软件拿来在 Linux 上面跑。 不过,他发现到有很多的软件无法在 Linux 这个核心上运行。这个时候他有两种作法, 一种是修改软件,让该软件可以在 Linux 上跑, 另一种则是修改 Linux,让 Linux 符合软件能够运行的规范! 由于 Linux 希望能够相容于 Unix,于是托瓦兹选择了第二个作法“修改 Linux”! 为了让所有的软件都可以在 Linux 上执行,于是托瓦兹开始参考标准的POSIX规范。
Tips POSIX 是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准喔!
这个正确的决定让 Linux 在起步的时候体质就比别人优良~因为 POSIX 标准主要是针对 Unix 与一些软件运行时候的标准规范, 只要依据这些标准规范来设计的核心与软件,理论上,就可以搭配在一起执行了。 而 Linux 的发展就是依据这个 POSIX 的标准规范,Unix 上面的软件也是遵循这个规范来设计的, 如此一来,让 Linux 很容易就与 Unix 相容共享互有的软件了!同时,因为 Linux 直接放置在网络下,提供大家下载, 所以在流通的速度上相当的快!导致 Linux 的使用率大增!这些都是造成 Linux 大受欢迎的几个重要因素呢!
Tips 其实托瓦兹有意无意之间常常会透露他自己是个只喜欢玩 (Just for Fun) 的怪人!Linux 一开始也只是托瓦兹的一个作业发展出来的玩具而已。 他也说,如果 Minix 或 hurd 这两个中的任何一个系统可以提早开发出他想要的功能与环境,也许他根本不会想要自己开发一个 Linux 哩! 哇!人类智慧真是没有极限!各位啊: 1)要先有基础知识与技能、2)有了第一点后,要勇于挑战权威、3)把你们的玩具发扬光大吧! ^_^
1.2.4 Linux 的发展:虚拟团队的产生
Linux 能够成功除了托瓦兹个人的理念与力量之外,其实还有个最重要的团队!
- 单一个人维护阶段
Linux 虽然是托瓦兹发明的,而且内容还绝不会涉及专利软件的版权问题。不过,如果单靠托瓦兹自己一个人的话,那么 Linux 要茁壮实在很困难~ 因为一个人的力量是很有限的。好在托瓦兹选择 Linux 的开发方式相当的务实!首先,他将释出的 Linux 核心放置在 FTP 上面,并请告知大家新的版本信息, 等到使用者下载了这个核心并且安装之后,如果发生问题,或者是由于特殊需求亟需某些硬件的驱动程序,那么这些使用者就会主动回报给托瓦兹。 在托瓦兹能够解决的问题范围内,他都能很快速的进行 Linux 核心的更新与除错。
- 广大骇客志工加入阶段
不过,托瓦兹总是有些硬件无法取得的啊,那么他当然无法帮助进行驱动程序的撰写与相关软件的改良。 这个时候,就会有些志工跳出来说:“这个硬件我有,我来帮忙写相关的驱动程序。” 因为 Linux 的核心是 Open Source 的,骇客志工们很容易就能够跟随 Linux 的原本设计架构, 并且写出相容的驱动程序或者软件。志工们写完的驱动程序与软件托瓦兹是如何看待的呢? 首先,他将该驱动程序/软件带入核心中,并且加以测试。 只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意的将志工们写的程序码加入核心中!
总之,托瓦兹是个很务实的人,对于 Linux 核心所欠缺的项目,他总是“先求有且能跑, 再求进一步改良”的心态!这让 Linux 使用者与志工得到相当大的鼓励! 因为 Linux 的进步太快了!使用者要求虚拟内存,结果不到一个星期推出的新版 Linux 就有了! 这不得不让人佩服啊!
另外,为因应这种随时都有程序码加入的状况,于是 Linux 便逐渐发展成具有模块的功能! 亦即是将某些功能独立出于核心外,在需要的时候才载入到核心中。如此一来, 如果有新的硬件驱动程序或者其他协定的程序码进来时,就可以模块化, 大大的增加了 Linux 核心的可维护能力!
Tips 核心是一组程序,如果这组程序每次加入新的功能都得要重新编译与改版的话会变成如何? 想像一下,如果你只是换了显卡就得要重新安装新的 Windows 操作系统,会不会傻眼? 模块化之后,原本的核心程序不需要更动,你可以直接将他想成是“驱动程序”即可! ^_^
- 核心功能细部分工发展阶段
后来,因为 Linux 核心加入了太多的功能,光靠托瓦兹一个人进行核心的实际测试并加入核心原始程序实在太费力~ 结果,就有很多的朋友跳出来帮忙这个前置作业!例如考克斯(Alan Cox)、与崔迪(Stephen Tweedie)等等, 这些重要的副手会先将来自志工们的修补程序或者新功能的程序码进行测试, 并且结果上传给托瓦兹看,让托瓦兹作最后核心加入的源代码的选择与整并! 这个分层负责的结果,让 Linux 的发展更加的容易!
特别值得注意的是,这些托瓦兹的 Linux 发展副手,以及自愿传送修补程序的骇客志工, 其实都没有见过面,而且彼此在地球的各个角落,大家群策群力的共同发展出现今的 Linux, 我们称这群人为虚拟团队!而为了虚拟团队数据的传输,于是 Linux 便成立的核心网站: www.kernel.org!
而这群素未谋面的虚拟团队们,在 1994 年终于完成的 Linux 的核心正式版!version 1.0。 这一版同时还加入了 X Window System 的支持呢!且于 1996 年完成了 2.0 版、2011 年释出 3.0 版,更于 2015 年 4 月释出了 4.0 版哩! 发展相当迅速喔!此外,托瓦兹指明了企鹅为 Linux 的吉祥物。
Tips 奇怪的是,托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的 2.0 推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成了 Linux 的吉祥物了......
Linux 由于托瓦兹是针对 386 写的,跟 386 硬件的相关性很强,所以, 早期的 Linux 确实是不具有移植性的。不过,大家知道 Open source 的好处就是, 可以修改程序码去适合作业的环境。因此,在 1994 年以后,Linux 便被开发到很多的硬件上面去了! 目前除了 x86 之外,IBM、HP 等等公司出的硬件也都有被 Linux 所支持呢!甚至于小型单板计算机 (树莓派/香蕉派等) 与手持设备 (智能手机、平板电脑) 的 ARM 架构系统,大多也是使用 Linux 核心喔!
1.2.5 Linux 的核心版本
Linux 的核心版本编号有点类似如下的样子:
3.10.0-123.el7.x86_64
主版本.次版本.释出版本-修改版本
虽然编号就是如上的方式来编的,不过依据 Linux 核心的发展期程,核心版本的定义有点不太相同喔!
- 奇数、偶数版本分类
在 2.6.x 版本以前,托瓦兹将核心的发展趋势分为两股,并根据这两股核心的发展分别给予不同的核心编号,那就是:
-
主、次版本为奇数:发展中版本(development) 如 2.5.xx,这种核心版本主要用在测试与发展新功能,所以通常这种版本仅有核心开发工程师会使用。 如果有新增的核心程序码,会加到这种版本当中,等到众多工程师测试没问题后,才加入下一版的稳定核心中;
-
主、次版本为偶数:稳定版本(stable) 如 2.6.xx,等到核心功能发展成熟后会加到这类的版本中,主要用在一般家用计算机以及企业版本中。 重点在于提供使用者一个相对稳定的 Linux 作业环境平台。
至于释出版本则是在主、次版本架构不变的情况下,新增的功能累积到一定的程度后所新释出的核心版本。 而由于 Linux 核心是使用 GPL 的授权,因此大家都能够进行核心程序码的修改。因此,如果你有针对某个版本的核心修改过部分的程序码, 那么那个被修改过的新的核心版本就可以加上所谓的修改版本了。
- 主线版本、长期维护版本(longterm version)
不过,这种奇数、偶数的编号格式在 3.0 推出之后就失效了。从 3.0 版开始,核心主要依据主线版本 (MainLine) 来开发,开发完毕后会往下一个主线版本进行。 例如 3.10 就是在 3.9 的架构下继续开发出来的新的主线版本。通常新一版的主线版本大约在 2~3 个月会被提出喔! 之所以会有新的主线版本,是因为有加入新功能之故。现在 (2015/04) 最新的主线版本已经来到 4.0 版了喔!好快!
而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发 (End of Live, EOL),亦即该程序码已经结束,不会有继续维护的状态。 另外一种机制为保持该版本的持续维护,亦即为长期维护版本 (Longterm)!例如 3.10 即为一个长期维护版本,这个版本的程序码会被持续维护,若程序码有 bug 或其他问题, 核心维护者会持续进行程序码的更新维护喔!
所以啰,如果你想要使用 Linux 核心来开发你的系统,那么当然要选择长期支持的版本才行!要判断你的 Linux 核心是否为长期支持的版本, 可以使用“ uname -r ”来查阅核心版本,然后对照下列链接来了解其对应值喔!
-
Linux 核心版本与 Linux 发布商版本
Linux 核心版本与 distribution (下个小节会谈到) 的版本并不相同,很多朋友常常上网问到:“我的 Linux 是 7.x 版,请问....”之类的留言, 这是不对的提问方式,因为所谓的 Linux 版本指的应该是核心版本, 而目前最新的核心版本应该是 4.0.0(2015/04) 才对,并不会有 7.x 的版本出现的。
你常用的 Linux 系统则应该说明为 distribution 才对!因此,如果以 CentOS 这个 distribution 来说, 你应该说:“我用的 Linux 是 CentOS 这个 distribution,版本为 7.x 版,请问....”才对喔!
Tips 当你有任何问题想要在 Linux 论坛发言时,请务必仔细的说明你的 distribution 版本, 因为虽然各家 distributions 使用的都是 Linux 核心,不过每家 distributions 所选用的软件以及他们自己发展的工具并不相同, 多少还是有点差异,所以留言时得要先声明 distribution 的版本才行喔! ^_^
1.2.6 Linux distributions
好了,经过上面的说明,我们知道了 Linux 其实就是一个操作系统最底层的核心及其提供的核心工具。 他是 GNU GPL 授权模式,所以,任何人均可取得源代码与可执行这个核心程序,并且可以修改。 此外,因为 Linux 参考 POSIX 设计规范,于是相容于 Unix 操作系统,故亦可称之为 Unix Like 的一种。
Tips 鸟哥曾在上课的时候问过同学:“什么是 Unix Like 啊”?可爱的同学们回答的答案是:“就是很喜欢(like)Unix 啦!” 囧 rz...那个 like 是“很像”啦!所以 Unix like 是“很像 Unix 的操作系统”哩!
- 可完整安装的 Linux 发布套件
Linux 的出现让 GNU 计划放下了心里的一块大石头,因为 GNU 一直以来就是缺乏了核心程序, 导致他们的 GNU 自由软件只能在其他的 Unix 上面跑。既然目前有 Linux 出现了,且 Linux 也用了很多的 GNU 相关软件,所以 Stallman 认为 Linux 的全名应该称之为 GNU/Linux 呢! 不管怎么说,Linux 实在很不错,让 GNU 软件大多以 Linux 为主要操作系统来进行开发, 此外,很多其他的自由软件团队,例如 postfix, vsftpd, apache 等等也都有以 Linux 为开发测试平台的计划出现!如此一来,Linux 除了主要的核心程序外,可以在 Linux 上面运行的软件也越来越多,如果有心,就能够将一个完整的 Linux 操作系统搞定了!
虽然由 Torvalds 负责开发的 Linux 仅具有 Kernel 与 Kernel 提供的工具, 不过,如上所述,很多的软件已经可以在 Linux 上面运行了,因此, “Linux + 各种软件”就可以完成一个相当完整的操作系统了。 不过,要完成这样的操作系统......还真难~ 因为 Linux 早期都是由骇客工程师所开发维护的,他们并没有考虑到一般使用者的能力......
为了让使用者能够接触到 Linux,于是很多的商业公司或非营利团体, 就将 Linux Kernel(含 tools)与可运行的软件整合起来,加上自己具有创意的工具程序, 这个工具程序可以让使用者以光盘/DVD 或者通过网络直接安装/管理 Linux 系统。 这个“Kernel + Softwares + Tools + 可完整安装程序”的咚咚,我们称之为 Linux distribution, 一般中文翻译成可完整安装套件,或者 Linux 发布商套件等。
Tips 由于 Linux 核心是由骇客工程师写的,要由源代码安装到 x86 计算机上面成为可以执行的 binary 文件, 这个过程可不是人人都会的~所以早期确实只有工程师对 Linux 有兴趣。 一直到一些社群与商业公司将 Linux 核心配合自由软件,并提供完整的安装程序, 且制成光盘/DVD 后,对于一般使用者来说,Linux 才越来越具有吸引力! 因为只要一直“下一步”就可以将 Linux 安装完成啊! ^_^
由于 GNU 的 GPL 授权并非不能从事商业行为,于是很多商业公司便成立来贩售 Linux distribution。 而由于 Linux 的 GPL 版权宣告,因此,商业公司所贩售的 Linux distributions 通常也都可以从 Internet 上面来下载的! 此外,如果你想要其他商业公司的服务,那么直接向该公司购买光盘来安装,也是一个很不错的方式的!
- 各大 Linux Distributions 的主要异同:支持标准!
不过,由于发展 Linux distributions 的社群与公司实在太多了,例如在台湾有名的 Red Hat, SuSE, Ubuntu, Fedora, Debian 等等,所以很多人都很担心,如此一来每个 distribution 是否都不相同呢? 这就不需要担心了,因为每个 Linux distributions 使用的 kernel 都是www.kernel.org所释出的,而他们所选择的软件,几乎都是目前很知名的软件,重复性相当的高, 例如网页服务器的 Apache,电子邮件服务器的 Postfix/sendmail,文件服务器的 Samba 等等。
此外,为了让所有的 Linux distributions 开发不致于差异太大,且让这些开发商在开发的时候有所依据,还有 Linux Standard Base (LSB)等标准来规范开发者,以及目录架构的 File system Hierarchy Standard (FHS)标准规范! 唯一差别的,可能就是该开发者自家所开发出来的管理工具,以及套件管理的模式吧! 所以说,基本上,每个 Linux distributions 除了架构的严谨度与选择的套件内容外, 其实差异并不太大啦! ^_^ 。大家可以选择自己喜好的 distribution 来安装即可!
事实上鸟哥认为 distributions 主要分为两大系统,一种是使用 RPM 方式安装软件的系统,包括 Red Hat, Fedora, SuSE 等都是这类; 一种则是使用 Debian 的 dpkg 方式安装软件的系统,包括 Debian, Ubuntu, B2D 等等。若是加上商业公司或社群单位的分类,那么我们可以简单的用下表来做个解释喔!
| RPM 软件管理 | DPKG 软件管理 | 其他未分类 | |
|---|---|---|---|
| 商业公司 | RHEL (Red Hat 公司) SuSE (Micro Focus) | Ubuntu (Canonical Ltd.) | |
| 社群单位 | Fedora CentOS OpenSuSE | Debian B2D | Gentoo |
下面列出几个主要的 Linux distributions 发行者网址:
- Red Hat: http://www.redhat.com
- SuSE: https://www.suse.com
- Fedora: https://getfedora.org/
- CentOS: http://www.centos.org/
- Debian: http://www.debian.org/
- Ubuntu: http://www.ubuntu.com/
- Gentoo: http://www.gentoo.org/
Tips 到底是要买商业版还是社群版的 Linux distribution 呢?如果是要装在个人计算机上面做为桌面电脑用的,建议使用社群版, 包括 Fedora, Ubuntu, OpenSuSE 等等。如果是用在服务器上面的,建议使用商业版本,包括 Red Hat, SuSE 等。 这是因为社群版通常开发者会加入最新的软件,这些软件可能会有一些 bug 存在。至于商业版则是经过一段时间的磨合后, 才将稳定的软件放进去。
举例来说,Fedora 兜出来的软件套件经过一段时间的维护后,等到该软件稳定到不容易发生错误后, Red Hat 才将该软件放到他们最新的释出版本中。所以,Fedora 的软件比较经常改版,Red Hat 的软件就较少更版。
- Linux 在台湾
当然发行套件者不仅于此。但是值得大书特书的,是中文 Linux 的延伸计划:CLE 这个套件! 早期的 Linux 因为是工程师发展的,而这些工程师大多以英文语系的国家为主, 所以 Linux 对于国人的学习是比较困扰一点。后来由国人发起的 CLE 计划, 开发很多的中文套件及翻译了很多的英文文件,使得我们目前得以使用中文的 Linux 呢! 另外,目前正在开发中的还有台南县卧龙小三等老师们发起的众多自由软件计划, 真是造福很多的朋友啊!
此外,如果只想看看 Linux 的话,还可以选择所谓的可光盘开机进入 Linux 的 Live CD 版本, 亦即是 KNOPPIX 这个 Linux distributions 呢!台湾也有阿里巴巴兄维护的中文 Live CD 喔!
Tips 对于没有额外的硬盘或者是没有额外的主机的朋友来说,KNOPPIX 这个可以利用光盘开机而进入 Linux 操作系统的 Live CD 真的是一个不错的选择!你只要下载了 KNOPPIX 的镜像文件,然后将他烧录成为 CD, 放入你主机的光驱,并在 BIOS 内设置光盘为第一个开机选项,就可以使用 Linux 系统了呢!
如果你还想要知道更多的 Linux distributions 的下载与使用信息,可以参考:
-
选择适合你的 Linux distribution
那我到底应该要选择哪一个 distributions?就如同我们上面提到的,其实每个 distributions 差异性并不大! 不过,由于套件管理的方式主要分为 Debian 的 dpkg 及 Red Hat 系统的 RPM 方式, 目前鸟哥的建议是,先学习以 RPM 套件管理为主的 RHEL/Fedora/SuSE/CentOS 等台湾使用者较多的版本, 这样一来,发生问题时,可以提供解决的管道比较多。如果你已经接触过 Linux 了, 还想要探讨更严谨的 Linux 版本,那可以考虑使用 Debian,如果你是以性能至上来考虑, 那么或许 Gentoo 是不错的建议!
总之,版本很多,但是各版本差异其实不大,建议你一定要先选定一个版本后, 先彻头彻尾的了解他,那再继续玩其他的版本时,就可以很快的进入状况。 鸟哥的网站仅提供一个版本,不过是以比较基础的方式来介绍的, 因此,如果能够熟练俺这个网站的话,呵呵!哪一个 distributions 对你来说,都不成问题啦!
不过,如果依据计算机主机的用途来分的话,在台湾鸟哥会这样建议:
-
用于企业环境:建议使用商业版本,例如 Red Hat 的 RHEL 或者是 SuSE 都是很不错的选择! 毕竟企业的环境强调的是永续的经营,你可不希望网管人员走了之后整个机房的主机都没有人管理吧! 由于商业版本都会提供客户服务,所以可以降低企业的风险喔!
-
用于个人或教学的服务器环境:要是你的服务器所在环境如果死机还不会造成太大的问题的话, 加上你的环境是在教学的场合当中时(就是说,唔!经费不足的环境啦!)那么可以使用“号称”完全相容商业版 RHEL 的 CentOS。 因为 CentOS 是抓 RHEL 的源代码来重新兜起来的一个 Linux distribution,所以号称相容于 RHEL。 这一版的软件完全与 RHEL 相同,在改版的幅度较小,适合于服务器系统的环境;
-
用于个人的桌面电脑:想要尝鲜吗?建议使用很炫的 Fedora/Ubuntu 等 Desktop(桌面环境)使用的版本! 如果不想要安装 Linux 的话,那么 Fedora 或 CentOS 也有推出 Live CD 了!也很容易学习喔!
1.3 Linux 当前应用的角色
1.3 Linux 当前应用的角色
了解了什么是 Linux 之后,再来谈谈,那目前 Linux 用在哪里呢?由于 Linux kernel 实在是非常的小巧精致,可以在很多强调省电以及较低硬件资源的环境下面执行; 此外,由于 Linux distributions 整合了非常多非常棒的软件(不论是专利软件或自由软件), 因此也相当适合目前个人计算机的使用呢!传统上,Linux 常见的应用可约略分为企业应用与个人应用两方面,但这几年很流行的云端运算机制中, 让 Linux 似乎又更有着力点啰!
1.3.1 企业环境的利用
企业对于数码化的目标在于提供消费者或员工一些产品方面的信息 (例如网页介绍),以及整合整个企业内部的数据统一性 (例如统一的帐号管理/文件管理系统等)。另外,某些企业例如金融业等,则强调在数据库、安全强化等重大关键应用。 学术单位则很需要强大的运算能力等。所以企业环境运用 Linux 作些什么呢?
- 网络服务器:
这是 Linux 当前最热门的应用了!承袭了 Unix 高稳定性的良好传统,Linux 上面的网络功能特别的稳定与强大! 此外,由于 GNU 计划与 Linux 的 GPL 授权模式,让很多优秀的软件都在 Linux 上面发展, 且这些在 Linux 上面的服务器软件几乎都是自由软件!因此,做为一部网络服务器,例如 WWW, Mail Server, File Server 等等,Linux 绝对是上上之选!当然,这也是 Linux 的强项!由于 Linux server 的需求强烈,因此许多硬件厂商推出产品时, 还得要特别说明有支持的 Linux distributions 呢!方便提供企业采购部门的规划喔!例如下面的链接可以瞧瞧:
- Dell 公司的 Server 对 OS 的支持度:
www.dell.com/support/contents/tw/en/twbsd1/article/Product-Support/ Self-support-Knowledgebase/enterprise-resource-center/server-operating-system-support - HP 公司的支持:
www8.hp.com/us/en/business-services/it-services.html?compURI=1078888#tab=TAB1 - IBM 公司的支持:
www-03.ibm.com/systems/hardware/browse/linux/ - VMWare 的虚拟化支持:
www.vmware.com/support/ws55/doc/intro_supguest_ws.html
从上面的几个大厂的 Linux 支持情况来看,目前 (2015) 支持度比较广泛的依旧是 Red Hat 以及 SuSU 两个大厂喔! 提估给企业采购的时候参考参考!
Tips 前一阵子参加一个座谈会,会上许多企业界的前辈们在聊,如果想要选择某个 Linux distribution 时,哪个 distribution 会是企业采购时的最爱呢? 与会的朋友说,要采购吗?看看服务器大厂对于该 distribution 的支持度就知道了!答案是什么?就是上面许多链接的结果啰! ^_^
- 关键任务的应用(金融数据库、大型企业网管环境):
由于个人计算机的性能大幅提升且价格便宜,所以金融业与大型企业的环境为了要精实自己机房的机器设备, 因此很多企业渐渐的走向 Intel 相容的 x86 主机环境。而这些企业所使用的软件大多使用 Unix 操作系统平台的软件, 总不能连过去发展的软件都一口气全部换掉吧!所以啰,这个时候符合 Unix 操作系统标准并且可以在 x86 上运行的 Linux 就渐渐崭露头角了!^_^
目前很多金融业界都已经使用 Linux 做为他们的关键任务应用。所谓的关键任务就是该企业最重要的业务啦! 举例来说,金融业最重要的就是那些投资者、帐户的数据了,这些数据大多使用数据库系统来作为存取接口, 这些数据很重要吧!很多金融业将这么重要的任务交给了 Linux 了!你说 Linux 厉不厉害啊?
- 学术机构的高性能运算任务:
学术机构的研究常常需要自行开发软件,所以对于可作为开发环境的操作系统需求非常的迫切!举例来说, 非常多技职体系的科技大学就很需要这方面的环境,好进行一些毕业专题的制作呢! 又例如工程界流体力学的数值模式运算、娱乐事业的特效功能处理、软件开发者的工作平台等等。 由于 Linux 的创造者本身就是个计算机性能癖,所以 Linux 有强大的运算能力;并且 Linux 具有支持度相当广泛的 GCC 编译软件, 因此 Linux 在这方面的优势可是相当明显的!
举个鸟哥自己的案例好了,鸟哥之前待的研究室有跑一套空气品质模式的数值仿真软件。 这套软件原本只能在 Sun 的 SPARC 机器上面跑。后来该软件转向 Linux 操作系统平台发展, 鸟哥也将自己实验室的数值模式程序由 Sun 的 Solaris 平台移植到 Linux 上面呢! 据美国环保署内部人员的测试,发现 Linux 平台的整体硬件费用不但比较便宜(x86 系统嘛!)而且速度还比较快呢!
另外,为了加强整体系统的性能,丛集计算机系统(Cluster)的平行运算能力在近年来一直被拿出来讨论[11]。 所谓的平行运算指的是“将原本的工作分成多份,然后交给多部主机去运算,最终再将结果收集起来”的一种方式。 由于通过高速网络使用到多部主机,将能够让原本需要很长运算时间的工作,大幅的降低等待的时间! 例如中央气象局的气象预报就很需要这样的系统来帮忙!而 Linux 操作系统则是这种架构下相当重要的一个环境平台呢!
Tips 由于服务器的 CPU 数量可以增加许多,而且也能够达到比较省电的功能,因此鸟哥最近更换了昆山科大资传系的模式运算服务器组, 通过 20 核心 40 超执行续的以及 12 核心 24 超执行续的两部系统,搭配 10G 网卡来处理模式的运行!用的是本书谈到的 CentOS Linux, 跑得模式是美国环保署公布,现行于世界最流行的 CMAQ 空品模式喔!
1.3.2 个人环境的使用
你知道你平时接触的电子用品中,哪些咚咚里面有 Linux 系统存在呢?其实相当的多呢!我们就来谈一谈吧!
- 桌面电脑:
所谓的桌面电脑,其实就是你我在办公室使用的计算机啦。一般我们称之为 Desktop 的系统。那么这个 Desktop 的系统平时都在做什么呢?大概都是这些工作吧:
- 上网浏览+实时通讯(Skype, FB, Google, Yahoo...);
- 文书处理;
- 网络接口之公文处理系统;
- 办公室软件(Office Software)处理数据;
- 收发电子邮件;
想进行这些计算机工作时,你的 Desktop 环境需要什么咚咚?很简单,“就是需要窗口”! 因为上网浏览、文书编排的所见即所得接口,以及电子公文系统等等, 如果没有窗口接口的辅助,那么将对使用者造成很大的困扰。而众所皆知的, Linux 早期都是由工程师所发展的,对于窗口接口并没有很需要,所以造成 Linux 不太友好的印象。
好在,为了要强化桌面电脑的使用率,Linux 与 X Window System 结合了! 要注意的是,X Window System 仅只是 Linux 上面的一套软件, 而不是核心喔!所以即使 X Window 挂了,对 Linux 也可能不会有直接的影响呢! 更多关于 X window system 的详细信息我们留待第二十三章再来介绍。
近年来在各大社群的团结合作之下,Linux 的窗口系统上面能够跑的软件实在是多的吓人!而且也能够应付的了企业的办公环境! 例如美观的 KDE 与 GNOME 窗口接口,搭配可相容微软 Office 的 OpenOffice / LibreOffice (www.openoffice.org/zh-cn/, zh-cn.libreoffice.org/) 等软件, 这些自由的办公室软件包含了文书处理、电子试算表、简报软件等等,功能齐全啊!然后配合功能强大速度又快的 Firefox 浏览器, 以及可下载信件的雷鸟(ThunderBird)软件(类似微软的 Outlook Express),还有可连上多种实时通讯的 Pidgin! Linux 能够做到企业所需要的各项功能啦!
Tips 鸟哥真的垂垂老已~前一阵子 (2014) 上课时,跟学生说:“各位啊!你们考取的证照也转一份给老师来备份嘛!用 emai 寄给鸟哥喔!” 结果有几个学生竟然举手说:“老师!我知道 email 啊!不过,从来没有用过 email 寄附件耶!所以才没有传给你啊!”哇!! 瞎密?“那你们怎么传送文件啊?用 FTP 喔?”鸟哥问,他说“没啊!就用 FB 或者是 Line 啊!或者 dropbox!真没用过 email 耶!”...时代不同了...
- 手持系统(PDA、手机):
自从 iphone4 在 2010 年面世之后,整个手机市场开始大搬风!智能手机市场将原本商务用的 PDA 市场整个吃掉!然后原本在 2010 年前后很热门的小笔记本也被平板电脑打趴了!在这个潮流下,Google 成立了开放手机联盟 (Open Handset Alliance),并且推出 Android 手机专用操作系统! 而 Android 其实就是 Linux 核心的一支,只是专门用来针对手机/平板这类的 ARM 机器所设计的 [12]!
2015 最新的 Android 系统 5.x 使用的就是 Linux kernel 3.4.x 版本,另外,调查中也显示,从 2013 年之后,Android 系统已经是全球最多人使用的手机系统。也就是说,现在手机市场的主流操作系统是 Linux 分支出来的 Android 喔! 那怎么能说 Linux 很少人用呢?哈哈!天天都在用耶各位!
Tips 如果你的手机是 Android 系统的话,请拿出来,然后点选“设置”--> “关于(手机)” --> “软件信息”,你就会看到 Android 版本,然后又点选“更多”, 这时你就会看到类似 3.4.10-xxx 的代号,那是什么?查一查上头提到的 Linux 版本,就知道那是啥鬼东西啰! ^_^
- 嵌入式系统:
在第零章当中我们谈到过硬件系统, 而要让硬件系统顺利的运行就得要撰写合适的操作系统才行。那硬件系统除了我们常看到的计算机之外, 其实家电产品、PDA、手机、数码相机以及其他微型的计算机配备也是硬件系统啦! 这些计算机配备也都是需要操作系统来控制的!而操作系统是直接嵌入于产品当中的,理论上你不应该会更动到这个操作系统, 所以就称为嵌入式系统啦!
包括路由器、防火墙、手机、IP 分享器、交换器、机器人控制芯片、家电用品的微计算机控制器等等,都可以是 Linux 操作系统喔! 酷学园内的 Hoyo 大大就曾经介绍过如何在嵌入式设备上面载入 Linux! 你桌面上用来备份的 NAS 说不定内部也是精简化过的 Linux 系统啊!
虽然嵌入式设备很多,大家也想要转而使用 Linux 操作系统,不过在台湾,这方面的人才还是太少了! 要玩嵌入式系统必须要很熟悉 Linux Kernel 与驱动程序的结合才行!这方面的学习可就不是那么简单喔! ^_^
1.3.3 云端运用
自从个人计算机的 CPU 内置的核心数越来越多,单一主机的能力太过强大,导致硬件资源经常闲置,这个现象让虚拟化技术得以快速发展! 而由于硬件资源大量集中化,然后行动办公室之类的需求越来越多,因此让办公数据集中于云程序中,让企业员工仅须通过端点设备连线到云去取用运算资源, 这样就变成无时无地都可以办公啦 (其实很惨...永远不得休息啊!真可怜~)!
这就是三国演义里面谈到的“天下大势,分久必合、合久必分”的名言啊! 从(1)早期的贵森森的大型主机分配数个终端机的集中运算机制,到 (2)2010 年前个人计算机运算能力增强后,大部分的运算都是在台式机或笔记本上自行达成, 再也不需要跑去大型主机取得运算资源了!到现在(3)由于行动设备的发达,产生的庞大数据需要集中处理,因而产生云端系统的需求!让信息/资源集中管理! 这不是分分合合的过程吗?^_^
- 云程序
许多公司都有将资源集中管理的打算,之前参与一场座谈会,有幸遇到阿里巴巴的架构师,鸟哥偷偷问他说,他们机房里面有多少计算机主机啊? 他说不多!差不多才 2 万部主机而已...鸟哥正在搞的可提供 200 个左右的虚拟机的系统,使用大约 7 部主机就觉得麻烦了,他们家至少有 2 万部耶! 这么多的设备底层使用的就是 Linux 操作系统来统一管理。
另外,除了公司自己内部的私有云之外,许多大型网际网络供应商 (ISP) 也提供了所谓的公有云来让企业用户或个人用户来使用 ISP 的虚拟化产品。 因此,如果公司内部缺乏专业管理维护人才,很有可能就将自家所需要的关键应用如 Web、Mail、系统开发环境等操作系统交由 ISP 代管, 自家公司仅须远端登陆该系统进行网站内容维护或程序开发而已。那这些虚拟化后的系统,也经常是 Linux 啊!因为跟上头企业环境利用提到的功能是相同的!
所以说云程序的底层就是 Linux ,而云程序搭建出来的虚拟机,内容也是 Linux 操作系统哩!用的越来越多啊!
Tips 所谓的“虚拟化”指的是:在一部实体主机上面仿真出多个逻辑上完全独立的硬件,这个假的虚拟出来的硬件主机,可以用来安装一部逻辑上完全独立的操作系统! 因此,通过虚拟化技术,你可以将一部实体主机安装多个同时运行的操作系统 (非多重开机),以达到将硬件资源完整利用的效果。 很多 ISP 就是通过贩售这个虚拟机的使用权来赚钱的喔!
- 端设备
既然运算资源都集中在云里面了,那我需要连线到云程序的设备应该可以越来越轻量吧?当然没错!所以智能手机才会这么热门啊! 很多时候你只要有智能手机或者是平板,连线到公司的云里面去,就可以开始办公了哩!
此外,还有更便宜的端点设备喔!那就是近年来很热门又流行的树莓派 (Raspberry Pi) 与香蕉派 (Banana Pi),这两个小东西售价都不到 50 美元, 有的甚至台币 1000 块有找!这个 Raspberry Pi 其实就是一部小型的计算机,只要加上 USB 键盘、鼠标与 HDMI 的屏幕,立刻就是可以让小朋友学习程序语言的环境! 如果加上通过网络去取得具有更强大运算资源的云端虚拟机,不就可以做任何事了吗?所以,端点设备理论上会越来越轻量化的!
Tips 鸟哥近几年来做的主要研究,就是通过一组没很贵的 server 系统达成打开多个虚拟机的环境,然后让学生可以在教室利用类似 banana pi 的设备来连线到服务器, 这时学生就可以通过网络来取得一套完整的操作系统,可以拿来上课、回家实作练习、上机考试等等!相当有趣!鸟哥称为虚拟计算机教室! 而 server 与 banana pi 的内部操作系统当然就是 Linux 啊!
1.4 Linux 该如何学习
1.4 Linux 该如何学习
为什么大家老是建议学习 Linux 最好能够先舍弃 X Window 的环境呢? 这是因为 X window 了不起也只是 Linux 内的“一套软件”而不是“Linux 核心”。 此外,目前发展出来的 X-Window 对于系统的管理上还是有无法掌握的地方,举个例子来说,如果 Linux 本身捉不到网卡的时候,请问如何以 X Window 来捉这个硬件并且驱动他呢?
还有,如果需要以 Tarball(源代码)的方式来安装软件并加以设置的时候,请以 X Window 来架设他!这可能吗?当然可能,但是这是在考验“X Window 开发商”的技术能力, 对于了解 Linux 架构与核心并没有多大的帮助的!所以说,如果只是想要“会使用 Linux”的角度来看, 那么确实使用 X Window 也就足够了,反正搞不定的话,花钱请专家来搞定即可;但是如果想要更深入 Linux 的话,那么命令行界面才是不二的学习方式!
以服务器或者是嵌入式系统的应用来说,X Window 是非必备的软件,因为服务器是要提供用户端来连线的, 并不是要让使用者直接在这部服务器前面按键盘或鼠标来操作的!所以图形接口当然就不是这么重要了! 更多的时候甚至大家会希望你不要启动 X window 在服务器主机上,这是因为 X Window 通常会吃掉很多系统资源的缘故!
再举个例子来说,假如你是个软件服务的工程师,你的客户人在台北,而你人在远方的台南。某一天客户来电说他的 Linux 服务器出了问题, 要你马上解决他,请问:要您亲自上台北去修理?还是他搬机器下来让你修理?或者是直接请他开个帐号给你进去设置即可? 想当然尔,就会选择开帐号给你进入设置即可啰!因为这是最简单而且迅速的方法!这个方法通常使用命令行会较为单纯, 使用图形接口则非常麻烦啦!所以啦!这时候就得要学学命令行来操作 Linux 比较好啦!
另外,在服务器的应用上,文件的安全性、人员帐号的管理、软件的安装/修改/设置、 登录文件的分析以及自动化工作调度与程序的撰写等等,都是需要学习的, 而且这些东西都还未涉及服务器软件呢!对吧!这些东西真的很重要,所以,建议你得要依据下面的介绍来学习才好。
Tips 这里是站在要让 Linux 成为自己的好用的工具 (服务器或开发软件的程序学习平台) 为出发点去介绍如何学习的喔!所以,不要以旧有的 Windows 角度来思考! 也不要说“你都只有碰过触摸式设备”的角度来思考!加油啰!
1.4.1 从头学习 Linux 基础
其实,不论学什么系统,“从头学起”是很重要的!还记得你刚刚接触微软的 Windows 都在干什么? 还不就是由文件资源管理器学起,然后慢慢的玩到控制台、玩到桌面管理, 然后还去学办公室软件,我想,你总该不会直接就跳过这一段学习的历程吧?那么 Linux 的学习其实也差不多,就是要从头慢慢的学起啦!不能够还不会走路之前就想要学飞了吧!^_^!
常常有些朋友会写信来问鸟哥一些问题,不过,信件中大多数的问题都是很基础的! 例如:“为什么我的使用者个人网页显示我没有权限进入?”、 “为什么我下达一个指令的时候,系统告诉我找不到该指令?”、 “我要如何限制使用者的权限”等等的问题,这些问题其实都不是很难的,只要了解了 Linux 的基础之后,应该就可以很轻易的解决掉这方面的问题呢! 所以请耐心的,慢慢的,将后面的所有章节内容都看完。自然你就知道如何解决了!
此外,网络基础与安全也很重要,例如 TCP/IP 的基础知识,网络路由的相关概念等等。 很多的朋友一开始问的问题就是“为什么我的邮件服务器主机无法收到信件?” 这种问题相当的困扰,因为发生的原因太多了,而朋友们常常一接触 Linux 就是希望 “建站!”根本没有想到要先了解一下 Linux 的基础!这是相当伤脑筋的! 尤其近来计算机怪客(Cracker)相当多,(真奇怪,闲闲没事干的朋友还真是不少....) ,一个不小心您的主机就被当成怪客跳板了! 甚至发生被警告的事件也层出不穷!这些都是没能好好的注意一下网络基础的原因呀!
所以,鸟哥希望大家能够更了解 Linux,好让他可以为你做更多的事情喔! 而且这些基础知识是学习更深入的技巧的必备条件呀!因此建议:
-
计算机概论与硬件相关知识: 因为既然想要走 Linux 这门路,信息相关的基础技能也不能没有啊! 所以先理解一下基础的硬件知识,不用一定要全懂啦!又不是真的要你去组计算机~^_^, 但是至少要“听过、有概念”即可;
-
先从 Linux 的安装与指令学起: 没有 Linux 怎么学习 Linux 呢?所以好好的安装起一套你需要的 Linux 吧!虽然说 Linux distributions 很多, 不过基本上架构都是大同小异的,差别在于接口的友好度与软件的选择不同罢了! 选择一套你喜欢的就好了,倒是没有哪一套特别好说~
-
Linux 操作系统的基础技能: 这些包含了“使用者、群组的概念”、“权限的观念”,“程序的定义”等等,尤其是权限的概念, 由于不同的权限设置会妨碍你的使用者的便利性,但是太过于便利又会导致入侵的可能! 所以这里需要了解一下你的系统呦!
-
务必学会 vi 文书编辑器: Linux 的文书编辑器多到会让你数到生气!不过,vi 却是强烈建议要先学习的! 这是因为 vi 会被很多软件所调用,加上所有的 Unix like 系统上面都有 vi,所以你一定要学会才好!
-
Shell 与 Shell Script 的学习: 其实鸟哥上面一直谈到的“命令行”说穿了就是一个名为 shell 的软件啦!既然要玩命令行,当然就是要会使用 shell 的意思。 但是 shell 上面的数据太多了,包括“正则表达式”、“管线命令”与“数据流重导向”等等,真的需要了解比较好呦! 此外,为了帮助你未来的管理服务器的便利性,shell scripts 也是挺重要的!要学要学!
-
一定要会软件管理员: 因为玩 Linux 常常会面临得要自己安装驱动程序或者是安装额外软件的时候,尤其是嵌入式设备或者是学术研究单位等。 这个时候 Tarball/RPM/DPKG/YUM/APT 等软件管理员的安装方式的了解,对你来说就重要到不行了!
-
网络基础的创建: 如果上面你都通过了,那么网络的基础就是下一阶段要接触的咚咚,这部份包含了“IP 概念”“路由概念”等等;
-
如果连网络基础都通过了,那么网站的架设对你来说,简直就是“太简单啦!”
在一些基础知识上,可能的话,当然得去书店找书来读啊! 如果您想要由网络上面阅读的话,那么这里推荐一下由 Netman 大哥评论员的 Study-Area 里面的基础文章,相当的实用!
- 计算机基础 (http://www.study-area.org/compu/compu.htm)
- 网络基础 (http://www.study-area.org/network/network.htm)
1.4.2 选择一本易读的工具书
正所谓这:“好的书本带你上天堂、坏的书本让你穷瞎忙...”一本好的工具书是需要的,不论是未来作为查询之用,还是在正确的学习方法上。 可惜的是,目前坊间的书大多强调速成的 Linux 教育,或者是强调 Linux 的网络功能, 却欠缺了大部分的 Linux 基础管理~鸟哥在这里还是要再次的强调,Linux 的学习历程并不容易, 他需要比较长的时间来适应、学习与熟悉,但是只要能够学会这些简单的技巧, 这些技巧却可以帮助您在各个不同的 OS 之间遨游!
您既然看到这里了,应该是已经取得了鸟哥的 Linux 私房菜 -- 基础学习篇了吧! ^_^ 。 希望这本书可以帮助您缩短基础学习的历程,也希望能够带给您一个有效的学习观念! 而在这本书看完之后,或许还可以参考一下 Netman 推荐的相关网络书籍:
不过,要强调的是,每个人的阅读习惯都不太一样,所以,除了大家推荐的书籍之外, 您必须要亲眼看过该本书籍,确定您可以吸收的了书上的内容,再下去购买喔!
Tips 其实鸟哥买科技类书籍比较喜欢买基础书耶,因为基础学好了,其他的部份大概找个 keyword ,再 google 一下,一大堆数据就可以让你去分析判断了! 你会说,既然如此,那基础书籍内的项目不是 google 也是一大堆?不要忘记了,“最开始你是要用什么关键字去 google 啊?”! 所以,阅读基础书籍的重点,就是让自己能够掌握住那些“ keyword ”啰!加油!
1.4.3 实作再实作
要增加自己的体力,就是只有运动;要增加自己的知识,就只有读书;当然,要增加自己对于 Linux 的认识, 大概就只有实作经验了!所以,赶快找一部计算机,赶快安装一个 Linux distribution,然后快点进入 Linux 的世界里面晃一晃! 相信对于你自己的 Linux 能力必然大有斩获!除了自己的实作经验之外,也可以参考网络上一些善心人士整理的实作经验分享喔! 例如最有名的 Study-Area(www.study-area.org)等网站。
此外,人脑不像计算机的硬盘一样,除非硬盘坏掉了或者是数据被你抹掉了, 否则储存的数据将永远而且立刻的记忆在硬盘中!在人类记忆的曲线中, 你必须要“不断的重复练习”才会将一件事情记得比较熟!同样的,学习 Linux 也一样, 如果你无法经常摸索的话,那么,抱歉的是,学了后面的, 前面的忘光光!学了等于没学,这也是为什么鸟哥当初要写“鸟哥的私房菜”这个网站的主要原因, 因为,鸟哥的忘性似乎比一般人还要好~~呵呵!所以,除了要实作之外,还得要常摸!才会熟悉 Linux 而且不会怕他呢!
Tips 鸟哥上课时,常常有学生问到:“老师,到底要听过你的课几次之后,才能学的会?”鸟哥的标准答案是:“你永远学不会!” 因为你是用“听”的,没有动手做,那么永远不会知道“经验”两个字怎么写!很多时候计算机/网络都会有一些莫名其妙的突发状况, 没有实际碰触过,怎么可能会理解呢?所以“永远是不可能听会的!”为啥要实验?因为实验过后你才会有经验来记下来? 否则实验结果课本都有啊!不是背一背就好了,干麻实验呢?浪费钱吗? ^_^
1.4.4 发生问题怎么处理啊?建议流程是这样...
我们是“人”不是“神”,所以在学习的过程中发生问题是很常见的啦!重点是,我们该如何处理在自身所发生的 Linux 问题呢? 在这里鸟哥的建议是这样的流程:
- 在自己的主机/网络数据库上查询 How-To 或 FAQ
其实,在 Linux 主机及网络上面已经有相当多的 FAQ 整理出来了!所以,当你发生任何问题的时候,除了自己检查, 或者到上述的实作网站上面查询一下是否有设置错误的问题之外,最重要的当然就是到各大 FAQ 的网站上查询啰! 以下列出一些有用的 FAQ 与 How-To 网站给您参考一下:
- Linux 自己的文件数据: /usr/share/doc (在你的 Linux 系统中)
- CLDP 中文文件计划 http://www.linux.org.tw/CLDP/
- The Linux Documentation Project:http://www.tldp.org/
上面比较有趣的是那个 TLDP(The Linux Documentation Project), 他几乎列出了所有 Linux 上面可以看到的文献数据,各种 How-To 的作法等等,虽然是英文的,不过,很有参考价值!
除了这些基本的 FAQ 之外,其实,还有更重要的问题查询方法,那就是利用酷狗(Google)帮您去搜寻答案呢! 在鸟哥学习 Linux 的过程中,如果有什么奇怪的问题发生时,第一个想到的, 就是去www.google.com.tw搜寻是否有相关的议题。 举例来说,我想要找出 Linux 下面的 NAT,只要在上述的网站内,输入 Linux 跟 NAT, 立刻就有一堆文献跑出来了!真的相当的优秀好用喔!您也可以通过酷狗来找鸟哥网站上的数据呢!
-
Google:
www.google.com.tw -
注意讯息输出,自行解决疑难杂症:
一般而言,Linux 在下达指令的过程当中,或者是 log file 里头就可以自己查得错误信息了,举个例子来说,当你下达:
[root@centos ~]# ls -l /vbird
由于系统并没有 /vbird 这个目录,所以会在屏幕前面显示:
ls: /vbird: No such file or directory
这个错误讯息够明确了吧!系统很完整的告诉您“查无该数据”! 呵呵!所以啰,请注意,发生错误的时候,请先自行以屏幕前面的信息来进行 debug(除错)的动作,然后,如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录文件),这样可以几乎解决大部分的问题了!
- 搜寻过后,注意网络礼节,讨论区大胆的发言吧:
一般来说,如果发生错误现象,一定会有一些讯息对吧!那么当您要请教别人之前,就得要将这些讯息整理整理, 否则网络上人家也无法告诉您解决的方法啊!这一点很重要的喔!
万一真的经过了自己的查询,却找不到相关的信息,那么就发问吧!不过,在发问之前建议您最好先看一下“ 提问的智慧 http://phorum.vbird.org/viewtopic.php?t=96” 这一篇讨论!然后,你可以到下面几个讨论区发问看看:
不过,基本上去每一个讨论区回答问题的熟手,其实都差不多是那几个, 所以,您的问题“不要重复发表在各个主要的讨论区!” 举例来说,鸟园与酷学园讨论区上的朋友重复性很高,如果您两边都发问, 可能会得到反效果,因为大家都觉得,另外一边已经回答您的问题了呢~~
- Netman 大大给的建议:
此外,Netman 兄提供的一些学习的基本方针,提供给大家参考:
- 在 Windows 里面,程序有问题时,如果可能的话先将所有其它程序保存并结束,然后尝试按救命三键 (Ctrl+Alt+Delete),将有问题的程序(不要选错了程序哦)“结束工作”,看看能不能恢复系统。不要动不动就直接关机或 reset。
- 有系统地设计文件目录,不要随便到处保存盘案以至以后不知道放哪里了, 或找到文件也不知道为何物。
- 养成一个做记录的习惯。尤其是发现问题的时候, 把错误信息和引发状况以及解决方法记录清楚,同时最后归类及定期整理。别以为您还年轻,等你再弄多几年计算机了, 您将会非常庆幸您有此一习惯。
- 如果看在网络上看到任何好文章,可以为自己留一份 copy,同时定好题目,归类存盘。(鸟哥需要注意知识产权!)
- 作为一个使用者,人要迁就机器;做为一个开发者,要机器迁就人。
- 学写 script 的确没设置 server 那么好玩,不过以我自己的感觉是:关键是会得“偷”, 偷了会得改,改了会得变,变则通矣。
- 在 Windows 里面,设置不好设备,您可以骂它;在 Linux 里面,如果设置好设备了,您得要感激它﹗
1.4.5 鸟哥的建议(重点在 solution 的学习)
除了上面的学习建议之外,还有其他的建议吗?确实是有的!其实, 无论作什么事情,对人类而言,两个重要的因素是造成我们学习的原动力:
- 成就感
- 兴趣
很多人问过我,鸟哥是怎么学习 Linux 的?由上面鸟哥的悲惨 Linux 学习之路你会发现, 原来我本人对于计算机就蛮有兴趣的,加上工作的需要,而鸟哥又从中得到了相当多的成就感, 所以啰,就一发不可收十的爱上 Linux 啰!因此,鸟哥个人认为,学习 Linux 如果玩不出兴趣, 他对你也不是什么重要的生财工具,那么就不要再玩下去了! 因为很累人ㄋㄟ~而如果你真的想要玩这么一套优良的操作系统, 除了前面提到的一些建议之外,说真的,得要培养出兴趣与成就感才行! 那么如何培养出兴趣与成就感呢?可能有几个方向可以提供给你参考:
-
创建兴趣: Linux 上面可以玩的东西真的太多了,你可以选择一个有趣的课题来深入的玩一玩!不论是 Shell 还是图形接口等等, 只要能够玩出兴趣,那么再怎么苦你都会不觉得喔!
-
成就感: 成就感是怎么来的?说实在话,就是“被认同”来的!怎么被认同呢?写心得分享啊!当你写了心得分享,并且公告在 BBS 上面,自然有朋友会到你的网页去瞧一瞧,当大家觉得你的网页内容很棒的时候, 哈哈!你肯定会加油继续的分享下去而无法自拔的!那就是我啦...... ^_^!
就鸟哥的经验来说,你“学会一样东西”与 “要教人家会一样东西”思考的纹路是不太一样的! 学会一样东西可能学一学会了就算了!但是要“教会”别人,那可就不是闹着玩的! 得要思考相当多的理论性与实务性方面的咚咚,这个时候,你所能学到的东西就更深入了! 鸟哥常常说,我这个网站对我在 Linux 的了解上面真的的帮助很大!
-
协助回答问题: 另一个创造成就感与满足感的方法就是“助人为快乐之本!”当你在 BBS 上面告诉一些新手,回答他们的问题,你可以获得的可能只是一句“谢谢!感恩呐!” 但是那句话真的会让人很有快乐的气氛!很多的老手都是因为有这样的满足感, 才会不断的协助新来的朋友的呢!此外,回答别人问题的时候,就如同上面的说明一般, 你会更深入的去了解每个项目,哈哈!又多学会了好多东西呢!
-
参与讨论: 参与大家的技术讨论一直是一件提升自己能力的快速道路!因为有这些技术讨论, 你提出了意见,不论讨论的结果你的意见是对是错,对你而言,都是一次次的知识成长!这很重要喔! 目前台湾地区办活动的能力是数一数二的 Linux 社群“酷学园(Study Area, SA)”,每个月不定期的在北/中/南举办自由软件相关活动, 有兴趣的朋友可以看看:
phorum.study-area.org/index.php/board,22.0.html
除了这些基本的初学者建议外,其实,对于未来的学习,这里建议大家要“眼光看远!”一般来说,公司行号会发生问题时, 他们绝不会只要求各位“单独解决一部主机的问题”而已,他们需要的是整体环境的总体解决“Total Solution”。 而我们目前学习的 Linux 其实仅是在一部主机上面进行各项设置而已, 还没有到达解决整体公司所有问题的状态。当然啦,得要先学会 Linux 相关技巧后, 才有办法将这些技巧用之于其他的 solution 上面!
所以,大家在学习 Linux 的时候,千万不要有“门户之见”,认为 MS 的东西就比较不好~ 否则,未来在职场上,竞争力会比人家弱的!有办法的话,多接触,不排斥任何学习的机会!都会带给自己很多的成长! 而且要谨记:“不同的环境下,解决问题的方法有很多种,只要行的通,就是好方法!”
Tips 另外,不要再说没兴趣了!没有花时间去了解一下,不要跟人家说你没兴趣!而且,兴趣也是靠培养来的!除了某些特殊人物之外, 没有花时间趣培养兴趣,怎么可能会有兴趣!?
1.5 重点回顾
1.5 重点回顾
- 操作系统(Operation System)主要在管理与驱动硬件,因此必须要能够管理内存、管理设备、 负责行程管理以及系统调用等等。因此,只要能够让硬件准备妥当(Ready)的情况, 就是一个阳春的操作系统了。
- Unix 的前身是由贝尔实验室(Bell lab.)的 Ken Thompson 利用组合语言写成的, 后来在 1971-1973 年间由 Dennis Ritchie 以 C 程序语言进行改写,才称为 Unix。
- 1977 年由 Bill Joy 释出 BSD (Berkeley Software Distribution),这些称为 Unix-like 的操作系统。
- 1984 年由 Andrew Tanenbaum 开始制作 Minix 操作系统,该系统可以提供源代码以及软件;
- 1984 年由 Richard Stallman 提倡 GNU 计划,倡导自由软件(Free software), 强调其软件可以“自由的取得、复制、修改与再发行”,并规范出 GPL 授权模式, 任何 GPL(General Public License)软件均不可单纯仅贩卖其软件,也不可修改软件授权。
- 1991 年由芬兰人 Linus Torvalds 开发出 Linux 操作系统。简而言之,Linux 成功的地方主要在于: Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。
- 符合 Open source 理念的授权相当多,比较知名的如 Apache / BSD / GPL / MIT 等。
- Linux 本身就是个最阳春的操作系统,其开发网站设立在
www.kernel.org,我们亦称 Linux 操作系统最底层的数据为“核心(Kernel)”。 - 从 Linux kernel 3.0 开始,已经舍弃奇数、偶数的核心版本规划,新的规划使用主线版本 (MainLine) 为依据, 并提供长期支持版本 (longterm) 来加强某些功能的持续维护。
- Linux distributions 的组成含有:“Linux Kernel + Free Software + Documentations(Tools) + 可完整安装的程序”所制成的一套完整的系统。
- 常见的 Linux distributions 分类有“商业、社群”分类法,或“RPM、DPKG”分类法
- 学习 Linux 最好从头由基础开始学习,找到一本适合自己的书籍,加强实作才能学会
1.6 本章习题
1.6 本章习题
(要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 实作题部分:
-
请上网找出目前 Linux 核心的最新稳定版与发展中版本的版本号码,请注明查询的日期与版本的对应。
-
请上网找出 Linux 的吉祥物企鹅的名字,以及最原始的图像文件画面。(提示:请前往
www.linux.org查阅) -
请上网找出 Andriod 与 Linux 核心版本间的关系。(提示:请前往
zh.wikipedia.org/wiki/Android查阅)
简答题部分:
- 你在你的主机上面安装了一张网卡,但是开机之后,系统却无法使用,你确定网卡是好的,那么可能的问题出在哪里?该如何解决?因为所有的硬件都没有问题,所以,可能出问题的地方在于系统的核心(kernel) 不支持这张网卡。解决的方法,(1)到网卡的开发商网站,(2)下载支持你主机操作系统的驱动程序, (3)安装网卡驱动程序后,就可以使用了。
- 一个操作系统至少要能够完整的控制整个硬件,请问,操作系统应该要控制硬件的哪些单元?根据硬件的运行,以及数据在主机上面的运算情况与写入/读取情况,我们知道至少要能够控制: (1)input/output control, (2)device control, (3)process management, (4)file management. 等等!
- 我在 Windows 上面玩的游戏,可不可以拿到 Linux 去玩?当然不行!因为游戏也是一个应用程序 (application),他必须要使用到核心所提供的工具来开发他的游戏, 所以这个游戏是不可在不同的平台间运行的。除非这个游戏已经进行了移植。
- Linux 本身仅是一个核心与相关的核心工具而已,不过,他已经可以驱动所有的硬件, 所以,可以算是一个很阳春的操作系统了。经过其他应用程序的开发之后,被整合成为 Linux distribitions。请问众多的 distributions 之间,有何异同?相同:(1)同样使用
www.kernel.org所释出的核心; (2)支持同样的标准,如 FHS、LSB 等; (3)使用几乎相同的自由软件 (例如 GNU 里面的 gcc/glibc/vi/apache/bind/sendmail... ); (4)几乎相同的操作接口 (例如均使用 bash/KDE/GNOME 等等)。 不同:使用的 kernel 与各软件的版本可能会不同;各开发商加入的应用工具不同,使用的套件管理模式不同(dpkg 与 RPM) - Unix 是谁写出来的? GNU 计划是谁发起的?Unix 是 Ken Thompson 写的,1973 年再由 Dennis Ritchie 以 C 语言改写成功。 至于 GNU 与 FSF 则是 Richard Stallman 发起的。
- GNU 的全名为何?他主要由那个基金会支持?GNU 是 GNU is Not Unix 的简写,是个无穷循环! 另外,这个计划是由自由软件基金会 (Free Software Foundation, FSF) 所支持的! 两者都是由 Stallman 先生所发起的!
- 何谓多用户 ( Multi-user ) 多任务 ( Multitask )?Multiuser 指的是 Linux 允许多人同时连上主机之外,每个使用者皆有其各人的使用环境,并且可以同时使用系统的资源! Multitask 指的是多任务环境,在 Linux 系统下, CPU 与其他例如网络资源可以同时进行多项工作, Linux 最大的特色之一即在于其多任务时,资源分配较为平均!
- 简单说明 GNU General Public License ( GPL ) 与 Open Source 的精神:1. GPL 的授权之软件,乃为自由软件(Free software),任何人皆可拥有他; 2. 开发 GPL 的团体(或商业企业)可以经由该软件的服务来取得服务的费用; 3. 经过 GPL 授权的软件,其属于 Open source 的情况,所以应该公布其源代码; 4. 任何人皆可修改经由 GPL 授权过的软件,使符合自己的需求; 5. 经过修改过后 Open source 应该回馈给 Linux 社群。
- 什么是 POSIX ?为何说 Linux 使用 POSIX 对于发展有很好的影响?POSIX 是一种标准规范,主要针对在 Unix 操作系统上面跑的程序来进行规范。 若你的操作系统符合 POSIX ,则符合 POSIX 的程序就可以在你的操作系统上面运行。 Linux 由于支持 POSIX ,因此很多 Unix 上的程序可以直接在 Linux 上运行, 因此程序的移植相当简易!也让大家容易转换平台,提升 Linux 的使用率。
- 简单说明 Linux 成功的因素?1. 借由 Minix 操作系统开发的 Unix like ,没有版权的纠纷; 2. 借助于 GNU 计划所提供的各项工具软件, gcc/bash 等; 3. 借由 Internet 广为流传; 4. 借由支持 POSIX 标准,让核心能够适合所有软件的开发; 5. 托瓦兹强调务实,虚拟团队的自然形成!
1.7 参考资料与延伸阅读
1.7 参考资料与延伸阅读
- [1]Multics 计划网站:
www.multicians.org/。 - [2]Ken Thompson 的 wiki 简介:
en.wikipedia.org/wiki/Ken_Thompson - [3]Dennis Ritchie 的 wiki 简介:
en.wikipedia.org/wiki/Dennis_Ritchie - [4]Bill joy 的 wiki 简介:
en.wikipedia.org/wiki/Bill_Joy - [5]Andrew Tanenbaum 的 wiki 简介:
en.wikipedia.org/wiki/Andrew_S._Tanenbaum - [6]Richard Stallman 的个人网站:
www.stallman.org/ - [7]GNU 计划的官网:
www.gnu.org/ - [8]开放源代码促进会针对 open source 的解释:
opensource.org/definition以及 Open source 与 free software 的差异:opensource.org/faq#free-software - [9]开放源代码促进会针对 Open source 授权的汇整介绍:
opensource.org/licenses - [10]Linus Torvalds 在 Wiki 的介绍:
en.wikipedia.org/wiki/Linus_Torvalds - [11]Cluster Computer 在 Wiki 的介绍:
en.wikipedia.org/wiki/Computer_cluster - [12]Android 在 Wiki 的介绍:
zh.wikipedia.org/wiki/Android - 洪朝贵老师的 GNU/FSF 介绍:
people.ofset.org/~ckhung/a/c_83.php - 葛林穆迪着,杜默译,“Linux 传奇”,时报文化出版企业。 书本介绍:
findbook.tw/book/9789571333632/basic - XFree86 的网站:
www.xfree86.org/ - POSIX 的相关说明: 维基百科:
en.wikipedia.org/wiki/POSIXIEEE POSIX 标准:standards.ieee.org/regauth/posix/
2002/06/25:第一次完成 2003/01/26:重新修订,加入一些历史事件、重新编排与加入 FAQ 2003/02/28:加入百资以及 distrowatch 两个网站的推荐! 2005/05/31:旧有的数据放于 此处 2005/06/02:做了大幅度的改版,很多数据参考了网络农夫及 Linux 传奇等书籍,建议大家要多看看网络农夫的大作喔! 2005/06/08:将原本的 binary / compiler / Emacs 的地方再说明一下!比较容易了解那是什么!顺便加入习题 2005/07/21:网络农夫的网站结束了~真伤心~只好提供网络农夫之前发表的文章链接了! 2005/08/03:感谢网友 babab 的来信告知,修订了国家高速网络中心网址:www.nchc.org.tw 2005/10/24:经由网友的回报,洪朝贵老师已经调职到树德大学,因此整个链接内容已作修订。 2006/05/31:加入了重点回顾的项目啦! 2006/06/06:感谢网友 "Warren Hsieh" 兄的提醒,由于 MAC 在 2006 年后使用 Intel 的 x86 硬件架构,故 Windows 是可能可以在上面安装的! 2008/07/23:因为加入了计算机概论的章节,所以本文做了挺大幅度的修改!原本针对 FC4 的版本请点选这里。 2007/07/26:将整份文章重新校阅过,修订一些文辞,也将格式调整为适合的 XHTML 了! 2007/07/29:将主、次核心版本加强说明! 2009/08/05:移除最后一小节的标准,将 FHS 与 LSB 向前挪到 distribution 解释中。拿掉服务器、工作站、终端机的说明。 2012/02/20:更新了 Linux 在台湾的相关链接信息 2015/04/17:旧的基于 CentOS 5 的数据放置在这里喔! 2015/04/23:同时整合了Linux 如何学习这一章的内容!减少一些不必要的碎碎念




