在/
目錄中並使用時,ls -a
結果將包含.
和..
我可以理解 的存在,.
它是目錄本身的指標。目錄..
中有/
,而沒有父目錄,這是什麼意思/
?
答案1
許多軟體都是基於假設工作的,不是事實上,POSIX.1 向他們保證,但傳統上是 UNIX 系統上的情況,並被許多 UNIX 文獻所銘記(引用一篇這樣的 UNIX 文獻):
每個目錄包含檔案名稱 dot 和 dot-dot (.
和..
),其 inode 編號分別是該目錄及其父目錄的 inode 編號。[…]程式mkfs
初始化一個檔案系統,以便根目錄的.
和具有該檔案系統的根 inode 號碼。..
——莫里斯·J·巴赫 (1986)。UNIX 作業系統的設計。 普倫蒂斯·霍爾。 p。 73
例如:舊的getcwd()
函式庫函數(在沒有為其提供特殊核心支援的系統上)依賴於此知道何時停止..
在構成目前目錄名稱時追蹤條目鏈。當它到達作為其父級的目錄或無法遍歷到 時,它將停止..
。
所以根目錄的原因(或至少就應用程式模式程式而言)出現透過系統 API 看到的)一個..
條目是很多東西都是基於這樣的假設:每一個目錄有..
,且..
根中的 是一個循環,可用於檢測是否位於根。
POSIX.1 其實不保證根目錄有一個..
,只是指定程序必須考慮循環的可能性,如果..
根目錄下有一個。這是為了讓非 UNIX 系統也符合 POSIX 標準。有些檔案系統缺席of..
表示該目錄是根目錄。正如巴赫本人所討論的,有些系統有一個目錄多於根,POSIX.1 在討論以以下開頭的絕對路徑名時允許使用根二斜線(類似於 Microsoft 區域網路系統中使用的通用命名約定)。
然而,Linux(以及 Ubuntu Linux)提供了 UNIX 範例的更嚴格的保證。
答案2
很簡單:透過檔案目錄,./
意味著這個資料夾, 而../
意味著文件在哪裡(例如,當我在目錄中時user/home/me/Desktop
,然後../
會將我帶到/user/home/me
)。