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


98

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

也就是说,在使用GUI时,已删除的文件将进入垃圾箱。这等效于什么,rm并且有什么方法可以撤消rm命令?


3
可能是重复的。在Linux上撤消。但是我不太确定文件的存放位置与撤消文件的位置完全不同。
xenoterracide 2011年

Answers:


120

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

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

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


4
非常感谢您的明确解释。我不介意使用CLI,只需要在使用通配符时多加注意。:)
boehj 2011年

16
我会谨慎使用诸如libtrash更改rm的行为。许多脚本用于rm清理文件,并且您不希望这些脚本显示在“废纸rash”中。我建议使用专用的命令,例如trash来自trash-cli软件包的命令。@pedro我应该补充一点,我曾经在主目录中创建了一个文件*。当我不应该创建它时,我不小心引用了*,因此我决定自然地用rm *将其删除。当我意识到我的所作所为后,我迅速取消了该命令,但该命令已经删除了我的主目录中的许多文件。
penguin359'4

4
在外壳中很少有像垃圾桶这样的东西,因此,如果将其添加到本地计算机上并习惯了它,或者甚至在日常工作中依赖于它,那就很少。如果不使用unix:s的其他99%中的一些而不使用一个,就会遇到麻烦
Johan

3
我认为这里带给我的信息是,我需要在凌晨停止CLI和更好地关注。
boehj 2011年

2
沿着相同的路线是什么@Johan说,RedHat的使用(仍然如此?)设置别名,像命令cp,并且mv,以cp -imv -i为根运行时。这会更改默认行为,因此这些命令将始终在覆盖现有文件之前询问。一些系统管理员建议专门删除这些别名,这样您就不会期望这种行为在遵循默认行为的另一个系统上最终可能致命。
penguin359

11

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

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


2
对于高价值的文本数据,您始终可以使用任何强大的通用工具(甚至是emacs或perl)来查看包含已删除文件的磁盘的“原始设备”,并搜索已知的字符串。我已经通过这种方式为人们恢复了Word文档。他们会损失加价幅度,但可以恢复大部分文字。显然,这是灾难恢复,而不是“撤消”。
Alexis 2013年

正确的“手动”链接:web.archive.org/web/20131221183925/http
//…

8

关于消除以下影响rm

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

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

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


稍微复杂一点,例如通过ext3将inode中的块指针清零,但是可以的,如果文件足够小或分配在连续的块中,则直接查找文件可能会起作用。有时这称为文件雕刻,有些工具magicrescue会尝试根据其独特的样式查找图像或声音。
Piskvor 2011年

6

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

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

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

更多信息:Inode结构文件删除如何工作


...除非文件被明确标记为chattr +s(“ shred”)属性。它告诉文件系统在删除时使用零专门覆盖此文件。仅某些文件系统将支持该属性。
telcoM

3

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

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

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


0

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


4
仅当您具有提供该功能的魔术文件系统(例如NetApp)或使用特殊版本的rm时,此方法才有效。
mattdm 2012年
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.