- Linux操作系統基礎案例教程
- 旭日 嚴作明 李占平
- 6300字
- 2019-09-30 13:25:28
2.1 Linux是什么
通常來說,我們所說的Linux由兩部分組成,一部分是內核,也就是系統的運行核心,另一部分是建立在內核之上的各種系統和應用軟件,這兩部分組成了我們日常所說的Linux系統。我們日常所說的Linux系統往往是在Linux這個詞前面再帶上一兩個詞,比如:Red Hat Linux、Ubuntu Linux、中標普華Linux。這些都是發行Linux產品的廠商的名稱,它們按照自己的市場定位、技術等發布一系列的Linux,我們常說的Red Hat Linux 9.0、RHEL 4這里的“9.0”和“4”指的是廠商為自己的Linux發布版本指定的版本號,而不是Linux的內核版本。那么什么是Linux內核呢?內核(Linux Kernel)是一組管理核心硬件資源的程序,它負責管理所有的硬件資源,是一個提供硬件抽象層、磁盤及文件系統控制、多任務等功能的系統軟件。一個內核不是一套完整的操作系統。一套基于Linux內核的完整操作系統稱為Linux操作系統。Linux內核源自UNIX的操作系統內核,因此它基本上可以兼容絕大部分UNIX標準(UNIX的標準有很多,比如POSIX、Sys V和BSD)。Linux支持多用戶、多進程、多線程,可以運行在x86 PC、Sun Sparc、DEC Alpha、PowerPC、MIPS等多種硬件平臺上,是目前支持硬件平臺最多的內核。
建立在內核之上的各種軟件,則由世界各地的人們自愿提供,這其中,最主要和最核心的部分,由FSF(Free Software Foundation,自由軟件基金會)主要贊助的GNU組織提供,GNU是“GNU’s Not UNIX”的縮寫。
GNU計劃是由Richard Stallman在1983年9月27日公開發起的。它的目標是創建一套完全自由的操作系統。這一計劃就是要“重現當年軟件界合作互助的團結精神”。為保證GNU軟件可以自由地“使用、復制、修改和發布”,所有GNU軟件都有一份在禁止其他人添加任何限制的情況下授權所有權利給任何人的協議條款,GNU通用公共許可證(GNU General Public License,GPL)。1985年Richard Stallman又創立了自由軟件基金會(Free Software Foundation)來為GNU計劃提供技術、法律以及財政支持。
GNU旗下的軟件很多,著名的gcc(GNU的C編譯器)、g++(GNU的C++編譯器)、gjj(GNU的Java編譯器)、編譯工具make、管理外殼Bash、文本編輯器Emacs、啟動管理器grub、圖形庫GTK+等,包括Linux日常必備的工具cp、ls、mv、tar、gzip、awk、sed、grep、dd等等,詳細的軟件列表可以從GNU網站(http://ftp.gnu.org/)或FSF自由軟件基金會網站(http://directory.fsf.org/GNU/)得到。關于GNU的更多信息請參閱2.1.2節。
2.1.1 Linux的歷史
20世紀90年代初期,計算機科學迅猛發展,信息技術開始滲透到各個行業。當時的計算市場被劃分為了兩個部分,一部分是以平民大眾用戶為主的低端市場,一部分是以商業計算、企業核心計算為主的高端市場。
在20世紀70年代末,IBM正在計劃進入個人計算機市場,并在1981年正式推出了IBM個人計算機。IBM需要為自己的產品查找合適的、基于英特爾x86系列處理器的操作系統。IBM找到了微軟,據稱微軟在手上沒有任何籌碼時即提出DOS一詞。而微軟則又在未告知自己正在與IBM談判的情況下,找到了西雅圖計算機公司,以5萬美元的價格向該公司購買他們所開發的操作系統。微軟將該軟件更名為PC-DOS,再授權IBM使用該操作系統。微軟還與其他計算機生產商談判,將經過更改后的MS-DOS系統安裝到每一臺新計算機上。(當時蘋果計算機技術先進,但蘋果公司不肯開放自己的技術和體系架構,錯過了占領大眾市場的唯一機會)。
高端市場則是UNIX系統的天下,UNIX操作系統通常由硬件廠商自己開發,而且基本上只能運行在自己的硬件設備上,或者是只有運行在自己硬件設備上才能獲得最佳的性能,例如IBM公司的AIX系列UNIX操作系統只運行在IBM的RS/6000系列機器上,Sun公司的Solaris系列UNIX操作系統只能運行在自己的Sparc體系計算機上,HP公司的HP-UX系列UNIX操作系統同樣只運行在HP 9000系列計算機上,而這種結合了硬件和操作系統、完整的系統集成解決方案往往會以天價銷售給企業,其運行、維護的價格也是高得離譜,因此,這種系統通常只提供給大型企業做核心運算,一般人根本不可能接觸到這些UNIX,更別說使用它們了。
但是,隨著低端IBM PC的發展,特別是Intel x86芯片的性能越來越好,DOS這么簡單的一個單機操作系統已經不能滿足大眾市場上的需求,而UNIX又高不可攀,這時,出現了一個開放自己源代碼的操作系統——Minix。Minix由Andrew S.Tanenbaum教授完全自主開發,它存在的目的并不是面向市場銷售,而是面向教學,是這位教授為了便于學生掌握操作系統原理而開發的操作系統(可以說,它是一個為了實現而實現的操作系統),而且,最重要的是,Minix可以運行在當時已經在大眾市場逐漸普及的Intel 80x86處理器上,任何人,只要擁有一臺PC,就能自己研究和開發操作系統,這大大降低了部署和學習操作系統的門檻。
用現在的眼光來看,Minix可能并不強大,畢竟它存在的目的首先就是為了演示操作系統原理,而且它大約只有12000行代碼,但這已經足以吸引很多愛好者了,越來越多的學校和學生開始以Minix為基礎,學習操作系統,這其中,包括了一個叫Linus Torvalds的芬蘭學生。他的目的是想設計一個代替Minix的操作系統,這個操作系統可用于386、486或奔騰處理器的個人計算機上,并且具有UNIX操作系統的全部功能,因而開始了Linux雛形的設計。
1991年9月中旬,Linux 0.01版正式面世,并且被放到了網上。它立即引起了人們的注意。源代碼被下載、測試、修改,最終反饋給Linus。幾周以后,Linux 0.03版發布了。12月份,0.10版發布了。這時的Linux還顯得很簡陋。它只能支持AT硬盤,而且不用登錄(啟動就進入bash)。0.11版有了不少改進,可以支持多國語言鍵盤、軟驅、VGA、EGA、Hercules等等。Linux的版本號從0.12直接上升到了0.95、0.96……不久,Linux的源代碼就通過在芬蘭和其他一些地方的FTP站點傳遍了全世界。
Linux內核越來越強大,內核集成了所有的基本資源管理、調度和作業功能,這種架構被稱之為整體內核。從Linux誕生開始,其整體內核架構就一直被爭論不休,事實上,關于整體內核和微內核的論戰,從這兩種體系出現就沒有停止過。最先抨擊Linux這種整體內核架構的,正是Minix的作者,Andrew S.Tanenbaum教授,他如此評價Linux和Linus:“我還是堅持我的觀點,在1991年還設計這樣一個整體架構的內核是個根本性的錯誤。你該慶幸他不是我的學生。這么個設計,在我這兒得不了高分”。好在,Linus和大家并沒有氣餒,雖然Linus因此受到了打擊,怎么知道他因此受到打擊了呢?因為Linus后來承認說,這是他關于開發Linux所得到的最壞評價。Tanenbaum是當時的知名教授,他說的話自然很有分量。但這次面對Linux,他的話沒能奏效,因為Linus不是個輕易服輸的人。
隨著越來越多的人加入開發Linux的隊伍中來,Linux已經逐步成熟和穩定。Linux在GPL許可下發布,這樣,任何人都能自由獲得Linux的源代碼,并進行復制、學習和修改,甚至發布自己的新版本。終于,軟件廠商開始關注Linux,他們對Linux進行了很多改進,在其上編譯并配置好各種軟件,把這些整合好的軟件打包成為一個整體銷售。與其他操作系統或軟件產品不同的是,Linux軟件廠商所銷售的并不是Linux本身,而是基于Linux的軟件服務,服務是個很廣泛的范疇,例如,把各種軟件集成到一個系統中,保證它們都能正常運行,這就是一種服務,有人拿到軟件不會用,于是去咨詢專家如何使用,這也是一種服務。
這個時期,出現了很多專門的Linux廠商,其都推出了各自的Linux發行版,所謂Linux發行版,是指使用Linux內核和GNU軟件整合到一起的一套完整的操作系統,對于普通用戶來說,把所有這些軟件整合到一起,不僅難度非常大,而且會消耗過多的時間和資源,因此,購買整合后的Linux發行版是一個很好的選擇(當然你也可以選擇自己做,比如使用LFS,Linux From Scratch,一種完全從源代碼開始,編譯所有軟件的方式)。如前面所說,按照GPL協議,人們有權力出售那些遵循GPL協議的軟件并獲利,只要這種行為本身也遵循GPL協議(即出售的軟件必須同時提供其源代碼并告知買方其擁有的權利)。
早期著名發行版有Slackware,Redhat,SuSe(已被Novell收購),Mandrake(已改名為Mandriva)、TurboLinux,OpenLinux等,當時這些發行版主要依靠軟盤、CD、DVD進行傳播,后來隨著Internet帶寬和速度不斷增強,直接通過網絡傳播成為可能,一批新興的Linux發行版開始嶄露頭角,它們不依靠傳統的宣傳和傳播渠道,完全依賴于Internet作為平臺,通過下載鏡像、直接網絡安裝等方式進行傳播,比如Debian、Gentoo、LFS等。
隨著Linux的迅速發展,Linux上的軟件也開始得到迅猛發展,很多以前運行在UNIX上的經典軟件,開始被愛好者移植到Linux上,同時,也涌現了大批優秀的基于Linux的自由軟件,像Xfree 86、KDE、GNOME等等。正是這些軟件的不斷強大,反過來又進一步推動了Linux的發展和普及。
Linux的愛好者越來越多,大家已經不滿足于僅僅在Intel 80x86架構上運行Linux,他們開始把Linux移植到其他平臺上,例如Sun的Sparc平臺、Motorola的PowerPC平臺,還有ARM、Alpha等等。
今天,越來越多的廠商、商業用戶和個人用戶開始使用和支持Linux,很多廠商把自己的軟件發布到Linux平臺上,為Linux系統提供自己硬件的驅動,而很多商業機構開始使用Linux構建自己高效、穩定的計算環境。一旦有新硬件問世,Linux內核就能快速被改進以適應它。比如,Intel Xeon處理器才問世幾個星期,Linux新內核就跟上來了。它還被用在了Alpha、MAC、PowerPC上。正如它在1991年誕生時那樣,Linux正以同樣的熱情闊步走向新世紀。
2.1.2 關于GUN
GNU計劃是由理查德·斯托曼在1983年9月27日公開發起的,它的目標是創建一套完全自由的操作系統。理查德·斯托曼最早是在net.unix-wizards新聞組上公布該消息,并附帶一份《GNU宣言》等解釋為何發起該計劃的文章,其中一個理由就是要“重現當年軟件界合作互助的團結精神”。GNU是“GNU’s Not UNIX”的縮寫,為避免與Gnu(非洲牛羚,發音與“new”相同)這個單詞混淆,斯托曼宣布GNU應當發音為“Guh-NOO”,與“canoe”發音相似。UNIX是一種廣泛使用的商業操作系統的名稱。由于GNU將要實現UNIX系統的接口標準,因此GNU計劃可以分別開發不同的操作系統。GNU計劃采用了部分當時已經可自由使用的軟件,例如TeX排版系統和X Window視窗系統等。不過GNU計劃也開發了大批其他的自由軟件,這些軟件也被移植到其他操作系統平臺上,例如Microsoft Windows、BSD家族、Solaris及MacOS。
到了1985年,為了避免GNU所開發的自由軟件被其他人所利用而成為專利軟件,所以他與律師草擬了有名的通用公共許可證(General Public License,GPL),并且稱呼它為Copyleft(相對于專利軟件的Copyright)。被稱為“公共版權”。GNU也針對不同場合,提供GNU通用公共許可證與GNU自由文檔許可證這兩種協議條款。
為什么要將自由軟件掛上GPL的“版權宣告”呢?這個版權宣告對于作者有何好處?首先,斯托曼對GPL一直是強調Free的,這個Free的意思是這樣的:
“Free software” is a matter of liberty,not price.To understand the concept,you should think of“free” as in “free speech”,not as in “free beer”.
“自由軟件”是權利問題,不是價格問題。要理解這個概念,自由應該是“言論自由”中的“自由”,而不是“免費啤酒”中的“免費”。
Free software is a matter of the users' freedom to run,copy,distribute,study,change and improve the software.More precisely,it refers to four kinds of freedom,for the users of the software.
自由軟件關乎使用者運行、復制、發布、研究、修改和改進該軟件的自由。更精確地說,自由軟件賦予軟件使用者四種自由。
The freedom to run the program as you wish,for any purpose(freedom 0).
按照自己的意愿自由地運行程序,為任何目的。
The freedom to study how the program works,and adapt it to your needs(freedom 1).Access to the source code is a precondition for this.
有研究該軟件如何運行,以及按需改寫該軟件的自由。取得該軟件源代碼為達成此目的之前提。
The freedom to redistribute copies so you can help your neighbor(freedom 2).
有重新發布副本的自由,這樣你可以借此來敦親睦鄰。
The freedom to improve the program,and release your improvements to the public,so that the whole community benefits(freedom 3).Access to the source code is a precondition for this.
有改進該軟件,以及向公眾發布改進的自由,這樣整個社群都可受惠。取得該軟件源碼為達成此目的之前提。
大意是說,Free Software(自由軟件)是一種自由的權力,并非是“價格!”。舉例來說,你可以擁有自由呼吸的權力、你擁有自由發表言論的權力,但是,這并不代表你可以到處喝“免費的啤酒!(free beer)”,也就是說,自由軟件的重點并不是指“免費”的,而是指具有“自由度,Freedom”的軟件,史托曼進一步說明了自由度的意義是:使用者可以自由的執行、復制、再發行、學習、修改與強化自由軟件。
這無疑是個好消息!因為如此一來,你所拿到的軟件可能原先只能在UNIX上面運行,但是經過原始碼的修改之后,你將可以拿他在Linux或者是Windows上面運行。總之,一個軟件掛上了GPL版權宣告之后,他自然就成了自由軟件!這個軟件就具有下列特點:
(1)取得軟件與原始碼:你可以根據自己的需求來執行這個自由軟件。
(2)復制:你可以自由地復制該軟件。
(3)修改:你可以將取得的原始碼進行程序修改工作,使之適合你的工作。
(4)再發行:你可以將你修改過的程序,再度自由發行,而不會與原先的撰寫者沖突。
(5)回饋:你應該將你修改過的程序代碼回饋于社群。
但請特別留意,你所修改的任何一個自由軟件均不能:
(1)修改授權:你不能將一個GPL授權的自由軟件,在你修改后而將其取消GPL授權。
(2)單純販賣:你不能單純地販賣自由軟件。
自由軟件與商業行為:很多人還是有疑問,目前不是有很多Linux開發商嗎?為什么其可以出售Linux這個GPL授權的軟件?原因很簡單,因為其大多提供“售后服務”,所以,其所使用的自由軟件,都可以在他們的網站上面下載!(當然,廠商自己開發的部分工具軟件不屬于GPL的授權軟件)但是,你可以購買其Linux光盤,他們會提供相關的手冊說明文件,同時也會提供你數年不等的咨詢、售后服務、軟件升級與其他協力工作等附加價值。
所以說,目前自由軟件工作者,他們所賴以維生的,幾乎都是在“售后服務”這個領域,畢竟自由軟件并不是每個人都會寫,有人有需要時,他就會請求你的協助,此時,你就可以通過服務來收費了。
上面提到的大多是與用戶有關的項目,那么GPL對于自由軟件有何優點呢?大致的優點有這些:
(1)軟件安全性較佳;
(2)軟件執行效能較佳;
(3)軟件除錯時間較短;
(4)貢獻的原始碼永遠都存在。
這是因為既然是Open Source的自由軟件,那么你的程序代碼將會有很多人幫你查閱,如此一來,程序的漏洞與程序的優化將會進展得很快!所以,在安全性與效能上面,自由軟件一點都不輸給商業軟件。
1985年,理查德·斯托曼又創立了自由軟件基金會(Free Software Foundation)來為GNU計劃提供技術、法律及財政支持。盡管GNU計劃大部分時候是由個人自愿無償貢獻,但FSF有時還是會聘請程序員幫助編寫。當GNU計劃開始逐漸獲得成功時,一些商業公司開始介入開發和技術支持。當中最著名的就是之后被Red Hat兼并的Cygnus Solutions。
到了1990年,GNU計劃已經開發出的軟件包括了一個功能強大的文字編輯器Emacs、C語言編譯器gcc及大部分UNIX系統的程序庫和工具。唯一依然沒有完成的重要組件,就是操作系統的內核(稱為Hurd)。
1991年,林納斯·托瓦茲編寫出了與UNIX兼容的Linux操作系統內核并在GPL條款下發布。Linux之后在網上廣泛流傳,許多程序員參與了開發與修改。
1992年,Linux與其他GNU軟件結合,完全自由的操作系統正式誕生。該操作系統往往被稱為“GNU/Linux”或簡稱Linux。(盡管如此,GNU計劃自己的內核Hurd依然在開發中,目前已經發布Beta版本。)
許多UNIX系統上也安裝了GNU軟件,因為GNU軟件的質量比之前UNIX的軟件還要好。GNU工具還被廣泛地移植到Windows和Mac OS上。
GNU工程二十多年來已經成為一個對軟件開發主要的影響力量,創造了無數的重要的工具,到20世紀90年代初,GNU項目已經開發出許多高質量的免費軟件,其中包括有名的emacs編輯系統、bash shell程序、gcc系列編譯程序、gdb調試程序等等。這些軟件為Linux操作系統的開發創造了一個合適的環境,是Linux能夠誕生的基礎之一。以至于目前許多人都將Linux操作系統稱為“GNU/Linux”操作系統。
GNU將能夠執行UNIX的程序,但是不會和UNIX完全一樣,特別是GNU計劃擁有支持更長文件名、文件版本號、一個不怕死機的文件系統,或許還要有自動文件名補全、與終端機無關的顯示支持、可能最后還要有一個基于Lisp的視窗系統,以使好幾個Lisp程序和普通的UNIX程序能共享同一屏幕。C和Lisp都將成為系統的程序語言并會設法支持UUCP、MIT Chaosnet及Internet的通信協議。
GNU最初的目標是在有虛擬內存的68000/16000系列機器上開發,因為這樣的環境是最容易開發程序來實現GNU的運行。讓GNU能在其他較小的機器上運行的工作,將會留給那些希望能在這些機器上使用的人。
GNU不是公共的、毫無約束的軟件(Public Domain)。GNU計劃允許每一個人修改及傳播GNU,但是決不允許傳播者對他傳播的程序再加進其他的限制。也就是說,不允許將修改后的程序據為己有。GNU計劃希望能確保GNU所有的版本都能保持自由。
GNU的核心精神是自由與分享,對知識的渴求是支持其探索的唯一動力。