CIO參考:Unix與Linux操作系統(tǒng)差異分析
Unix與Linux操作系統(tǒng)是同一個操作系統(tǒng)嗎?是,也不是?;蛟S這個答案有自相矛盾的地方,但是卻是一個比較合理的答案。筆者在后續(xù)的文章中,將陸續(xù)對Unix與Linux這兩個操作系統(tǒng)的差異進行分析。若各位讀者對這個話題感興趣的話,請關(guān)注筆者后續(xù)的文章。
一、Unix與Linux操作系統(tǒng)的源代碼是不同的。
雖然Unix與Linux操作系統(tǒng)有不少的命令是相同的,但是他們的源代碼則是不同的。也就是說,在Linux操作系統(tǒng)開發(fā)過程中,采用了很多Unix系統(tǒng)的設(shè)計理念,并遵循Unix操作系統(tǒng)的POSIX規(guī)范。但是其并沒有采用Unix操作系統(tǒng)的源代碼,并沒有采用Unix操作系統(tǒng)的運行方式。從這一點來說,他們兩個是不同的操作系統(tǒng)。
現(xiàn)在Unix操作系統(tǒng)走的是商業(yè)化的道理,其源代碼是受到保護的。這也就是說,任何社會團體與個人都不能夠抄襲或者隨意修改Unix操作系統(tǒng)的源代碼。而Linux在開發(fā)過程中,源代碼都是重新書寫的,所以就沒有版權(quán)上面的限制。無論是個人還是商業(yè)團體,只要遵循一定的規(guī)范,就可以對Linux的源代碼進行更改或者復制。不會涉及到版權(quán)的問題。 故Linux操作系統(tǒng)才是一個真正的開源操作系統(tǒng)。
二、Unix與Linux采用相同的系統(tǒng)調(diào)用為此就是同一種操作系統(tǒng)。
Unix從發(fā)展到現(xiàn)在,有了很多種版本。如BSD或者HP-Uinx操作系統(tǒng)等等。他們都是Unix操作系統(tǒng)。為什么這么說呢?并不是說他們的源代碼的起源是相同的,而是說他們都采用了一樣的系統(tǒng)調(diào)用。在Unix操作系統(tǒng)中,最出色的特點就是通過命令來完成相關(guān)的操作。在Unix系統(tǒng)中,具有1000多個命令。但是令人驚奇的是,這么多的命令卻是通過少數(shù)幾個函數(shù)調(diào)用與系統(tǒng)內(nèi)核進行通信,這些函數(shù)調(diào)用就稱之為系統(tǒng)調(diào)用。
這就好像一個寫字樓,其大門可能只有前后兩個。但是通往這兩個大門的道路卻有成千上百條。那么各個應(yīng)用程序只需要遵守這兩扇大門的通信規(guī)則,就可以跟寫字樓內(nèi)部人員進行溝通。如在Unix內(nèi)核中有一個Write函數(shù),主要是往文件中保存相關(guān)的信息。而很多應(yīng)用程序需要往硬盤的文件中保存信息,如文本處理文件、數(shù)據(jù)庫系統(tǒng)等等。但是這些應(yīng)用系統(tǒng)的話最終都會調(diào)用Write函數(shù)往文件中保存信息,所以這些應(yīng)用程序開發(fā)者只需要了解Write函數(shù),就可以順利往硬盤中保存文件??梢?,真是因為大家都采用了相同的系統(tǒng)調(diào)用,所以應(yīng)用程序才能夠在不同的Unix版本中順利移植。
而Linux操作系統(tǒng)采用的系統(tǒng)調(diào)用跟Unix操作系統(tǒng)是相同的,都遵循POSIX的規(guī)范。從這一點上來說,Linux操作系統(tǒng)就是Unix操作系統(tǒng),只是他們的開發(fā)者不同而已。為此即時他們的源代碼不同,但是并不影響這個定性。由于兩個操作系統(tǒng)采用了相同的系統(tǒng)調(diào)用,則在Unix操作系統(tǒng)上開發(fā)的應(yīng)用軟件,可以很方便的移植到另一個Linux操作系統(tǒng)上。
所以說,Unix操作系統(tǒng)與Linux操作系統(tǒng)即是同一個操作系統(tǒng)(系統(tǒng)調(diào)用相同),又不是相同的操作系統(tǒng)(源代碼不同)。這個答案看起來自相矛盾,但是真實的反映出了這兩個操作系統(tǒng)相互之間的關(guān)系。
#p#
三、內(nèi)核文件與外殼不同。
無論是Unix操作系統(tǒng)還是Linux操作系統(tǒng),其基本上是有內(nèi)核、外殼和應(yīng)用程序三部分組成。毋庸置疑,內(nèi)核是操作系統(tǒng)中最重要的部分,其直接跟計算機硬件打交道。負責外殼與系統(tǒng)硬件之間的信息交流。為此也有專家說,內(nèi)核才算是真正意義上的操作系統(tǒng)。
Unix操作系統(tǒng)與Linux操作系統(tǒng)內(nèi)核文件是不同的。如Unix操作系統(tǒng)其內(nèi)核程序?qū)?yīng)的文件往往是/stand/unix文件;在SUNOS的Unix操作系統(tǒng)中對應(yīng)的是/kernel./genuix。操作系統(tǒng)在啟動的時候會把這個內(nèi)核程序加載到系統(tǒng)內(nèi)存中。而Linux操作系統(tǒng)的內(nèi)核程序與Unix操作系統(tǒng)有比較大的區(qū)別。Linux操作系統(tǒng)采用的內(nèi)核文件為/boot/vlinuz。無論是系統(tǒng)工程師還是程序員必須要知道這個最基本的區(qū)別。如在對系統(tǒng)內(nèi)核進行升級的時候,就需要知道所采用的內(nèi)核文件。
Unix操作系統(tǒng)與Linux操作系統(tǒng)不僅內(nèi)核文件不同,所采用的外殼也是不同的。當目前為止,Unix操作系統(tǒng)主要支持四種外殼,分別為SH、CSH、KSH和BASH。當用戶登錄到操作系統(tǒng)之后,就會啟動一個外殼程序。通常情況下,在同一個時刻只能夠啟動一個外殼。系統(tǒng)工程師就是通過外殼同系統(tǒng)內(nèi)核與硬件進行通信。而Linux操作系統(tǒng)目前為止只支持三種外殼程序,分別為BASH(默認采用的外殼程序)、CSH、KSH,比Unix操作系統(tǒng)少一種。這個差異對于普通用戶來說,可能沒有什么影響。但是對于系統(tǒng)工程師進行一些特定工作的話,就可能會帶來比較大的不方便。
四、命令參數(shù)的表示方式不同。
在Unix操作系統(tǒng)與Linux操作系統(tǒng)其大部分命令都是相同的。但是在一些參數(shù)的表示方法上有所差異。如ls命令都是用來查看當前目錄下文件、子目錄相關(guān)信息的。這個命令時兩個操作系統(tǒng)中使用的頻率***的命令,都帶有比較多的參數(shù)。但是在一些參數(shù)的具體表述上會有所差別。
如在這兩個操作系統(tǒng)中命令后面可以加一類比較特殊的參數(shù),即可有可無的參數(shù)。在Unix系統(tǒng)中利用單橫桿夾一個英文字母表示。如ls –l等等。這個可選項也是Unix命令中的一個參數(shù)。這些參數(shù)往往是系統(tǒng)中預先定義好的,用來實現(xiàn)一些比較特殊的功能。通常情況下,一個命令可以帶許多類型的參數(shù),如文件名參數(shù)與可選項參數(shù)等等,用來提高命令的靈活性,讓命令可以在多個方式下運行。另外需要注意的一個問題是,一般情況下命令與參數(shù)之間必須要有空格來進行區(qū)分。如果在命令與參數(shù)之間有多個空格的話,外殼程序中有一個叫做命令解釋器的工具會對其進行壓縮,***只剩下一個空格。當然有些情況下系統(tǒng)工程師可能不喜歡系統(tǒng)這種“自作聰明”的方法,則也可以通過一些措施阻止操作系統(tǒng)這么做。
而在Linux操作系統(tǒng)中雖然也可以支持可選項,但是其表示的方法有所差異。在Unix操作系統(tǒng)中,主要通過單橫桿來表示可選項參數(shù)。但是在Linux操作系統(tǒng)中,則其可選項的表示方式不統(tǒng)一,有的是需要一個單橫桿,而有些命令則需要使用雙橫桿來表示這個參數(shù)為可選項參數(shù)。另外在Unix操作系統(tǒng)中,這些可選項參數(shù)為單個的英文字母;而在Linux操作系統(tǒng)中,則其可能用的是具有一定含義的英文單詞,如ls --all等等。由于在Linux操作系統(tǒng)中這種不統(tǒng)一的情況,所以其命令的記憶量要比Unix操作系統(tǒng)要多。特別是像筆者這樣,既要負責Unxi系統(tǒng)的維護,平時可能又要參與Linux相關(guān)的項目時,這個就特別容易搞混。所以有時候就不得不查看系統(tǒng)的聯(lián)機幫助來判斷命令的正確格式。
還好在兩個操作系統(tǒng)中,都有一個在線幫助文檔。如在Unix操作系統(tǒng)與Red Hat 9操作系統(tǒng)中都可以通過man命令來查看命令的幫助說明,如man ls系統(tǒng)就會顯示ls命令的相關(guān)幫助,并且還會帶出這個命令下面的所有可用參數(shù),包括可選參數(shù)。其實到底是采用單橫桿還是雙橫桿都會有具體的指明。所以說很多像筆者這樣的系統(tǒng)工程師都要感謝這個在線幫助文檔,讓我們能夠同時勝任Unix操作系統(tǒng)與Linux操作系統(tǒng)的維護與開發(fā)工作。雖然命令之間有一些格式上的差異,但是畢竟大部分命令的名字都相同的。所以通過這個在線幫助文檔的支持,可以在最短時間內(nèi)確認這個差異。
以上這些差異只是Unix操作系統(tǒng)與Linux操作系統(tǒng)差異中的部分內(nèi)容。筆者日后會陸續(xù)整理這方面的差異。正如上面所說的,Unix與Linux操作系統(tǒng)其實是同一個操作系統(tǒng)。為此只要系統(tǒng)工程師掌握這些差異,那么他們必定可以同時勝任Linux與Unix操作系統(tǒng)的工作。希望筆者的這些差異總結(jié)能夠給大家在這方面帶來一定的幫助,讓大家可以在管理Unix操作系統(tǒng)的同時,成為一名合格的Linux工程師。
【編輯推薦】