Directory-Structure
分發特定路徑的標準環境變數
在我看來,在 Linux/Unix 的不同發行版之間如何建構不同的文件系統存在很多混淆(或者至少在我看來)。
有理由認為,與其為每個系統使用不同類型的包,不如讓環境變數指向各個文件系統結構中的不同目錄會更有用。
例如:如果我想知道 Windows 系統上“程序文件”目錄的位置,我可以使用環境變數
%ProgramFiles%
或%ProgramFiles(x86)%
. Linux 或 Unix 系統上是否有這樣的工具?
Linux 沒有等效於 Windows 的
%ProgramFiles%
變數,因為它不需要。安裝在它們自己的目錄中的程序有一個標準位置:/opt
. 大多數程序都沒有安裝在那裡,因為它們包含在包中,並且它們的文件位於其他程序可以找到它們的位置。Windows 有%ProgramFiles%
變數的原因實際上很大程度上是歷史原因:
- Windows 有驅動器號。即使
\Program Files
是標準位置,仍然存在是否是 , 等的問題c:\Program Files
。LinuxD:\Program Files
從來沒有遇到過這個問題,因為符號連結允許目錄出現在任何地方,而不管它位於哪種物理儲存介質上。(現代 Windows 不需要此功能,因為它們具有等效功能,但該位置仍可修改以實現向後兼容性。)- Windows 允許管理員選擇系統目錄的名稱。Linux 沒有;沒關係,因為它從來沒有這樣做過,而 Windows 必須適應選擇不同位置以實現向後兼容性的管理員。
- 每個 Windows 程序都有自己的安裝程序,因此沒有真正的包管理機制,跟踪哪些文件屬於哪個包的唯一方法是每個目錄有一個包。這開始改變了,但還沒有完全改變。相比之下,Linux 通常將文件儲存在可以找到它們的位置,並讓包管理器跟踪它們屬於誰。
Linux 確實具有指定路徑的環境變數:
PATH
用於可執行命令、LD_LIBRARY_PATH
用於共享庫、MANPATH
用於手冊頁等。它們都是關於在哪裡找到文件,而不是在哪裡放置文件。將文件放在哪裡不是程序知道的,而是包管理器知道的。包管理器有他們的數據文件,他們不需要環境變數來告訴他們東西在哪裡。Linux 系統上的目錄結構在Filesystem Hierarchy Standard中進行了標準化。大多數這些都不需要環境變數,因為位置是標準的,或者因為不需要單個位置。
不同的發行版具有不同的包系統這一事實並不是由於具有不同的目錄結構。這是分佈之間的主要區別之一。