Filesystems

“乾淨”的文件系統層次結構

  • July 20, 2011

Linux 文件系統層次結構充滿了僅出於歷史原因而存在的未使用文件夾。

是否有任何發行版僅安裝實際使用的目錄?

(在評論顯示這個問題之後重寫,而我的答案並沒有在任何地方產生成效。它有一個新的語氣,並且涵蓋的內容有點不同)。

要回答新問題:

每個發行版都做他們認為對使用者最有利的事情。這通常包括 A) 某種程度的定制以適應他們的特定理念和 B) 某種程度的標準化以與其他發行版進行比較。

最重要的標準化因素是FHS / 文件系統層次標準,它試圖為當今 UNIX 系統上的所有主要目錄保持清晰和簡潔的定義。該標準正在發展以適應現代發行版的需求,但進展緩慢,以免破壞舊發行版。大多數發行版都不會離 FHS 太遠。閱讀。它將幫助您理解所有的 Unices。

雖然並非每個目錄都可以在預設安裝中使用,但其中大多數都可以。層次結構不是“充滿未使用的”目錄,即使是少數開始為空的目錄也存在,因為它們可能會被使用。例如,由於發行版軟體包中的二進製文件都安裝在/usr/bin其中並且/usr/local/bin用於您自己的自定義添加,因此以後的文件夾在任何全新安裝時都會開始為空。但是,它仍然是有目的的。

要回答原始問題:

最初的問題始於對“有組織的”Windows 目錄佈局和“令人困惑的”Unix 佈局的比較。我不認為這是一個公平的比較,這就是原因。

系統之間的任何比較都需要考慮到被比較事物的範圍。您可以將蘋果與橙子進行比較,並生成*有用的差異列表。有些人會更喜歡其中一個。你不能輕易將蘋果比作煉油廠

這是一個故意的戲劇性陳述,但我希望它可以幫助你理解手頭的場景。**Unix 文件系統比 Windows 文件系統做的更多。**因此它更複雜。如果你想比較它們,你應該考慮到 Windows 中的所有系統都扮演著與 Unix 中的文件系統相同的角色。例如,Windows 系統資料庫所做的事情大部分都滾動到 Unix 文件系統中。在 Unix 中,像硬碟和滑鼠這樣的設備也是文件節點,可以這樣操作。甚至關於正在執行的程序和核心級選項(如網路參數)的元數據也可以通過文件系統讀取和寫入。在 Windows 上,這些需要特殊的 API 和復雜的程序。在 Unix 中,它就像讀取或寫入文本文件一樣簡單。這解釋了諸如/proc/sys/dev/run目錄結構之類的東西,這些結構在 Windows 中似乎沒有對應物。

此外,儘管有額外的功能,但它可能並不像您最初想像的那樣“骯髒”。一些決定有歷史原因,但它們繼續存在,因為它們繼續被使用。我不知道通常為空的文件夾。

Linux 中面向使用者的 GUI 幾乎完全在$HOME目錄範圍內執行。一切都在/home/username或您的發行版中。在該空間內,有一種趨勢是使用大寫的冗長名稱,例如“下載”和“圖片”,而不是“傳入”和“圖片”。簡單地通過現代 GUI 使用 Linux 電腦的任何人都不太可能需要知道除了主目錄中這些熟悉命名的文件夾之外的任何內容。

主目錄之外的任何內容都是系統管理員的領域。只有當您想修改或擴展 Linux 系統時,您才需要了解其餘的目錄結構。如果您打算編寫軟體或修補現有位,則值得學習大多數發行版通常遵循的FHS 規範中詳述的目前約定。

來自 Windows 背景的另一個值得注意的是,一般來說,發行版而不是單個軟體包會決定事情的發展方向。它們通常非常相似,但每個發行版都會有一個整體統一的理念,即應該將東西保存在哪裡。在 Windows 軟體中,軟體作者將他們的東西放在他們想要的任何地方,並通過安裝程序將其分發到那裡。通常,所有內容都以他們自己設計的樹的形式出現在帶有他們程序名稱的幾個文件夾下。在 Linux 世界中,軟體通常以軟體包的形式分發,由發行版的製造商維護。上游軟體被拆分、包裝並且通常符合發行版的偏好。這通常會導致整個系統更有條理。你不

在尋找包 A、B 和 C 的執行檔時,其中 A 來自 Windows 核心的一部分,但 B 和 C 來自不同的供應商。在 Windows 中可能是:

c:\Windows\System32\programA.exe
c:\Program Files\Vendor A - Program A\packageA\program\A.exe
c:\Program Files\programB\bin\program.exe

…但根據供應商的習慣,它可能是其他幾種變體。假設在 Linux 中,您通過包儲存庫安裝包 B,通過下載源包並手動安裝它來安裝 C。可以預見,二進製文件最終會出現在:

/usr/A
/usr/bin/B
/usr/local/bin/C

如果您仍然覺得系統需要“修復”,則可能值得考慮對此問題的評論。可以“重新組織”目前佈局,但任何這樣做的嘗試都會很快與許多人認為非常精細的機器發生衝突。

  • 雙關語的意思。

引用自:https://unix.stackexchange.com/questions/16139