rm 命令发出后文件去哪了?

boe*_*ehj 129 command-line rm trash

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

也就是说,在使用 GUI 时,删除的文件会进入废纸篓。什么是等价的rm,有没有办法撤消rm命令?

pen*_*359 143

无处,消失,消失。好吧,更具体地说,文件被取消链接。数据仍然位于磁盘上,但其链接已被删除。过去可以检索数据,但现在元数据被清除并且无法恢复。

没有垃圾桶rm,也不应该有。如果您需要垃圾桶,则应使用更高级别的接口。trash-cli在 Ubuntu 上有一个命令行实用程序,但大多数时候使用像 Nautilus 或 Dolphin 这样的 GUI 文件管理器来提供标准的垃圾桶。垃圾桶本身就是标准配置。在 Dolphin 中删除的文件将在 Nautilus 的垃圾箱中可见。

文件通常被移动到某个地方,比如~/.local/share/Trash/files/被丢弃时。rmUNIX/Linux 上的命令类似于delDOS/Windows 上的命令,它也删除文件而不将文件移动到回收站。另一件要意识到的事情是,跨文件系统移动文件(例如从硬盘驱动器到 USB 磁盘)实际上是 1) 文件数据的副本,然后是 2) 取消原始文件的链接。你不希望你的垃圾箱被这些额外的副本填满。

  • 我会谨慎使用类似 `libtrash` 之类的东西来改变 rm 的行为。许多脚本使用 `rm` 来清理文件,你不希望那些出现在垃圾箱中。我建议使用像 `trash-cli` 包中的 `trash` 这样的专用命令。@pedro 我应该补充一点,我曾经在我的主目录中创建了一个文件 *。当我不应该创建它时,我不小心引用了 * 所以我决定用 rm * 自然地删除它。当我意识到我做了什么时,我迅速终止了该命令,但它已经删除了我主目录中的许多文件。 (20认同)
  • 非常感谢清楚的解释。我不介意使用 CLI,我只需要在使用通配符时更加小心。:) (4认同)
  • 外壳中很少有垃圾桶之类的东西,所以如果你将它添加到本地机器上并习惯它,甚至在日常工作中依赖它。如果没有使用其他 99% 的 unix:s,您可能会遇到麻烦...... (4认同)
  • 我认为这里要带回家的信息是我需要在凌晨停止 CLI 并更加注意。 (3认同)
  • 与@Johan 所说的一样,RedHat 过去(仍然这样做?)在以 root 用户身份运行时将诸如 `cp` 和 `mv` 之类的命令的别名设置为 `cp -i` 和 `mv -i`。这会更改默认行为,因此这些命令将始终在覆盖现有文件之前询问。一些系统管理员建议专门删除这些别名,这样您就不会期望这种行为在遵循默认行为的另一个系统上最终可能会致命。 (3认同)
  • 这就引出了另一个想法。多年来我已经习惯了没有垃圾箱/回收站的行为,因此,我没有任何依赖垃圾箱的倾向。如果我对必须检索文件有任何顾虑,我会先制作一份副本或将文件移开。也许,一年一两次,我可能不得不从我的备份中检索文件。 (2认同)

Pis*_*ing 12

对于EXT3 / EXT4,你可以尝试使用恢复工具,如文件extundeleteext3grep,甚至还要搞乱与低级别结构手动(不是心脏虚弱); 对于许多文件系统,您可以尝试通过某些模式搜索尚未覆盖的块(例如,magicrescue可以搜索 JPEG 标头等)。请注意,这些使用启发式方法从遗留的元数据中恢复文件,因此不能保证完全恢复 - 这更像是最后的机会(因为那些要求文件的一些痕迹保留在日志中,并且块还没有被覆盖)。

因此,出于所有意图和目的,删除的文件rm已经消失了 - 您可以尝试这些工具提供的死灵法术,但不要依赖它:当其他一切都失败时,可以尝试这些工具。最好挖掘出你最新的备份(你一直在做备份,对吧?哦,生活和学习......)。

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

Kje*_*sen 8

关于撤销的影响rm

鉴于大多数文件系统只删除对数据的引用并指示块为空闲,您可以尝试直接从设备中定位您的数据读取。幸运的是,包含您的文件的块尚未被声明用于其他用途。

这假设你有一些相当独特的东西要寻找,你root在系统上有,我猜如果文件系统没有管理,将跨越一个以上文件系统块(可能是 4k)的任何东西拼凑起来可能会非常费力将文件放在连续的块中。

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


小智 6

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

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

这种正常标记未使用是为了速度......否则删除将需要更多时间。这就是为什么您可能已经注意到删除大文件的速度更快(如果数据块没有被覆盖,您可以恢复数据)。

更多信息:索引节点结构文件删除的工作原理


The*_*est 5

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

当您“删除”文件时,通常您实际上只是删除了您指定位置存在的硬链接。这就是为什么调用删除文件的系统调用unlink()。在没有留下任何硬链接之前,系统不会真正删除该文件。但一旦最后一个硬链接被破坏,数据也会被破坏。

那么,您删除的文件去了哪里?如果仍然存在硬链接,则它们的文件位于您未删除的硬链接所在的位置。如果没有留下硬链接,文件就会消失。