樹狀目錄(tree-structured directory)
想像一棵家族樹,或公司組織圖的分支方式:頂端一個方框,分支再裂成子分支,末端是葉子。樹狀目錄正是這樣組織檔案的。最頂端是一個叫做根(root)的特殊目錄。從根開始,分支通往子目錄,子目錄再通往更下層的子目錄,而樹的葉子就是你真正的檔案。這是基本上每一個現代作業系統所採用的目錄結構。
讓它成為一棵樹的規則簡單而嚴格。有且只有一個根,在類 Unix 系統上寫作 /。每個目錄都可以包含檔案和其他目錄,要巢狀多深都行。而且最關鍵的是,每個檔案或目錄恰好只有一個父目錄,所以從根往下到任何特定項目恰好只有一條路徑——這就是為什麼像 /home/alice/notes/today.txt 這樣的名稱不會有歧義。那條路徑的每一步都選一個分支:從根進入 home、進入 alice、進入 notes、最後到達檔案。大多數目錄裡會出現兩個特殊項目:一個點代表這個目錄本身,兩個點代表父目錄——這就是你往回走向根的方式。
為什麼重要:樹給了我們一個既有組織又可導覽的統一命名空間——每個檔案都有清楚的位址、相關的檔案住在一起、不同使用者得到私有的分支。它是絕對路徑、目前工作目錄、以及把其他檔案系統掛載進樹的基礎。純樹一個誠實的限制就在那條嚴格的「單一父目錄」規則:它本身無法讓兩個不同的資料夾共享同一個檔案。要做到那一點,需要用連結把樹放寬成無環圖。
路徑 /home/alice/notes/today.txt 透過寫出「從根往下唯一的那條路線」來指名一個檔案:進入 home、進入 alice、進入 notes、到達 today.txt。因為每個項目只有一個父目錄,這個位址是唯一的——別處任何 today.txt 都不會和它相撞。
一個根、每個項目恰好一個父目錄,所以每條路徑都沒有歧義。
純樹的「單一父目錄」規則意味著它無法原生地讓兩個資料夾共享一個檔案;那需要透過連結的無環圖擴充。點與雙點項目是你指稱目前目錄與父目錄的方式。