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
を使用してファイルを削除する方法はありますか?
修正が必要で、単に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
Fsckの動作についておめでとうございます。何らかの理由でうまくいかなかった場合の答えはls -i1
の後にumount
が続き、次にclri
が続きます。
参照: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm
私は実際にこの方法をテストしました。