當前位置: 妍妍網 > 碼農

再強調一遍:Unix 不是 Linux!

2024-02-17碼農

點選上方 Linux開源社群 」,選擇「 設為星標

優質文章,及時送達

作者:Mohamed Akram

原文:https://akr.am/blog/posts/unix-is-not-linux

譯者:CSDN - 彎月

摘要: 程式設計師都知道,Linux 不是 Unix ,不過二者之間確實存在關系,即 Linux 系統是從 Unix 衍生出來的,而 Linux 是一個類 Unix 的作業系統。那麽,二者之間具體存在 哪些明顯的差異呢?

網上很多有關POSIX和Unix工具的教程和指南總是假設你安裝了Linux,或者更具體地說,安裝了基於GNU的作業系統。然而,在探討shell的行為、工具程式以及C的標準庫時,這種假設往往會產生很大的影響。

雖然Linux的主導地位可能會讓我們忽略Linux與這些作業系統的不同,但我們還是應該有一定的了解。在本文中,我將列出一些比較明顯的差異。

1. Bash不是標準的shell

所有Unix系統上的預設shell都是sh,而不是bash。POSIX標準中介紹了sh中使用的語言。然而,在許多Linux系統上,sh只是指向bash的連結,這樣可以用更接近標準的方式來使用bash,但人們依然可以使用一些無法在其他系統上使用的bash功能。如有疑問,請參閱標準。微信搜尋公眾號:架構師指南,回復:架構師 領取資料 。

2. Unix不包含長選項

Unix命令的選項有兩種寫法:短選項(只有一條短線-)與長選項(有兩條短線--)。短選項一般會采用縮寫的形式,而長選項一般會寫出完整的單詞。

許多工具程式都接受長選項,例如grep --count,對應的短選項是grep -c。前者是GNU的寫法,其他系統通常不會采用這種寫法,例如BSD。事實上,標準的getopts工具程式和相應的getopt C函式只支持短選項。

3. Make不同於GNU make

POSIX版本的make比GNU版本更有局限性。這個問題很難解決,因為規範的許多方面都有所欠缺,特別是邏輯或條件運算子。為了解決這個問題,你可以將一些邏輯移動到configure指令碼,由這個指令碼生成另一個Makefile,然後再包含到主檔中。此外,BSD的語法與GNU完全不同,例如條件語句。幸運的是,如果你只關註macOS和Linux,則可以放心地使用GNU的特性,因為macOS都是基於GNU的。

4. C編譯器不同於GCC

在Makefiles檔中參照C編譯器時,最好使用變量$(CC),在編譯C++程式碼時,最好使用變量$(CXX)。大多數BSD系統的預設編譯器如今都改為使用Clang了,而且不提供gcc可執行檔。如果是在Makefiles以外使用C和C++編譯器,則可以直接使用cc和c++命令,這兩個命令能在所有系統上工作。

5. GNU不同於Linux

二者略有不同,GNU介面不一定會出現在Linux系統上。例如,Alpine Linux發行版因其輕量級而流行於Docker容器中,它沒有使用musl的GNU C庫,而且放棄了GNU工具程式,改為使用BusyBox。因此,最好還是使用可移植的介面,即便你的目標只是Linux系統。

6. Unix不同於UNIX

最後,請註意,Unix與UNIX也不完全相同。後者是需要The Open Group認證的商標。在眾多經過認證的作業系統中,最有名的是macOS,它遵循一切UNIX規範。也就是說,包括BSD在內的大多數類Unix系統以及GNU工具都在努力盡量遵守標準。

-End-

讀到這裏說明你喜歡本公眾號的文章,歡迎 置頂(標星)本公眾號 Linux技術迷,這樣就可以第一時間獲取推播了~

本公眾號,後台回復:Linux,領取2T學習資料 !

1. 

2. 

3.

4.