使用 inode 号在 Linux 上删除文件

使用 inode 号在 Linux 上删除文件

如果您在 UNIX/Linux 上创建了一个包含特殊字符(例如 )的文件,则touch \"la*无法使用 删除它rm "la*。您必须使用 inode 编号(\我知道,如果您在名称前添加 ,则可以,但作为用户,您必须猜测它是在文件创建过程中使用的)。

我查看了 rm 的手册页,但没有提到 inode 编号。这样做rm inodenumber也不起作用。

这个命令是什么?

答案1

其他一些方法包括:

转义特殊字符:

[~]$rm \"la\*

使用 find 命令并仅搜索当前目录。 find 命令可以搜索 inode 编号,并且有一个方便的-delete开关:

[~]$ls -i
7404301 “啦*

[~]$find . -maxdepth 1 -type f -inum 7404301
./“啦*

[~]$find . -maxdepth 1 -type f -inum 7404301 -delete
[~]$ls -i
[~]$

答案2

我总是用这个:

# retrieve the inode number
sav@ubuntu:~$ ls -il
total 8
415984 -rw-rw-r-- 1 sav sav    0 Apr 11 10:07 '"la*'
417981 drwxrwxr-x 2 sav sav 4096 Apr 11 09:44  ]rf
415985 -rw-rw-r-- 1 sav sav   11 Apr  8 16:24  text

# use find/delete
find . -inum 415984 -delete

答案3

如果你真的想要这样做 - 而您的用例看起来根本不需要这样做,您可以尝试文件系统调试工具。如果您愿意失去一切,那就是这样。

例如,对于 ext2/3/4,该debugfs命令有一个“kill_file”选项,似乎需要 inode。正如其他回复中提到的,这将要损坏您的文件系统,因为会有目录条目指向不存在的文件。fsck之后运行可能会修复此问题。您不太可能在已安装的文件系统上执行此操作。

但我会强烈推荐您只需使用适当的转义/引用,然后使用常规rm命令删除此类文件,如先前的回复中所述 - 并rm -i在处理包含通配符(如 *)的文件名时使用额外的安全性

答案4

您可以通过调用 来删除以破折号开头的文件rm -- filename

相关内容