使用 inode 编号在 Linux 上删除文件

Kdg*_*Dev 15 linux unix inode

如果您在 UNIX/Linux 上使用特殊字符(例如 )创建文件touch \"la*,则无法使用rm "la*. 您必须使用 inode 编号(\我知道,如果您在名称前添加 ,则可以,但您必须以用户身份猜测它在文件创建中使用过)。

我检查了 rm 的联机帮助页,但没有提到 inode 编号。做rm inodenumber也不行。

这是什么命令?

Joh*_*n T 25

其他一些方法包括:

转义特殊字符:

[~]$rm \"la\*

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

[~]$ls -i
7404301“拉*

[~]$查找。-maxdepth 1 -type f -inum 7404301
./"拉*

[~]$查找。-maxdepth 1 -type f -inum 7404301 -delete
[~]$ls -i
[~]$


小智 6

我总是用这个:

# 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
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

也许我错过了一些东西,但是......

rm '"la*'
Run Code Online (Sandbox Code Playgroud)

无论如何,文件名没有inode,文件有。尝试删除文件而不删除指向它的所有文件名会损坏您的文件系统。

  • 当然不是。仅当没有更多文件名指向该文件并且没有进程将其打开时,才会删除该文件。 (3认同)

小智 5

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

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

但是我强烈建议您只使用适当的转义/引用rm并使用前面的回复中提到的常规命令删除此类文件- 并rm -i在处理包含诸如 * 之类的通配符的文件名时使用以提高安全性