Filesystems

為什麼我不能刪除“。”目錄?

  • June 15, 2016

我嘗試刪除“。” 目錄。我以為我可以刪除我的工作目錄而不必進入父目錄。

我的問題的重點是尋找一些關於 linux 系統如何工作以刪除文件的見解。

刪除目前目錄不會影響文件系統的完整性或其邏輯組織。防止刪除是為了遵循手冊頁.中所述的 POSIX 標準:rmdir(2)

如果路徑參數引用的路徑的最終組件是點或點-點,則 rmdir() 將失敗。

可以在rm手冊頁中找到一個基本原理:

rm 實用程序禁止刪除名稱 dot 和 dot-dot 以避免無意中執行以下操作的後果:

rm -r .*

另一方面,顯式刪除目前目錄(即通過聲明其完整或相對路徑)在 Unix 下是允許的操作,至少從 SVR3 開始,因為它在 Unix 版本 7 直到 SVR2 中被禁止。這與刪除正在讀取或寫入的文件時發生的情況非常相似。訪問刪除文件的程序會繼續它們的讀寫操作,就像什麼都沒發生一樣。刪除程序目前目錄後,該目錄無法通過其路徑訪問,但其 inode 仍存在於文件系統中,直到程序終止或更改其自己的目錄。

請注意,該程序將無法使用相對於其目前目錄的路徑來更改其 cwd(例如cd ..),因為在其目前目錄中沒有更多..條目。

當有人鍵入rmdir .時,他們可能希望刪除目前目錄條目,但是當刪除目錄(使用其路徑)時,實際上刪除了三個目錄條目..., 和目錄本身。

僅刪除.而不刪除此目錄的目錄條目會創建不兼容的目錄,但如前所述,標準禁止這樣做。

.正如@Emmanuel 正確指出的那樣,不允許刪除還有第二個原因。至少有一個兼容 POSIX 的作業系統(帶有 HFS+ 的 Mac OS X),具有嚴格的限制,支持創建到現有目錄的硬連結。在這種情況下,從目錄內部沒有明確的方法可以知道哪個硬連結是預期被刪除的。

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