最近我不小心处理了rm
一组文件,这让我思考这些文件到底在哪里?
也就是说,在使用 GUI 时,删除的文件会进入垃圾箱。相当于什么rm
?有没有办法撤消rm
命令?
答案1
无处可去,不见了,消失了。嗯,更具体地说,文件被取消链接。数据仍然位于磁盘上,但指向它的链接已删除。过去可以检索数据,但现在元数据已被清除,无法恢复。
没有rm
也不应该有垃圾桶。如果您需要垃圾桶,则应该使用更高级别的接口。 Ubuntu 上有一个命令行实用程序trash-cli
,但大多数时候使用 Nautilus 或 Dolphin 等 GUI 文件管理器来提供标准垃圾桶。垃圾桶本身就是标准的。在 Dolphin 中删除的文件将在 Nautilus 的垃圾箱中可见。
文件通常会被移动到某个地方,就像~/.local/share/Trash/files/
被扔掉一样。 UNIX/Linux 上的命令rm
与 DOS/Windows 上的命令相当,del
它也删除并执行不是将文件移至回收站。另一件需要意识到的事情是,跨文件系统移动文件(例如从硬盘驱动器移动到 USB 磁盘)实际上是 1) 文件数据的副本,然后是 2) 取消原始文件的链接。您不希望您的垃圾箱被这些额外的副本填满。
答案2
对于 ext3/ext4,您可以尝试使用以下工具恢复文件扩展删除或者ext3grep,甚至去混乱与低层结构手动(不适合胆小的人);对于许多文件系统,您可以尝试通过某些模式搜索尚未覆盖的块(例如魔法救援可以搜索 JPEG 标头等)。请注意,这些方法使用启发式方法从留下的元数据中恢复文件,因此不能保证完全恢复 - 这更像是最后机会的赌注(因为这些要求文件的一些痕迹保留在日志中,并且块尚未被覆盖)。
因此,出于所有意图和目的,删除的文件都rm
消失了 - 您可以尝试这些工具提供了这样的死灵术,但不要依赖它:当其他一切都失败时,可以尝试这些工具。最好找出你最新的备份(你一直在做备份,对吧?哦,活到老学到老……)。
答案3
关于消除以下影响rm
:
鉴于大多数文件系统仅删除对数据的引用并指示块空闲,您可以尝试直接从设备读取数据。幸运的是,包含您的文件的块尚未被其他东西占用。
这假设您在系统上有一些相当独特的东西需要寻找,root
并且我猜测如果文件系统无法管理,将跨越多个文件系统块(可能是 4k)的任何东西拼凑在一起可能会非常费力将文件放入连续的块中。
grep
我通过在文件系统所在的设备上运行字符串并使用从具有大上下文的这些文件中查找内容(-C
),成功恢复了几个纯文本文件的内容。 (该事件发生后不久,该公司决定花费一些资源来实施备份)
答案4
在 Unix 风格的文件系统(包括 Linux 上)中,文件并不真正“位于”任何特定位置。相反,系统使用硬链接来指向相当于一大块数据的片段。因此,当您创建文件时,您还创建了它的第一个硬链接:实际位于您“保存”文件的位置的硬链接。如果您创建更多的硬链接,那么据系统所知,该文件实际上同时存在于多个位置。
当您“删除”文件时,通常您实际上只是删除了指定位置处存在的硬链接。这就是为什么调用删除文件的系统调用unlink()
。在没有留下任何硬链接之前,系统不会真正删除该文件。但一旦最后一个硬链接被破坏,数据也会被破坏。
那么,您删除的文件去了哪里?如果仍然存在硬链接,则它们的文件位于您未删除的硬链接所在的位置。如果没有留下硬链接,文件就会消失。