使用rm命令删除的文件/目录能够恢复吗?

通过终端使用rmrm -r命令删除的文件/目录是否可以恢复呢?如果通过图形界面删除文件,可以从回收站中恢复,但如果使用rm工具删除文件,该如何恢复呢?

对于恢复已删除文件(无论其形式如何)的工具,您可以查看这个问题:http://askubuntu.com/q/3883/ - Decio Lira
如果您希望在将来恢复文件,请不要使用"rm"命令。您可以使用"rm-trash"实用程序:https://github.com/nateshmbhat/rm-trash - Natesh bhat
8个回答

为了达到这个目的,我使用trash-cli软件包和以下别名在我的~/.bashrc中。
alias rm=trash

trash-cli软件包可以通过以下命令进行安装:sudo apt-get install trash-cli
您删除的文件将被移动到垃圾桶中,并且您可以在nautilus垃圾桶中看到它们。
您始终可以使用以下任一方法访问真正的rm命令:
command rm something
'rm' something
\rm something

还有一些命令可以从终端访问垃圾桶,如trash-listrestore-trash(或trash-restore)、trash-empty,这些命令可以通过安装trash-cli软件包来使用(然后查看它们的man页面)。
最后注意,不建议为超级用户使用此类别名,因为它可能会干扰系统操作。

37这是一个权宜之计,但并没有真正回答问题。 - evgeny
3我认为用户也想知道是否有一些方法可以通过命令行实现相同的行为。如果没有,我准备删除我的答案。 - enzotib
7很好。我学到了一些知识。 - user3215
“不建议为超级用户使用这样的别名。”你能解释得更详细一些吗?可能会影响哪些系统操作,可能会有什么负面后果? - FlexMcMurphy
为此,我使用 trash-cli 包以及在我的 ~/.bashrc 文件中添加以下别名 alias rm=trash// 请注意,这仅适用于当前用户。因此,在脚本中使用此别名时需要额外注意 - Tom Newton

从终端中删除它会永久删除它 - 恢复非常困难,有时甚至不可能。

如果您的分区类型是ext3(通过使用系统->管理->磁盘实用工具进行检查),那么请查看ext3undel

如果不是(如果您使用默认设置安装了Ubuntu),请尝试使用extundelete程序。

但并不能保证您能够恢复任何东西。


对于桌面版本来说,这将非常有用。 - user3215
我对这在固态硬盘上是否有效持怀疑态度,但很乐意听听其他的看法。 - matanster

你正在寻找的是:extundelete - 从ext3/ext4分区恢复已删除文件的实用工具。
要找到这样的软件包,你可以尝试使用: apt-cache search undelete 要使用该实用工具进行安装,请使用以下命令: sudo apt-get install extundelete 安装完成后,请调用man extundelete并仔细研究它。

如果你确切地知道文件的类型,作为一种替代方案...
sudo apt-get install foremost

现在打开/etc/foremost.conf,你会看到一长串被注释掉的行。如果你的文件类型存在,请取消注释该行(你可能还想删除不相关的行)。
如果你的文件类型不存在,请添加自己的行。比如说我想恢复一个大小约为40K的.css文件,我可以添加以下内容:
css     n       40000   Theme\sName:     Plugin\sFixes

第二列是指区分大小写,第三列是指大小的上限,第四列是文件的起始方式(记得使用转义字符),最后一列是文件通常的结束方式。
使用以下命令(根据需要编辑磁盘。可以使用df命令进行检查):
foremost -v -T -c /etc/foremost.conf -i /dev/sda -o output

接下来会发生的是,Foremost将创建一个名为output的文件夹,并将所有恢复的数据(在这种情况下)倾倒到该文件夹中。从那里,您可以使用diff或meld来比较恢复的“文件”,并查看哪个是最新的。

非常感谢。它完美地运行了。我不小心使用 rm -fr php/ 删除了我的 php 源文件,其中有 2 个 php 文件。不到 2 分钟它们就被完美地恢复了。在 .conf 文件中,我添加了: php n 40000 <?php ?> ASCII - Shakiba Moshiri

说得抽象一点,每当你在图形界面上删除一个文件时,该文件会被“移动”到一个特殊的“缓冲区”,一个名为“trash”的目录中。你可以在你的主目录下找到它,即`~/.local/share/Trash/`。从这个目录中“删除”的文件将会真正被删除。这种真正的删除是在你使用`rm`命令删除文件时发生的。
恢复已删除的文件非常困难。文件系统中的文件被表示为B树或类似结构上的节点。当使用`rm`命令删除文件时,树会被更新,硬链接的数量会减少,目录列表中对应的条目也会被删除。如果你的文件有一个硬链接,那么你的文件是绝对安全的。你可以使用`file / -samefile filename`命令来查找文件。如果你记得文件的inode号码,你也可以搜索文件(尽管这种情况很少见)。
另一种情况是当上述可能性都不成立时。每当你使用rm命令删除一个文件时,目录中的文件条目会被移除,从而减少一个硬链接的数量。如果硬链接的数量降至零,那么指向inode上的文件的指针将被删除,或者标记为待删除。无论哪种方式,你的文件仍然存在于硬盘上。只有在随后重新挂载时,文件才会真正从硬盘上擦除。在这样的情况下进行文件恢复非常困难,需要遍历文件系统树和表示实际磁盘块位置的inode。我听说过一个很受欢迎的工具,但从未使用过,叫做extundelete。虽然不能保证成功,但值得一试。
无论你是否成功恢复了文件,都要尽快进行定期备份。在Ubuntu上非常简单。

抱歉,但是使用命令行的"rm"和"rm -f"删除文件时会绕过Gnome桌面上的"Trashcan"。
你可能还想问问是否有类似于FAT和NTFS的extfs "undelete"工具。(我不知道有没有,但如果没有的话我会感到惊讶。)

噢...没关系!我以为它可以从某个地方恢复过来。 - user3215

使用“rm-trash”实用程序,它将文件放入垃圾箱以供以后检索,并支持“rm”命令的所有选项。
sudo add-apt-repository ppa:nateshmbhat/rm-trash
sudo apt-get update
sudo apt-get install rm-trash

"rm-trash" 是用来替代 rm 命令的。
它可以处理所有与 rm 相关的选项。
它能够处理文件名与回收站中已有文件的冲突。
它还可以自动处理一些权限问题。
如果 rm 命令是从其他脚本或间接调用的,则会自动使用系统的 'rm' 命令。
它会显示与 rm 命令相同的适当错误信息。

只需在您的主目录下的文件中添加一个别名 .bash_alias.bash_profile
alias rm='gio trash'