Answers:
无处,消失,消失。好吧,更具体地说,该文件将取消链接。数据仍位于磁盘上,但已删除链接。过去曾经可以检索数据,但是如今,元数据已被清除,无法恢复。
没有垃圾桶rm
,也不应有。如果您需要垃圾桶,则应使用更高级别的界面。trash-cli
Ubuntu上有一个命令行实用程序,但是大多数时候,GUI文件管理器(如Nautilus或Dolphin)用于提供标准的垃圾箱。垃圾桶本身就是标准的。在Nautilus的“废纸rash”中将可以看到在Dolphin中垃圾的文件。
文件通常被移到垃圾桶等地方~/.local/share/Trash/files/
。rm
UNIX / Linux上的命令与del
DOS / Windows上的命令相当,后者也删除文件且不会将文件移动到回收站。要实现的另一件事是,将文件跨文件系统从硬盘驱动器移动到USB磁盘实际上是1)复制文件数据,然后2)取消原始文件的链接。您不希望这些多余的副本填满您的垃圾箱。
libtrash
更改rm的行为。许多脚本用于rm
清理文件,并且您不希望这些脚本显示在“废纸rash”中。我建议使用专用的命令,例如trash
来自trash-cli
软件包的命令。@pedro我应该补充一点,我曾经在主目录中创建了一个文件*。当我不应该创建它时,我不小心引用了*,因此我决定自然地用rm *将其删除。当我意识到我的所作所为后,我迅速取消了该命令,但该命令已经删除了我的主目录中的许多文件。
cp
,并且mv
,以cp -i
和mv -i
为根运行时。这会更改默认行为,因此这些命令将始终在覆盖现有文件之前询问。一些系统管理员建议专门删除这些别名,这样您就不会期望这种行为在遵循默认行为的另一个系统上最终可能致命。
对于ext3 / ext4,您可以尝试使用extundelete或ext3grep之类的工具恢复文件,甚至可以手动弄乱低级结构(不是出于胆小)。对于许多文件系统,您可以尝试按某些模式搜索尚未覆盖的块(例如,magicrescue可以搜索JPEG标头等)。请注意,这些正在使用试探法从遗留的元数据中恢复文件,因此不能保证完全恢复-这更多是最后机会(因为这些要求文件中保留一些痕迹,并且块还没有被覆盖)。
因此,出于所有目的和目的,与一起删除的文件rm
都不见了-您可以尝试使用这些工具所提供的死灵法术,但不要依赖它:这些工具可以在其他所有方法失败时进行尝试。最好挖掘出最新的备份(您一直在进行备份,对吧?哦,好了,生活和学习...)。
关于消除以下影响rm
:
鉴于大多数文件系统仅删除对数据的引用并指示这些块为空闲块,因此您可以尝试查找直接从设备读取的数据。幸运的是,没有人要求包含您文件的块。
假设您要寻找的东西非常独特,并且root
系统上有,我想如果文件系统无法管理,那么将跨越一个以上文件系统块(可能是4k)的所有东西拼凑在一起可能会非常费力将文件放置在连续的块中。
通过在文件系统所在的设备上运行字符串,并使用grep
具有较大上下文(-C
)的文件查找内容,我已成功恢复了几个纯文本文件的内容。(该事件发生后不久,该公司决定花费一些资源来实施备份)
magicrescue
会尝试根据其独特的样式查找图像或声音。
每当使用rm
命令删除文件时,就永远不会删除文件的数据。换句话说,文件系统中包含数据的块仍然存在。
发生的是,当您运行rm
命令时,系统将属于该文件的inode标记为未使用,并且将该文件的数据块也标记为未使用(但不会清除)。但是ext3
,在删除文件时,会将索引节点中的大多数字段都置零。
正常的未使用标记是为了提高速度...否则删除将花费更多时间。这就是为什么您可能会注意到删除大型文件的速度更快(如果不覆盖数据块,则可以恢复数据)。
chattr +s
(“ shred”)属性。它告诉文件系统在删除时使用零专门覆盖此文件。仅某些文件系统将支持该属性。
在Unix风格的文件系统中(包括Linux),文件并不是真正位于任何特定位置。相反,系统使用硬链接指向大量数据块。因此,当您创建文件时,还创建了它的第一个硬链接:实际上位于您“保存”文件的位置的链接。如果您进行更多的硬链接,则据系统所知,该文件实际上实际上一次存在于多个位置。
当您“删除”文件时,通常实际上您实际上只是删除指定位置上存在的硬链接。这就是调用删除文件的系统调用的原因unlink()
。除非没有硬链接,否则系统实际上不会删除该文件。但是,一旦最后一个硬链接被销毁,数据也将被销毁。
那么,您删除的文件在哪里呢?如果仍然存在硬链接,则这些文件位于您未删除的硬链接所在的位置。如果没有剩余的硬链接,则文件将消失。