為什麼 Linux 的檔案系統被設計成單一目錄樹?

為什麼 Linux 的檔案系統被設計成單一目錄樹?

誰能解釋為什麼Linux被設計成單一目錄樹?

在 Windows 中,我們可以有多個驅動器,例如C:\、 和D:\,而在 Unix 中只有一個根。有什麼具體原因嗎?

答案1

由於 Unix 檔案系統早於 Windows 許多年,因此人們可能會重新表述這個問題:「為什麼 Windows 會為每個裝置使用單獨的指示符?」。

分層檔案系統的優點是任何檔案或目錄都可以作為根目錄的子目錄找到。如果您需要將資料移至新設備或網路設備,檔案系統中的位置可以保持不變,應用程式將看不到差異。

假設您有一個作業系統是靜態的系統,並且有一個具有高 I/O 要求的應用程式。您可以以唯讀方式掛載 /usr 並將 /opt(如果應用程式駐留在此處)放置到 SSD 驅動器上。檔案系統層次結構不會改變。在 Windows 下,這要困難得多,特別是對於堅持位於 C:\Program Files\ 下的應用程式

答案2

這部分是出於歷史原因,部分是因為這樣比較有意義。

多路系統

多路系統是第一個引入分層檔案系統正如我們今天所知,目錄可以包含目錄。引用“用於二級儲存的通用檔案系統”作者:RC Daley 和 PG Neumann:

本文的第 2 部分介紹了文件的層次結構,這允許靈活地使用系統。此結構包含足夠的功能來確保多功能性。 (……)

為了便於理解,文件結構可以被認為是文件樹,其中一些是目錄。也就是說,除了一個例外,每個檔案(例如,每個目錄)發現自己被恰好一個目錄中的恰好一個分支直接指向。例外情況是位於樹根部的根目錄或根。儘管沒有從任何目錄明確指向根,但檔案系統已知的虛構分支隱式指向根。 (……)

在任何時候,使用者都被視為在某個目錄(稱為其工作目錄)中進行操作。他只需指定條目名稱即可存取其工作目錄中的條目有效指向的檔案。多個使用者可能同時擁有相同的工作目錄。

與許多其他方面一樣,Multics 尋求靈活性。使用者可以在檔案系統的子樹中工作並忽略其餘部分,並且仍然受益於目錄來組織他們的檔案。目錄也用於存取控制——READ 屬性允許使用者列出目錄中的文件,而 EXECUTE 屬性允許使用者存取該目錄中的文件(這與許多其他功能一樣,在 UNIX 中仍然存在)。

Multics 也遵循單一儲存池的原則。本文沒有詳細討論這方面的內容。單一儲存池與當時的硬體非常匹配:沒有可移動儲存設備,至少沒有用戶會關心的。 Multics確實有一個單獨的備份儲存池,但這對使用者來說是透明的。

Unix

Unix 從 Multics 中汲取了許多靈感,但目標是簡單性,而 Multics 的目標是靈活性。

單一分層檔案系統非常適合 Unix。與 Multics 一樣,儲存池通常與使用者無關。然而,存在可移動設備,並且 Unix 確實透過mountumount命令(保留給“超級使用者”,即管理員)。在“UNIX 分時系統”,丹尼斯·里奇和肯·湯普森解釋:

儘管檔案系統的根始終儲存在同一裝置上,但整個檔案系統層次結構不必駐留在該裝置上。有一個帶有兩個參數的掛載系統請求:現有普通檔案的名稱,以及特殊檔案的名稱,該檔案的關聯儲存磁碟區(例如磁碟包)應具有包含其自己的目錄層次結構的獨立檔案系統的結構。掛載的作用是使對先前的普通檔案的引用改為對可移動卷上檔案系統的根目錄的引用。實際上,mount 將層次結構樹的葉子(普通檔案)替換為全新的子樹(儲存在可移動磁碟區上的層次結構)。安裝後,可移動磁碟區上的檔案與永久檔案系統中的檔案實際上沒有區別。例如,在我們的安裝中,根目錄駐留在一個磁碟機的一個小分割區上,而包含使用者檔案的另一個磁碟機則由系統初始化序列安裝。可安裝的檔案系統是透過寫入其相應的特殊檔案來產生的。實用程式可用於建立空白檔案系統,或可以簡單地複製現有檔案系統。

