it-swarm.cn

发出rm命令时文件会去哪里?

最近,我不小心对一组文件做了rm,这让我开始思考这些文件到底在哪里?

也就是说,在使用GUI时,已删除的文件将进入垃圾箱。 rm的等效项是什么,有没有办法撤消rm命令?

108
boehj

无处,消失,消失。好吧,更具体地说,该文件将取消链接。数据仍位于磁盘上,但已删除链接。过去曾经可以检索数据,但是如今元数据已清除,无法恢复。

rm没有垃圾桶,也不应该有。如果您需要垃圾桶,则应使用更高级别的界面。 Ubuntu上的trash-cli中有一个命令行实用程序,但是大多数时候,诸如Nautilus或Dolphin之类的GUI文件管理器都用于提供标准垃圾箱。垃圾桶本身就是标准的。在Nautilus的“废纸rash”中将可以看到在Dolphin中垃圾的文件。

垃圾桶通常会将文件移动到~/.local/share/Trash/files/之类的地方。 UNIX/Linux上的rm命令与DOS/Windows上的del相当,后者也删除并执行not将文件移动到回收站。要实现的另一件事是,将文件跨文件系统从硬盘驱动器移动到USB磁盘实际上是1)复制文件数据,然后2)取消原始文件的链接。您不希望这些多余的副本填满您的垃圾箱。

126
penguin359

对于ext3/ext4,您可以尝试使用 extundeleteext3grep 之类的工具恢复文件,甚至使用低级结构 messing手动 (不是为了胆小者);对于许多文件系统,您可以尝试按某些模式搜索尚未覆盖的块(例如 magicrescue 可以搜索JPEG标头)。请注意,这些正在使用试探法从遗留的元数据中恢复文件,因此不能保证完全恢复-这更多是最后机会(因为这些要求文件中保留一些痕迹,并且块还没有被覆盖)。

因此,出于所有目的和目的,用rm删除的文件不见了-您可以try这些工具所提供的死灵性,但不要不必依赖它:这些都是在其他所有方法都失败时可以尝试的工具。更好地挖掘出最新的备份(您一直在进行备份,对吧?哦,好了,生活和学习...)。

11

关于撤消rm的影响:

鉴于大多数文件系统仅删除对数据的引用并指示这些块为空闲块,因此您可以尝试直接从设备中查找数据读取。幸运的是,没有人要求包含您文件的块。

假设您要寻找的东西非常独特,并且系统上有root,并且我猜测将跨越一个以上文件系统块(可能是4k)的任何东西拼凑在一起,如果文件系统无法将文件放置在连续的块中。

我已经成功恢复了几个纯文本文件的内容,方法是在文件系统所在的设备上运行字符串,并使用grep从具有较大上下文的文件中查找内容(-C)。 (该事件发生后不久,该公司决定花费一些资源来实施备份)

8
Kjetil Jorgensen

每当使用rm命令删除文件时,就永远不会删除文件的数据。换句话说,文件系统中包含数据的块仍然存在。

当您运行rm命令时,系统将属于该文件的inode标记为未使用,并且将该文件的数据块也标记为未使用(但不会清除)。但是,在删除文件时,ext3将inode中的大多数字段清零。

正常的未使用标记是为了提高速度...否则要删除它会花费更多时间。这就是为什么您可能会注意到删除大型文件的速度更快(如果未覆盖数据块,则可以恢复数据)。

更多信息: 节点结构文件删除方式

6
sarath

在Unix风格的文件系统中(包括Linux),文件并不是真正位于任何特定位置。相反,系统使用硬链接指向大量数据块。因此,当您创建文件时,还创建了它的第一个硬链接:实际上位于您“保存”文件的位置的链接。如果您进行更多的硬链接,则据系统所知,该文件实际上实际上一次存在于多个位置。

当您“删除”文件时,通常实际上您实际上只是删除指定位置上存在的硬链接。这就是为什么删除文件的系统调用称为unlink()。除非没有硬链接,否则系统实际上不会删除该文件。但是,一旦最后一个硬链接被销毁,数据也将被销毁。

那么,您删除的文件在哪里呢?如果仍然存在硬链接,则这些文件位于您未删除的硬链接所在的位置。如果没有剩余的硬链接,则文件将消失。

3
The Spooniest

如果文件最近被删除,也请查看〜/ .snapshot。

0
Andy