Bash
如何手動修改inode?
我正在使用 Ubuntu Linux,只是為了好玩,我想創建一個指向目錄的硬連結(如此處所示)。因為我這樣做只是為了好玩,我不是在尋找其他人編寫的任何類型的預先開發的目錄硬連結軟體,我想知道如何自己做。那麼,我如何直接手動修改inode?
理想情況下,我希望將答案作為可以從 Bash 命令行執行的 Linux 命令,但如果無法從那裡執行此操作,我也會接受有關如何在 C 中執行此操作的資訊,或者(作為最後的手段)元件。
這取決於文件系統。對於 ext4,您可以使用 debugfs 執行此操作,如下所示:
dennis@lightning:/tmp$ dd if=/dev/zero of=ext4.img bs=1M count=100 104857600 bytes (105 MB) copied, 0.645009 s, 163 MB/s dennis@lightning:/tmp$ mkfs.ext4 ext4.img mke2fs 1.42.5 (29-Jul-2012) ext4.img is not a block special device. Proceed anyway? (y,n) y ... Writing superblocks and filesystem accounting information: done dennis@lightning:/tmp$ mkdir ext4 dennis@lightning:/tmp$ sudo mount ext4.img ext4 dennis@lightning:/tmp$ mkdir -p ext4/test/sub/ dennis@lightning:/tmp$ sudo umount ext4 dennis@lightning:/tmp$ debugfs -w ext4.img debugfs 1.42.5 (29-Jul-2012) debugfs: link test test/sub/loop ^D dennis@lightning:/tmp$ ls ext4/test/sub/loop/sub/loop/sub/loop/sub/loop/sub/loop/ total 1 drwxrwxr-x 2 dennis dennis 1024 mrt 26 12:15 sub
筆記:
- 您不能直接連結到父級,因此
foo/bar
不能連結到foo
,因此是額外的目錄。- 你不應該在掛載的文件系統上執行 debugfs。如果這樣做,您將需要在進行更改後解除安裝/掛載。
find 和 ls 之類的工具仍然不會循環:
dennis@lightning:/tmp$ find ext4 ext4 ext4/lost+found find: `ext4/lost+found': Permission denied ext4/test ext4/test/sub find: File system loop detected; `ext4/test/sub/loop' is part of the same file system loop as `ext4/test'.