分層檔案系統還具有將管理多個儲存裝置的複雜性集中到核心中的優點。這意味著核心更加複雜,但所有應用程式都變得更加簡單。由於核心必須關心硬體設備,但大多數應用程式不需要,因此這是一個更自然的設計。

視窗

Windows 的祖先可以追溯到兩個系譜:虛擬管理系統,最初設計的作業系統VAX小型計算機,以及CP/M,專為早期英特爾微型電腦設計的作業系統。

VMS 有一個分散式分層檔案系統,文件-11。在文件 11 中,文件的完整路徑包含節點名稱、該節點上的帳戶名稱、裝置名稱、目錄樹路徑、檔案名稱、檔案類型和版本號碼。 VMS 具有強大的邏輯名稱功能允許定義特定目錄的快捷方式,因此使用者很少需要關心目錄的「真實」位置。

CP/M 是為具有 64kB RAM 和軟碟機的電腦設計的,因此它追求簡單性。沒有目錄,但檔案引用可以包含磁碟機指示(A:B:)。

什麼時候作業系統2.0 引入了目錄,它使用的語法與 MS-DOS 1 相容,MS-DOS 1 本身遵循 CP/M。因此,路徑植根於具有單字母名稱的磁碟機。 (此外,VMS 和 CP/M 中使用斜杠字元/來啟動命令列選項,因此必須使用不同的字元作為目錄分隔符。這就是DOS 和後來的Windows 使用反斜線的原因,儘管一些內部組件也支持斜杠)。

Windows 保留了與 DOS 和 VMS 方法的兼容性,因此它保留了磁碟機號碼的概念,即使它們變得不那麼相關。如今,Windows 在底層使用北卡羅來納大學路徑(最初開發的由 Microsoft 和 IBM 提供作業系統/2,有相關血統)。儘管這是為高級用戶保留的(可能是由於歷史的重量),但 Windows 確實允許透過安裝重解析點

答案3

使用單一目錄樹不存在安全性問題。

設計 Unix 的人在作業系統方面擁有豐富的經驗,這些作業系統要求使用者知道哪些實體設備包含給定的資源。由於作業系統的部分目的是在真實硬體之上創建一個抽象機器,因此他們認為透過實體位置來省去資源尋址要簡單得多,並決定將所有內容放入單一名稱樹中。

這只是背後天才的一部分Unix的設計

答案4

*nix 和 Windows 都安裝了它們的磁碟機。在 Windows 中,它們會自動安裝在安裝點中,預設情況下,這些安裝點會按字母升序排列。這些預設值是:

  • A:B:=> 軟碟
  • C:=> 第一個硬碟的第一個分割區
  • D:=> 如果不存在其他分割區,則為下一個分割區或下一個硬碟機或 CD/DVD 磁碟機。

每個掛載點都是目錄。

在*nix中,掛載點由使用者決定。例如,我將一個分割區安裝為/,另一個分割區安裝為/home。因此,/home它是一個單獨的驅動器,相當於E:Windows 上的說法。

在這兩種情況下,Windows 和 *nix,安裝點都是單獨的目錄。唯一的區別是,在 *nix 中,這些單獨的目錄是 , 的子目錄/C:而在 Windows 中,每個掛載點都直接掛載在/, 下My Computer

從使用者的角度來看,主要優點是安裝座完全透明。我不需要知道該目錄/home實際上位於單獨的分割區上。我可以將它用作普通目錄。相反,在 DOS 中,我必須透過掛載點的名稱明確地呼叫它,例如E:\home

外部驅動器在兩個系統中的安裝方式幾乎相同。比如說D:Windows 和/mnt/cdromLinux。這些都是一個目錄,我並沒有真正看出差異。當您在 Windows 下將 CDROM 放入磁碟機時,磁碟會D:像在 Linux 中一樣安裝。

相關內容