2011-05-05 18:30:54 +0000 2011-05-05 18:30:54 +0000
116
116

撤销 "rm -rf ~"命令?

我有一个我不想命名为’~‘的文件夹,所以在命令行输入了

rm -rf ~

,不小心删除了我的home文件夹(因为~解析为/home/username)。有什么办法可以回来,还是说我基本上需要从头开始重新创建账户?

答案 (12)

148
148
148
2011-05-05 18:34:16 +0000

一般来说,没有简单的方法可以恢复。

你可以从日常备份中恢复。

67
67
67
2011-05-06 02:20:40 +0000

其他人(如@RiMMER, @Adam, 和@James T)已经提到,对于大多数文件系统,可以恢复大部分或全部数据(也许没有文件名),因为数据实际上并没有被清零,只是从文件表中删除。这不仅在Linux中是如此,在Windows和Mac中也是如此。

然而,没有人提到最重要的事情–关掉你的电脑。现在关上你的电脑。

许多程序–包括你现在正在使用的互联网浏览器–会将数据缓存到硬盘上,而且你所做的几乎所有事情都会导致你的电脑调整大小/写入交换文件。这两件事都会写入硬盘上的空闲扇区,有可能覆盖你的珍贵数据。

因此,关闭电脑,取出硬盘,并将其放入另一台电脑。将硬盘驱动器挂载为只读,并恢复文件到一个单独的硬盘驱动器。当你恢复了所有你能感兴趣的东西–也只有这样–把文件写回原来的硬盘。

13
13
13
2011-05-06 02:41:43 +0000

相信每一个linux用户在某一个时间点上都必须亲身经历这个惨痛的教训,才能真正了解备份的重要性,以及注意细节,小心谨慎。

例如,如果你要删除看起来很诡异的文件,你可以先在这个诡异的文件上运行一些没有副作用的命令,而且不会对你的数据进行修改。例如,如果你在尝试删除文件夹之前运行

cd ~

,你会看到它反而会将目录改为你的home文件夹,而不是~文件夹。一旦你通过足够的故障排除步骤了解到真正的命令,你将需要正确地将cd放入~文件夹,然后你可以按上箭头键从历史中提取最后一个命令,然后将cd改为rm然后,只有这样尝试删除文件夹。

我建议在执行任何永久的行动之前,采取这样的步骤。这不是永久性的,也不是万无一失的,但如果你在执行有副作用的操作时采取这种程度的谨慎,你就有更大的机会防止那些糟糕的时刻。

7
7
7
2011-05-05 19:00:15 +0000

如果你正在使用ext3文件系统,那么ext3grep就是你最好的新朋友。关于使用ext3grep的一个很好的教程(在许多其他教程中)可以在 这里 找到。

6
6
6
2011-05-05 18:49:12 +0000

你可以尝试使用testdisk来取消删除单个文件。这显然只适用于ext2和NTFS(但仍然值得一试)。

如果你有ext3或ext4,你可以使用photorec来恢复已知文件s,这可能会比你想恢复的更多。Photorec恢复的文件没有文件名信息,所以要翻阅文件会很繁琐。

4
4
4
2011-05-06 14:31:40 +0000

如果你有一个足够大的外部驱动器,你有另一个可能最安全的选择。你将需要足够的空间来存储整个主分区,包括空闲空间。

从光盘启动,根本不要挂载主硬盘。挂载外置硬盘,将主硬盘分区挂载到外置硬盘上的文件中,将文件挂载为回环设备,在此镜像上进行删除工作,安全地知道你不会对原始文件系统造成任何损害。根据文件系统的不同,可能会有很多尝试,其中一些可能是破坏性的。

这救了我一次Reiser4的测试版,当时我不知道它会做什么,即使我挂载它只读。当时我在某个地方读到,日志写入仍然是可能的。

这也是一个从垂死的硬盘中保存数据的好技术。

2
2
2
2011-05-05 18:46:33 +0000

通过检查未被回收的inode来恢复文件是有技巧的。删除后写入文件系统的数据越多,恢复数据的可能性越小。数据意外删除后恢复的最佳策略是从备份中恢复。

2
2
2
2011-05-07 18:27:57 +0000

对于你的数据问题,我很抱歉。每个人都已经在如何处理你的数据问题上进行了交流,但这里有一些信息,你可以在下一次看到一个被称为~的文件夹时进行处理。

1.找到创建它的人,并确保他们不再这样做。 2. 不要使用 -rf 或任何强大的参数来 rm 进行删除。相反,要慢慢来,确保你能看到发生了什么。通过在shell中转义,可以在不扩大到主目录的情况下输入tilde。理论上,你可以_rm -rI \~,然而你可以更进一步。 1.首先,cd \~进入那个文件夹,也许甚至用pwd来检查你是否到了那里。十在你进去的时候删除它的内容。同样要小心,但要用rf -rI *清理出文件夹,如果你需要也要用.*。 2. 现在用cd ..往回移动,并删除带有rmdir \~的目录。

2
2
2
2011-05-06 05:30:57 +0000
alias rm="rm -i"

假设你使用的是Bash shell (把它放在你的.bashrc文件中,这样它就会在你打开的新shell中持续存在)。

这应该会导致rm要求你确认你要删除的文件,这很好,特别是当你使用-rf时,但它也会在提示中把’~‘扩展为你的主目录的完整路径,这应该会给你一个提示,你不是在删除一个文件’~‘,而是你的homedir。

$ rm -rf ~
rm: examine files in directory /nas/users/u12345/unix (yes/no)? n

从技术上讲,这不是你问题的答案,但可能会帮助你避免将来出现这样的问题。

EDIT: 有些人可能不鼓励你使用这种技术,因为它让你对 “rm "命令不那么小心。根据我的经验,事实远非如此。实际上,别名的作用是阻止你使用 "rm -rf”–因为你知道它会导致许多你不想回答的提示–为了得到一个无提示的 “rm -rf",你需要刻意地将rm命令称为/bin/rm(或其他什么)。这导致了更多的有意识和刻意的使用 "rm "命令–因为你总是需要在使用rm之前在头脑中选择 "rm或/bin/rm”–无论是在你的服务器上还是在你碰巧登录的其他服务器上。如果每个人在使用 rm 之前都要先想一想,那么这个世界就会变得更加安全。

1
1
1
2011-05-06 07:04:37 +0000

我只需要cd .snapshot然后恢复文件。但是,我在工作中这样做,我不知道.snapshot目录从何而来。我想这也许是Linux的一个功能。

1
1
1
2018-06-10 04:22:55 +0000

Recovery Tools - Command Line :

*Recovery Tools - Gui .NET Framework 2.0版本。 *

*信息 。 *

根据我的个人经验,我使用 “UFS Explorer "和photorec来恢复我的数据

(1) = 不开源,不免费

(2) = 不开源,免费

(3) = 开源和免费

(4) = 支持 ntfs

(5) = 有目录结构功能。

-3
-3
-3
2011-05-06 00:07:52 +0000

rm是永远的。

虽然现在这样做对你没有帮助,但以后你可以不用rm,或者真的要逼迫自己,在你的路径中添加一个早先找到的名为rm的脚本,将文件移到垃圾箱中,改天再清理掉(允许你犯错,不至于被sol)。