所有不同的 Linux 發行版都有相同的命令行嗎?
所有不同的 Linux 發行版都有相同的命令行嗎?我想知道的是相同的命令行適用於各種 Linux 發行版(CentOS、Fedora、Ubuntu 等),或者它們是否都有不同的命令行?
我選擇將此問題解釋為有關命令和 shell 在各種 Linux 發行版中的可移植性的問題。“命令行”可能意味著“在 shell 提示符下編寫的命令”和“shell 本身”。希望這個答案能解決“命令行”的這兩種解釋。
大多數 Unix 系統為在 shell 提示符下工作提供了相同的基本實用程序。這些實用程序在很大程度上以相同的方式工作,因為它們是標準化的。此外,用於編寫 shell 命令的語法是標準化的(循環、重定向、管道、後台程序、變數分配、引用等)。該標準稱為 POSIX,可以在此處找到(請參閱“Shell 和實用程序”部分)。
在大多數 Unices 上(尤其是在 Linux 上出於某種原因),標準實用程序已經擴展了額外的功能,但應該實現 POSIX 標準描述的功能。如果標準實用程序不符合 POSIX 標準,您可能應該送出一份關於此的錯誤報告。
特別是,shell 本身經常被擴展以提供更方便的互動體驗,或者能夠提供更高級的 shell 程式工具。shell 與其他任何應用程序一樣,具有各種風格(實現),並且
bash
在 Linux 系統上最流行(但它也可用作例如 macOS 上的預設 shell,並且可以安裝在任何 Unix 上)。和shell 也很流行,並提供不同的擴展集,但至少都應該zsh
能夠使用通用語法在很大程度上完成 POSIX 標準所說的(除非使用擴展,例如特殊類型的數組和更高級的文件名模式匹配形式)等等,儘管其中一些恰好在 shell 之間也非常相似)。ksh
至於非標準工具,例如用於執行某些 POSIX 標準未涵蓋的特定任務的工具(例如與數據庫通信或調整監視器的亮度級別),或者特定於特定 Linux 發行版的工具(可能用於包管理)、特定 Linux 發行版的版本或特定硬體架構等,命令的可移植性將取決於安裝在支持使用該工具的系統上的工具的正確變體和版本工具。
在各種 Linux 發行版中,可用工具和實用程序的分類相當同質,並且可移植性通常很好(需要注意的是發行版和體系結構特定的工具可能不同或缺失)。在考慮使用和編寫應該在其他類型的 Unix 系統上工作的腳本時,了解哪些擴展是特定於 GNU/Linux 變體的工具和實用程序,以及可以預期哪些可以在“通用POSIX/Unix 系統”。