使用 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
后面是umount
然后clri
。
参考:http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm
这个方法我实际测试过。
答案3
如果将文件移动到某个目录,则可以删除包含该文件的目录。
mkdir foo
mv filen* foo
rm -rf foo