## 1.2 Torvalds的Linux發展
我們前面一節當中,提到了Unix的歷史,也提到了Linux是由Torvalds這個芬蘭人所發明的。那么為何托瓦茲可以發明Linux呢? 憑空想像而來的?還是有什么淵源?這里我們就來談一談啰!
### 1.2.1 與Minix之間
[Linus Torvalds](http://en.wikipedia.org/wiki/Linus_Torvalds)(托瓦茲, 1969年出生, [[10]](#ps10))的外祖父是赫爾辛基大學的統計學家, 他的外祖父為了讓自己的小孫子能夠學點東西,所以從小就將托瓦茲帶到身邊來管理一些微計算機。 在這個時期,托瓦茲接觸了組合語言(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...... 他知道,他成功了! ^_^
圖1.2.1、386計算機的多任務測試
**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](http://en.wikipedia.org/wiki/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便成立的核心網站: [http://www.kernel.org](http://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 ”來查閱核心版本,然后對照下列鏈接來了解其對應值喔!
* [https://www.kernel.org/releases.html](https://www.kernel.org/releases.html)
* 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發布商套件等。
圖1.2.2、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都是[http://www.kernel.org](http://www.kernel.org/)所釋出的,而他們所選擇的軟件,幾乎都是目前很知名的軟件,重復性相當的高, 例如網頁服務器的Apache,電子郵件服務器的Postfix/sendmail,文件服務器的Samba等等。
此外,為了讓所有的Linux distributions開發不致于差異太大,且讓這些開發商在開發的時候有所依據,還有Linux Standard Base (LSB)等標準來規范開發者,以及目錄架構的File system Hierarchy Standard (FHS)標準規范! 唯一差別的,可能就是該開發者自家所開發出來的管理工具,以及套件管理的模式吧! 所以說,基本上,每個Linux distributions除了架構的嚴謹度與選擇的套件內容外, 其實差異并不太大啦! ^_^ 。大家可以選擇自己喜好的distribution來安裝即可!
* [FHS: http://www.pathname.com/fhs/](http://www.pathname.com/fhs/)
* [LSB: http://www.linuxbase.org/](http://www.linuxbase.org/)
事實上鳥哥認為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](http://www.redhat.com/)
* [SuSE: https://www.suse.com](https://www.suse.com/)
* [Fedora: https://getfedora.org/](https://getfedora.org/)
* [CentOS: http://www.centos.org/](http://www.centos.org/)
* [Debian: http://www.debian.org/](http://www.debian.org/)
* [Ubuntu: http://www.ubuntu.com/](http://www.ubuntu.com/)
* [Gentoo: http://www.gentoo.org/](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呢! 另外,目前正在開發中的還有臺南縣臥龍小三等老師們發起的眾多自由軟件計劃, 真是造福很多的朋友啊!
* [自由軟件技術交流網: http://freesf.tw/](http://freesf.tw/)
* [B2D: http://b2d-linux.com/](http://b2d-linux.com/)
此外,如果只想看看Linux的話,還可以選擇所謂的可光盤開機進入Linux的Live CD版本, 亦即是KNOPPIX這個Linux distributions呢!臺灣也有阿里巴巴兄維護的中文Live CD喔!
* [http://www.knoppix.net/](http://www.knoppix.net/)
* [洪老師解釋 KNOPPIX: http://people.ofset.org/~ckhung/b/sa/knoppix.php](http://people.ofset.org/~ckhung/b/sa/knoppix.php)

**Tips** 對于沒有額外的硬盤或者是沒有額外的主機的朋友來說,KNOPPIX這個可以利用光盤開機而進入Linux操作系統的Live CD 真的是一個不錯的選擇!你只要下載了KNOPPIX的鏡像文件,然后將他燒錄成為CD, 放入你主機的光驅,并在BIOS內設置光盤為第一個開機選項,就可以使用Linux系統了呢!
如果你還想要知道更多的Linux distributions的下載與使用信息,可以參考:
* [http://distrowatch.com/](http://distrowatch.com/)
* 選擇適合你的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了!也很容易學習喔!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