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


15

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

我在联机帮助页上检查了rm,但没有提及索引节点号。这样做rm inodenumber也不行。

这是什么命令?

Answers:


24

其他一些方法包括:

转义特殊字符:

[〜] $ rm \“ la \ *

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

[〜] $ ls -i
7404301“ la *

[〜] $ find。-maxdepth 1 -f型-inum 7404301
./"la*

[〜] $ find。-maxdepth 1 -f型-inum 7404301-删除
[〜] $ ls -i
[〜] $

嘿,使用find肯定比我的建议容易,我从没注意到-inum :)

Find有很多重大的探索要探索,说实话,这是我的瑞士军刀工具:)
John T 2010年

t:哦,是这样。
akira

Solaris没有“ -maxdepth”选项的“ -delete”。
guthrie 2014年

您应该使用该-xdev选项限制搜索,因为其他已挂载的文件系统可能还具有不相关的文件,且具有相同的inode编号。
乔纳斯·柏林

5

也许我想念一些东西,但是...

rm '"la*'

无论如何,文件名没有索引节点,文件没有。尝试删除文件而不删除所有指向该文件的文件名将损坏您的文件系统。


好吧,这仅适用于当前目录,但这确实是值得关注的原因。愚蠢的我错过了。仍然不会删除文件。
KdgDev'5

3
当然不是。仅当没有更多文件名指向该文件且没有打开该文件的进程时,该文件才被删除。
伊格纳西奥·巴斯克斯

5

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

例如,对于ext2 / 3/4,该debugfs命令具有“ kill_file”选项,该选项似乎带有一个inode。如其他答复中所述,这损坏您的文件系统,因为将存在指向不存在的文件的目录条目。fsck之后运行可能可以修复此问题。您不太可能在已挂载的文件系统上执行此操作。

但我强烈建议您使用适当的转义/引用,rm并使用前面的响应中提到的常规命令删除此类文件-并rm -i在处理包含*等通配符的文件名时使用额外的安全性


1

虽然我强烈建议您使用“转义特殊字符”方法,但是clri当您真正想要可修复的文件系统损坏时,总会使用该命令。


2
应当指出,clri通常仅在Oracle系统(例如SunOS)上存在。
can-ned_food


1

我面临的挑战是删除以破折号开头的文件名-rm始终希望将其解释为主机名。我通过使用以下方法解决了这个问题:

rm ./-g4xxx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.