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'.

관련 정보