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