- Red Hat Linux 9實務自學手冊
- 李洋編著
- 5015字
- 2018-12-29 21:52:51
第一篇 Linux系統管理及應用
第1章 Linux簡介
Linux是一個日益成熟的操作系統,現在已經擁有大量的用戶。由于其安全、高效、適合構建安全的網絡應用的眾多特性,Linux已被越來越多的人了解和使用。Linux是芬蘭的Linus Torvalds開發的,任何人都可以自由地復制、修改、套裝發行、銷售,但是不可以在發行時加入任何限制,而且所有源代碼是公開的,以保證任何人都可以無償取得所有可執行文件及其源代碼。作為本書的入門知識,本章將著重介紹Linux的發展歷史、特性、主要應用領域以及Linux內核基本原理等。
1.1 Linux的發展歷史
要講Linux的發展歷史,不能不提到UNIX和Minix。UNIX的早期版本源代碼是可以免費獲得的,但是當AT&T發布UNIX 7版時,它認識到UNIX的商業價值,于是在發布的版本7許可證中就禁止在課程中講授其源代碼,以免其商業利益受到損害。許多學校為了遵守該規定,就在課程中略去UNIX的內容而只講操作系統理論。
只講理論的結果使學生對實際的操作系統產生片面的認識。為了扭轉這種局面,坦尼鮑姆決定編寫一個在用戶看來與UNIX完全兼容,而內核全新的操作系統——Minix。坦尼鮑姆希望通過Minix讀者可以剖析一個操作系統,研究其內部如何運作。Minix其名稱源于“Mini-UNIX”。Minix一直恪守“Small is beautiful”的原則,其最早的版本甚至不需要硬盤就可以運行,這使得當時許多學生都能負擔其硬件的要求。隨著Minix功能和規模的增長,大多數人都想在其中加入一些新特性以使之更大、更有用,而Minix的作者在幾年內卻一直堅持不增加新特性,使Minix保持短小精悍的特點,便于學生理解。此后,芬蘭學生Linus Torvalds便決定編寫一個類似Minix的系統,其特征繁多且面向實用而非教學。他編寫的這個操作系統就是Linux。
1990年,Linus Torvalds用匯編語言寫了一個在80386保護模式下處理多任務切換的程序,后來他從Minix中得到靈感,開始寫了一些硬件的設備驅動程序、一個小的文件系統,這樣0.0.1版本的Linux就出來了,但是它必須在有Minix的機器上編譯以后才能運行。此后Linus決定徹底拋棄Minix,編寫一個完全獨立的操作系統。1991年10月5號Linus發布了Linux 0.0.2版本。這個版本已經可以運行bash(一種用戶與操作系統內核通信的命令解釋軟件)和GCC(GNU C編譯器)了。
Linus從一開始就決定自由擴散Linux。他把源代碼發布在網上,隨即就引起了三個Linux愛好者的注意,他們通過因特網也加入了Linux的內核開發工作。后來一大批高水平程序員的加入,使得Linux迅猛發展,到1993年年底,Linux 1.0終于誕生,那時它已經是一個功能完備的操作系統了,其內核寫得緊湊高效,可以充分發揮硬件的性能,在4MB內存的80386機器上表現得非常好。
Linux從1.3版本之后開始向其他硬件平臺移植。現在Linux已能將硬件的性能充分發揮出來,可以在Intel、DEC的Alphas、Motorola的M68k、Sun Sparc、PowerPC、MIPS等處理器上運行,并可以囊括從低端到高端的所有應用。
Linux雖然加入GNU并遵循GPL,但是并不排斥商家的參與,即在Linux上開發商業軟件,故使Linux開始了新的飛躍,出現了很多Linux發行版,如Slackware、 Red Hat、Suse、TurboLinux、OpenLinux等10多種。而且,許多公司還在把其他UNIX平臺的軟件移植到Linux上來,連IT界的大腕如IBM、Intel、Oracle、Infomix、Sysbase、Corel、CA、Novell等都宣布支持Linux。因此,商家的加盟彌補了純自由軟件的不足和發展障礙,使Linux得以迅速普及。
1.2 Linux的特性
Linux從一個由個人開發的操作系統雛形經過短短十多年時間已發展成為當今舉足輕重的操作系統,并與Windows、UNIX一起形成操作系統領域三足鼎立的局勢,這是由其如下自身的特點決定的。
● 公開源碼:作為程序員,通過閱讀Linux內核和Linux下其他程序的源代碼,可以學到很多編程經驗和其他知識。作為最終用戶,使用Linux可避免使用盜版Windows的尷尬,也免去了使用正版Windows的龐大費用。一個比較著名的例子是,墨西哥政府采用Linux操作系統替代使用Windows操作系統,就大約節省了1.24億美元。
● 系統穩定:Linux采用了UNIX的設計體系,汲取了UNIX系統25年發展的經驗,體現了現代操作系統的設計理念和最經得住時間考驗的設計方案;因此在服務器操作系統市場上,Linux現已超過Windows成為服務器首選操作系統。
● 性能突出:德國C’T最近公布了由Jurgen Schmidt組織的最新的Windows和Linux的測試結果。結果表明:兩種操作系統在各種應用情況下,尤其是在網絡應用環境中,Linux的總體性能更好。
● 設備獨立性:設備獨立性是指操作系統把所有外部設備統一當作文件看待,只要安裝它們的驅動程序,任何用戶都可以像使用文件一樣,操縱、使用這些設備,而不必知道它們的具體存在形式。Linux是具有設備獨立性的操作系統,它的內核具有高度適應能力;且隨著更多的程序員加入Linux編程,會有更多硬件設備加入到各種Linux內核和發行版本中。另外,由于用戶可以免費得到Linux的內核源代碼,因此,用戶可以修改內核源代碼,以便適應新增加的外部設備。
● 安全性強:各種病毒的頻繁出現使得微軟幾乎每隔幾天就要為Windows公布補丁,而現在針對Linux的病毒則非常少,而且Linux的公開源代碼的開發方式使得各種漏洞都能夠在Linux上得到及早發現和彌補。
● 跨平臺:Windows只能在Intel構架下運行,但是Linux除了可以運行于Intel平臺外,還可以運行于Motorola公司的68K系列CPU,IBM、Apple、Motorola公司的PowerPC CPU,Compaq和Digital公司的Alpha CPU、MIPS芯片,以及Sun公司的SPARC和UltraSparc CPU。
● 完全兼容UNIX:Linux和現今的UNIX、System V、BSD三大主流的UNIX系統幾乎完全兼容,在UNIX下運行的程序,完全可以移植到Linux下運行。
● 良好的可移植性:Linux是一種可移植的操作系統,能夠在從微型計算機到大型計算機的任何環境中和任何平臺上運行。可移植性為運行Linux的不同計算機平臺與其他任何機器進行準確而有效的通信提供了手段,不需要另外增加特殊的通信接口。
● 強大的網絡服務:Linux誕生于因特網,保證了它支持所有的標準因特網協議,而且Linux還內置了TCP/IP協議。事實上,Linux是第一個支持IPv6的操作系統。
1.3 Linux的應用領域
Linux從誕生到現在,已經在各個領域得到了廣泛應用,顯示了它強大的生命力,并且其應用正日益擴大。下面列舉其主要應用領域:
● 教育領域:設計先進和公開源代碼這兩大特性使Linux成為操作系統課程的好教材。
● 網絡服務器領域:穩定、健壯、系統要求低、網絡功能強使Linux成為現在因特網服務器操作系統的首選,現已達到了服務器操作系統市場25%的占有率。
● 企業內部網:利用Linux系統可以使企業用低廉的投入架設E-mail服務器、WWW服務器、代理服務器、透明網關和路由器。
● 視頻制作領域:Linux優良的跨平臺特點使其在視頻制作領域得到廣泛的應用,如著名的影片《泰坦尼克號》就是由200多臺裝有Linux系統的機器協同完成其特技效果的。
1.4 Linux的內核及發行版本
嚴格地說,Linux是在GPL(GNU General Public License)版權協議下發行的操作系統內核,其版權屬于Linus Torvalds。我們通常所說的Linux是指包含kernel(內核)、utilities(系統工具程序)以及application(應用軟件)的一個完整的操作系統,實際上它是由某些公司或組織把Linux內核、源代碼以及相關的應用程序組織在一起發行的。國際上比較著名的Linux發行版本有Red Hat、SlackWare、Debian、Fedora、Ubuntu等。國內也有不少Linux的發行版本,如北京中科紅旗軟件技術有限公司發布的紅旗Linux,藍點軟件(深圳)有限公司發布的藍點Linux,北京沖浪公司制作的Xterm Linux等。
Linux是UNIX的“克隆”,在源代碼級上兼容絕大部分的UNIX標準(如IEEE POSIX、System V、BSD等),并且符合POSIX規范。例如對于System V來說,把其上的程序源代碼拿到Linux下重新編譯后就可以運行,而對于BSD UNIX來說,它的可執行文件甚至可以直接在Linux環境下運行。
注意
GPL同其他的自由軟件許可證一樣,允許公眾享有運行、復制軟件的自由,發行傳播軟件的自由,獲得軟件源碼的自由,改進軟件并將自己做出的改進版本向社會發行傳播的自由。
由于Linux的源程序是完全公開的,任何人只要遵循GPL,就可以對內核加以修改并發布給他人使用。Linux內核的版本在發行上有自己的規則,可以從其版本號加以識別。版本號的格式為“x.yy.zz”。其中x介于0到9之間,而yy,zz則介于0到99之間,通常數字越大說明版本越高。而且它有一個非常簡單的編號約定:任何偶數的核心(例如2.0.30)都是一個穩定發行的核心;而任何奇數的核心(例如2.1.42)都是一個開發中的核心,不建議初學者和生產過程中使用。另外,一些版本號后面有時會見到pNN的字樣,NN是介于0到20之間的數字,它代表對某一版本的內核“打補丁”或者是修改的次數。
Linux內核版本發布的官方網站是http://www.kernel.org。新版本的內核分兩種,一種是full Source版本,另一種是patch文件,即補丁。full Source版本比較大,一般是tar.gz或者是.bz2文件,兩者分別是使用gzip或者bzip2進行壓縮的文件,使用時需要解壓縮。patch文件則比較小,一般只有幾十KB到幾百KB,但是patch文件是針對于特定的版本的,用戶需要找到自己對應的版本才能使用。
1.5 Linux的主要組成部分
Linux一般包括四個主要部分:內核、Shell、文件結構和實用工具。
1.5.1 內核
內核是系統的心臟,是運行程序和管理像磁盤和打印機等硬件設備的核心程序。它從用戶那里接受命令并把命令送給內核去執行。Linux核心源程序通常都安裝在/usr/src/linux下。當前的Linux內核主要包括:存儲管理、中斷異常和系統調用、進程與進程調度、文件系統、進程間通信、設備驅動、多處理器系統結構、系統引導和初始化幾大部分。
傳統的UNIX內核是全封閉的,即如果要往內核中加一個設備,早期的做法是編寫這個設備的驅動程序,并變動內核源程序中的某些數據結構,再重新編譯整個內核并重新引導系統。而在Linux里面,它允許把設備驅動程序在編譯時靜態地連接在內核中,如傳統的驅動程序那樣;也允許動態地在運行時安裝,成為“模塊”;還允許在運行狀態下當需要用到某一模塊時由系統自動安裝。這樣的模塊仍然在內核中運行,而不是像在微內核中那樣作為單獨的進程運行,所以其運行效率較高。
1.5.2 Shell
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令并把它送入內核去執行。實際上Shell是一個命令解釋器,它解釋由用戶輸入的命令并且把它們送到內核。不僅如此,Shell有自己的編程語言用于對命令的編輯,它允許用戶編寫由Shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點,比如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果。Linux提供了像Microsoft Windows那樣的可視的命令輸入界面——X Window的圖形用戶界面(GUI),它提供了很多窗口管理器,其操作就像Windows一樣,有窗口、圖標和菜單,所有的管理都通過鼠標控制。現在比較流行的窗口管理器是KDE和GNOME。每個Linux系統的用戶都可以擁有他自己的用戶界面或Shell,用以滿足他們自己專門的Shell需要。同Linux本身一樣,Shell也有多種不同的版本,目前主要有以下幾種:
● Bourne Shell:是貝爾實驗室開發的;
● BASH:是GNU的Bourne Again Shell,是GNU操作系統上默認的Shell;
● Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell兼容;
● C Shell:是Sun公司Shell的BSD版本。
1.5.3 文件結構
文件結構是文件存放在磁盤等存儲設備上的組織方法,主要體現在對文件和目錄的組織上。目錄提供了管理文件的一個方便而有效的途徑,我們能夠從一個目錄切換到另一個目錄,而且可以設置目錄和文件的權限,以便允許或拒絕其他人對其進行訪問。Linux目錄采用多級樹形結構(如圖1-1所示),用戶可以瀏覽整個系統,可以進入任何一個已授權進入的目錄,訪問那里的文件。文件結構的相互關聯性使共享數據變得容易,幾個用戶可以訪問同一個文件。Linux是一個多用戶系統,操作系統本身的駐留程序存放在以根目錄開始的專用目錄中,有時被指定為系統目錄。

