如何取消連結(刪除)特殊的硬連結“。”為文件夾創建?
在 Linux 上,當您創建文件夾時,它會自動創建兩個指向相應 inode 的**硬連結。**一個是您要求創建的文件夾,另一個是
.
此文件夾的特殊文件夾。例子:
$ mkdir folder $ ls -li total 0 124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 folder $ ls -lai folder total 0 124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 . 124593716 drwxr-xr-x 3 fantattitude staff 102 18 oct 16:52 ..
如您所見,
folder
和.
內部folder
具有相同的 inode 編號(顯示為-i
選項)。無論如何要刪除這個特殊
.
的硬連結?這只是為了實驗和好奇。 另外我想答案也可能適用於
..
特殊文件。我試圖調查
rm
人,但找不到任何方法。當我嘗試刪除.
所有我得到的是:R M: ”。” 和“..”可能不會被刪除
我真的很好奇這些事情的整個運作方式,所以不要避免在這個問題上非常冗長。
編輯:也許我的文章不清楚,但我想了解負責
.
文件的底層機制以及無法刪除它們的原因。我知道 POSIX 標準不允許使用少於 2 個硬連結的文件夾,但不明白為什麼。我想知道是否有可能做到這一點。
.
至少在 EXT4 文件系統上,在技術上可以刪除。如果您在 中創建文件系統映像test.img
,掛載它並創建一個test
文件夾,然後再次解除安裝它,您可以使用以下命令對其進行編輯debugfs
:debugfs -w test.img cd test unlink .
debugfs
不會抱怨並儘職地刪除.
文件系統中的目錄條目。該test
目錄仍然可用,令人驚訝的是:sudo mount test.img /mnt/temp cd /mnt/temp/test ls
只顯示
..
所以
.
真的沒了。然而cd .
,,仍然像往常一樣ls .
!pwd
我之前使用 完成了這個測試
rmdir .
,但是刪除了目錄的 inode(非常感謝BowlOfRed指出了這一點),這留下test
了一個懸空的目錄條目,這是遇到問題的真正原因。在這種情況下,test
文件夾將變得不可用;安裝映像後,執行ls
產生ls: cannot access '/mnt/test': Structure needs cleaning
並且核心日誌顯示
EXT4-fs error (device loop2): ext4_lookup:1606: inode #2: comm ls: deleted inode referenced: 38913
e2fsck
在這種情況下在映像上執行會test
完全刪除目錄(目錄 inode 已消失,因此無法恢復)。所有這些都表明它
.
作為 EXT4 文件系統中的特定實體存在。我從核心中的文件系統程式碼中得到了它期望.
並..
存在的印象,如果它們不存在就會發出警告(請參閱 參考資料namei.c
),但是在unlink .
基於 - 的測試中我沒有看到該警告。e2fsck
不喜歡失去的.
目錄條目,並提供修復它:$ /sbin/e2fsck -f test.img e2fsck 1.43.3 (04-Sep-2016) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Missing '.' in directory inode 30721. Fix<y>?
這將重新創建
.
目錄條目。