debugfs의 ext4 파일 시스템에서 "filen/ame"(슬래시 포함)이라는 파일을 어떻게 삭제합니까?

debugfs의 ext4 파일 시스템에서 "filen/ame"(슬래시 포함)이라는 파일을 어떻게 삭제합니까?

e2fsprogs 사용시 debugfs변경/사고로 인해 filen/ame이라는 파일이 생성되었습니다. 분명히 슬래시 문자는 /경로 이름에서 특수 구분 기호 역할을 합니다.

계속 사용하고 있습니다 debugfs. 이름이 지정된 파일을 삭제하고 싶지만 문자가 파일 이름의 일부로 해석되지 않기 filen/ame때문에 거의 성공하지 못합니다 ./

debugfs는 슬래시가 포함된 파일을 삭제하는 방법을 제공합니까? 그렇다면 어떨까요?

나는 다음을 사용했다:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs

출력:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame

파일 을 삭제하기 위해 다음을 시도했습니다 filen/ame.

debugfs -w -R "rm filen/ame" /tmp/ext4fs

그러나 이것은 작동하지 않았고 단지 다음과 같이 생성되었습니다.

debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename

디렉토리 노드의 내용을 수동으로 변경하는 것 외에 파일 삭제를 사용할 수 있는 방법이 있습니까 debugfs?

답변1

문제를 해결하고 싶지만 시도만 하지 않는다면 다음을 debugfs수행할 수 있습니다.FSCK당신을 위해 일을 하고 있습니다. 파일 시스템을 더티로 표시하고 실행하여 fsck -y파일 이름을 변경합니다.

$ debugfs -w -R "dirty" /tmp/ext4fs
$ fsck -y /tmp/ext4fs
 ...
/tmp/ext4fs was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'filen/ame' in / (2) has illegal characters in its name.
Fix? yes
 ...
$ debugfs -w -R "ls" /tmp/ext4fs
2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen.ame   

답변2

fsck 작업을 축하 합니다 . 어떤 이유로 작동하지 않으면 대답은 ls -i1다음과 같습니다 .umountclri

인용하다:http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

실제로 이 방법을 테스트해봤습니다.

답변3

파일을 디렉터리로 이동하면 파일이 포함된 디렉터리를 삭제할 수 있습니다.

mkdir foo 
mv filen* foo
rm -rf foo

관련 정보