圖1-1 Linux的目錄結構
1.5.4 實用工具
內核、Shell和文件結構一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件以及使用系統。此外,Linux操作系統還有許多被稱為實用工具的程序,輔助用戶完成一些特定的任務。
標準的Linux系統都有一套叫做實用工具的程序,它們是專門的程序,例如編輯器、執行標準的計算操作等,用戶也可以產生自己的工具。Linux中的實用工具可分為以下三類:
● 編輯器:用于編輯文件;
● 過濾器:用于接收數據并過濾數據;
● 交互程序:允許用戶發送信息或接收來自其他用戶的信息。
具體來說,Linux的編輯器主要有:Ed、Ex、Vi和Emacs。Ed和Ex是行編輯器,Vi和Emacs是全屏幕編輯器。
Linux的過濾器(Filter)讀取從用戶文件或其他地方的輸入,檢查和處理數據,然后輸出結果。從這個意義上說,過濾器過濾了經過它們的數據。Linux有不同類型的過濾器,一些過濾器用行編輯命令輸出一個被編輯的文件,另外一些過濾器是按模式尋找文件并以這種模式輸出部分數據的。還有一些執行字處理操作,檢測一個文件中的格式,輸出一個格式化的文件。過濾器的輸入可以是一個文件,也可以是用戶從鍵盤輸入的數據,還可以是另一個過濾器的輸出。過濾器還可以相互連接,因此,一個過濾器的輸出可能是另一個過濾器的輸入。在有些情況下,用戶可以編寫自己的過濾器程序。
交互程序是用戶與機器的信息接口。Linux是一個多用戶系統,它必須和所有用戶保持聯系。信息可以由系統上的不同用戶發送或接收,信息的發送有兩種方式,一種方式是與其他用戶一對一地鏈接進行對話,另一種是一個用戶對多個用戶同時鏈接進行通信,即所謂廣播式通信。