debugfs의 ext4 파일 시스템에서“filen / ame”(슬래시 포함) 파일을 삭제하는 방법은 무엇입니까?


26

debugfs변경 / 사고로 e2fsprogs 를 사용하여 이름 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?를 사용하여 파일을 제거하는 방법이 있습니까?


슬래시 ( filen\/ame) 이스케이프가 작동하지 않습니까?
JAB

17
+1, 축하합니다. 쉘 명령에서 문자를 정확하게 인용 및 / 또는 이스케이프 처리해도 문제가 해결되지 않는 "파일 이름의 이상한 문자"의 두 가지 경우 중 하나를 발견했습니다. (다른 파일은 파일 이름에 널 바이트가 될 것입니다. 그러나 대부분의 파일 시스템에서는 이름이 잘릴 것이라고 생각합니다.)
Ilmari Karonen

답변:


33

수정을 원하고 시도하는 것이 아니라면 fsck 가 작업을 수행하도록 debugfs할 수 있습니다. 파일 시스템을 더티로 표시하고 파일 이름을 변경하기 위해 실행 하십시오.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   

3
e2fsck-f"파일 시스템이 깨끗해 보이는 경우에도"전체 검사로 연결 되는 orce 옵션이 있습니다.
David Foerster

3

fsck 작동에 대한 축하; 어떤 이유로 작동하지 않은 경우 대답은 ls -i1다음 umount다음 clri.

참조 : http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

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


이것이 리눅스라면 ( clri다른 유닉스 시스템에서와 같이) 별도의 명령이 아니라는 것을 주목할 가치가 있습니다 debugfs.
hobbs

@ hobbs : 그때 내 것을 특이하게 만들어야합니다. 아 잠깐만 요, nvm clri는 "clri $ 2"입니다. debugfs "$ 1"
Joshua

당신의 지시는 어쨌든 fsck를 실행해야합니다- Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?다른 대답에서 언급 된 메시지 대신 메시지로 문제를 해결할 것입니다.하지만 clri를 수행하는 것은 추가 단계입니다. debugfs 내 에서이 문제를 완전히 해결할 수있는 방법이없는 것 같습니다.
Random832

@ Random832 : 나는 fsck가 과거에 그것을 스스로 고치지 않았다. :(
Joshua

-1

파일을 디렉토리로 이동하면 파일이있는 디렉토리를 삭제할 수 있습니다.

mkdir foo 
mv filen* foo
rm -rf foo

1
이것은 어떤을 위해 일하는 것이 다른 어색한 파일 이름,하지만이 파일 이름에 대해 작동하지 않습니다 /거기에.
zwol
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.