Unix文件系統結構有哪些優點
如果我在 Linux 中安裝應用程序,例如 Debian/Gnu Linux,應用程序的文件會復製到文件系統中的許多不同目錄中。
一些腳本進入*/usr/share* .. /usr/local一些其他文件進入*/var* .. /log .. *etc/*等等。
對我來說這沒問題,因為我了解了一些關於文件系統的知識,並且大多數目錄都用於保存用於特定目的的文件。這非常符合 Unix 哲學“做一件事,做好”
但我的問題是**這樣的目錄結構有什麼好處?**或者它只是舊Unix時代的遺產。(例如,與一個 Windows 使用相比,應用程序的所有文件都在一個特定的“文件夾”中)
在我看來,最容易想到的優勢是相似的文件存在於同一個目錄樹中。配置文件存在於 中
/etc
,日誌文件和/或執行時跟踪文件存在於 中/var/log
,執行檔存在於 中/usr/bin
,執行時資訊(如 PID 文件)存在於/var/run
. 您想知道 NTP 配置文件中的內容嗎?將目錄更改為/etc
並執行ls ntp*
. 你想讓一些程序監視執行檔,這樣一些傳統的文件系統病毒就不會感染它們嗎?一切都在/usr/bin
並且/usr/local/bin
需要觀察。我能想到的第二個優點是 Unix 的組織風格促進了數據和執行檔的分離。執行檔位於遠離模板所在的目錄(
/usr/share
可能),並且遠離數據所在的目錄。這種分離可能是 Unix/Linux/*BSD 比 Windows 或舊的 Pre-OSX Mac 更能抵抗文件系統病毒的原因。
無論選擇哪個組織,都會讓一些事情變得更容易,而讓一些事情變得更困難。
按類型組織文件,Unix 方式(into
bin
,man
,lib/python
, …)使文件更容易使用。如果你想執行一個命令,你知道在哪裡可以找到它,不管是哪個包提供的。如果您想搜尋文件,這一切都在一個地方。如果某些程序提供了 Vim 語法高亮模組、zsh 補全功能或 Python 綁定,則相關文件將位於 vim/zsh/python 可以找到的位置。Unix 還按使用模式組織文件。配置文件進去
/etc
,正常執行中不改變的/usr
文件進去,自動改變的文件進去/var
。使用者數據在/home
. 這對於配置管理非常有用(管理其中的內容/etc
以及已安裝軟體包的列表)。定義備份策略也很有用:裡面的內容/etc
和/home
至關重要的內容,而裡面的內容/usr
可以很容易地再次下載。Unix 方式的主要成本是安裝一個軟體分散在許多目錄中。然而,現代的 Unix 系統無論如何都有包管理器。到目前為止,管理許多目錄中的文件並不是他們所做的最複雜的事情(跟踪依賴關係非常有用且更難)。
與 Windows 進行對比。Windows 開始時沒有包管理,每個應用程序都在某個地方創建了自己的目錄。所有文件通常都在該目錄中:程序、靜態數據、使用者數據……除了庫,這些程序會在不考慮衝突的情況下放入公共系統目錄(“DLL 地獄”)。隨著時間的推移,Windows 變成了多使用者,需要將使用者目錄與系統目錄分開。Windows 還為配置文件(Unix 的
/etc
)和一些系統數據(Unix 的/var
),系統資料庫。這更像是一個歷史產物,主要是由於缺乏包管理和作為單使用者系統的早期歷史。Windows 方法有很多限制:它不允許軟體包輕鬆互動。例如,大多數已安裝的軟體最終不會出現在預設的命令搜尋路徑上,因此它與任何形式的腳本互動都很糟糕。安裝程序通常會提供一個菜單圖示作為特殊情況 - 放入單獨的系統目錄(à la Unix!)。Unix 方法的一個限制是它不容易允許包的多個版本共存,這在升級包時尤其成問題。兩全其美的方法是將每個包解壓縮到其自己的目錄(一個
/opt
結構)中,並創建從包目錄到/usr
結構的符號連結森林。這就是像stow這樣的軟體所做的。總之,Unix 方法更容易使用文件、管理文件和允許包互動;它需要包管理軟體,但無論如何這是可取的。Windows 方法使手動管理包變得更容易,但必須轉向 Unix 模型才能獲得有用的功能。