debugfsのext4ファイルシステムで「filen / ame」(スラッシュ付き)という名前のファイルを削除する方法は?


26

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?を使用してファイルを削除する方法はありますか?


スラッシュ(filen\/ame)のエスケープは機能しませんか?
JAB

17
+1、おめでとうございます。シェルコマンドで文字を正しく引用またはエスケープするだけでは問題が解決しない、「ファイル名に含まれる奇妙な文字」の2つのケースのうちの1つを見つけることができました。(もう1つはファイル名の
ヌルバイトに

回答:


33

修正したいだけで試していない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   

3
e2fsck持っている-f「ファイルシステムがcleanな場合でも、」フルチェックにつながるORCEオプションを。
デビッドフォースター

3

fsckの動作に関する卒業。何らかの理由でそれがうまくいかなかった場合の答えはさls -i1が続くumountと、その後clri

参照:http : //docstore.mik.ua/orelly/unix/upt/ch23_13.htm

私は実際にこの方法をテストしました。


これがLinuxの場合(それがそうであるように見える)、それがclri(他のUnixシステムのように)別個のコマンドではなく、内部のサブコマンドであることに注意する価値がありdebugfsます。
ホッブズ

@hobbs:私の物を珍しくする必要があります。ああ待ってください、nvm clriはエコー "clri $ 2"でした| debugfs "$ 1"
ジョシュア

とにかくfsckを実行する必要があります-これEntry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?により、他の回答に記載されているメッセージの代わりにメッセージが表示されますが、clriを実行することは余分なステップです。debugfs内からこれを純粋に解決する方法はないようです。
Random832

@ Random832:過去にfsckを修正しなかった。:(
ジョシュア

-1

ファイルをディレクトリに移動すると、ファイルが含まれるディレクトリを削除できます。

mkdir foo 
mv filen* foo
rm -rf foo

1
これは、他の厄介なファイル名では機能しますが、その中にあるファイル名では機能しません/
-zwol
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.