最近,我不小心对一组文件做了rm,这让我开始思考这些文件的确切位置是什么?

,也就是说,在使用GUI时,已删除的文件进入了废纸rash。什么是rm的等效项,是否可以撤消rm命令?

评论

这可能是重复的。在Linux上撤消。但是我不太确定文件的存放位置是否与撤消文件的方式完全不同。

#1 楼

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

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

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

评论


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

– boehj
2011年4月8日在4:42

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

–penguin359
2011年4月8日,下午5:13

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

–约翰
2011年4月8日在7:04

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

– boehj
2011年4月8日在8:06

与@Johan所说的一样,RedHat曾经(仍然吗?)以root身份运行时将cp和mv之类的命令的别名设置为cp -i和mv -i。这会更改默认行为,因此这些命令将始终在覆盖现有文件之前询问。一些系统管理员建议专门删除这些别名,以免您最终不会期望该行为在遵循默认行为的另一个系统上最终可能致命。

–penguin359
2011年4月8日在8:13

#2 楼

对于ext3 / ext4,您可以尝试使用extundelete或ext3grep之类的工具来恢复文件,甚至可以手动弄乱底层结构(不是出于胆小);对于许多文件系统,您可以尝试按某些模式搜索尚未覆盖的块(例如magicrescue可以搜索JPEG标头等)。请注意,这些正在使用试探法从剩余的元数据中恢复文件,因此不能保证完全恢复-这更多是最后机会(因为这些要求文件中保留一些痕迹,并且块因此,出于所有意图和目的,用rm删除的文件已经消失了-您可以尝试使用这些工具提供的这种死法性,但不要依赖于此:它们是当其他一切都失败时尝试的工具。更好地挖掘出最新的备份(您一直在进行备份,对吧?哦,好了,生活和学习...)。

评论


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

–alexis
2013年12月7日14:05



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

– sjas
15年1月29日在22:56

#3 楼

关于撤消rm的影响:鉴于大多数文件系统仅删除对数据的引用并指示块为空闲,因此您可以尝试直接从设备中查找数据读取。幸运的是,包含文件的块没有被其他要求保护。

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

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

评论


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

– Piskvor离开了建筑物
2011年4月8日在20:48



#4 楼

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

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

为了加快速度,已完成了正常的未使用标记操作,否则删除将花费更多时间。因此,您可能会注意到删除甚至更大的文件也更快(如果不覆盖数据块,则可以恢复数据)。

更多信息:Inode结构,文件删除的工作原理

评论


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

–telcoM
18-2-4在21:29

#5 楼

在Unix风格的文件系统中(包括Linux),文件并不是真正位于任何特定位置。相反,系统使用硬链接指向大量数据块。因此,在创建文件时,还创建了它的第一个硬链接:实际上位于您“保存”文件的位置的那个硬链接。如果您创建更多的硬链接,那么据系统所知,该文件实际上实际上同时存在于多个位置。存在于您指定的位置。这就是为什么删除文件的系统调用称为unlink()的原因。除非没有硬链接,否则系统实际上不会删除该文件。但是,一旦最后一个硬链接被销毁,数据也将被销毁。

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

#6 楼

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

评论


仅当您有提供该功能的魔术文件系统(例如NetApp)或使用特殊版本的rm时,此方法才有效。

–mattdm
2012年3月8日,3:18