inodeを手動で修正する方法は?

inodeを手動で修正する方法は?

私はUbuntu Linuxを使用しており、楽しくディレクトリへのハードリンクを作成したいと思います(図を参照)。ここ)。私はただ楽しんでこれをやっていて、他の人が書いたあらかじめ開発されたディレクトリハードリンクソフトウェアを見つけるのではないので、自分で行う方法を知りたいです。それでは、インデックスノードを手動で直接変更する方法は?

理想的には、Bashコマンドラインで実行できるLinuxコマンドに答えたいと思います。ただし、そこで実行できない場合は、Cで実行する方法に関する情報も許可します。リゾート)組み立て。

答え1

ファイルシステムによって異なります。 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'.

関連情報