我刚刚意外运行了 rm /*,有什么解决办法吗?

我刚刚意外运行了 rm /*,有什么解决办法吗?

我变得如此愚蠢……

我只是不小心运行了 rm /*,但我的意思是在具有 root 访问权限的云服务器上运行 rm ./*。

现在,没有一个命令起作用。ls、ssh、sftp……都没有。

有办法解决这个问题吗?(注意:在这种情况下不使用 -r 或 -f 之类的参数)。

答案1

从备份恢复。

根据文件系统,您可能能够运行取消删除或恢复实用程序,但从备份中恢复可能更容易、更可靠。

答案2

备份可能是最好的解决方法,但是如果由于某种原因这不是一个选择,那么有一些技术可以帮助从 ext3/4 分区恢复已删除的文件。

要使这些方法有效,您需要尽快切换到单用户模式并卸载磁盘。最好从 livecd 或其他恢复环境运行这些方法,这也是一种更安全的方法,可以避免在尝试恢复数据时意外丢失数据。

我不会发布有关取消删除过程的史诗,因为您应该先尝试使用备份,以下是我认为最有用的链接。

答案3

如果rm没吃太多(当它发生在我身上时,我在它运行到一半时就把它杀死了/bin...),你可以在救援模式下启动机器,检查哪些包受到了影响(在rpm这种情况下,rpm -Va会告诉你),然后重新安装它们。

请注意,这仅有的在新月午夜后进行。事先进行短暂的祈雨舞可能会有帮助。也可能没有。YMMV。

(是的,这是 Unix 的残酷方式,教导毫无戒心的用户在按下 之前仔细考虑每个命令ENTER。你也应该学会了。)

答案4

最近我熬夜加班,累得不行,于是做了这个。如果你没有强制 (-f) 或递归 (-r),并且使用的是相对较新的 Linux 发行版,则很可能删除了根目录中指向 bin、sbin 和 lib 的符号链接。我通过启动同一发行版的相同实时版本、打开根控制台、安装旧设备并重新创建符号链接,在不到 10 分钟的时间内修复了所有问题。以下是我所做操作的细分(在控制台中):

我已经以 root 身份登录。 su如果您还不是 root 身份,请自行使用 sudo 命令。

lsblk

为您提供设备挂载点。使用它来查找原始根目录的设备。

安装-t ext4 /dev/sda1 /mnt

显然,将适当的文件系统挂载到空目录中。设备 sda1 为 ext4,在我的例子中,位于 /mnt 上。您的情况可能因系统设置而异。

ls -la /

这将让您对系统的符号链接设置方式有一个基本了解。将其与您的“已删除”根目录进行比较:

ls -la /mnt

您将看到符号链接丢失。如果没有大多数发行版都有的符号链接,您将无法获得任何命令,也无法运行,并且在重启时会锁定。恢复这些符号链接将纠正问题,并再次允许命令,以及完全重启。所以,现在...在/mnt中创建所有丢失的符号链接,您可以在/中看到。我注意到通常有三个符号链接,但可能会更多或更少。ls -la /例如,在上,我有这个符号链接(加上另外两个):

lrwxrwxrwx   1 root root     7 Nov 21 06:47 bin -> usr/bin

因此,为了在挂载在 /mnt 的已损坏的根目录中重新创建该符号链接,我们执行以下操作:

cd /mnt

ln -s usr/bin bin

对 / 中的所有符号链接执行此操作,以便列出目录并显示当前根目录和已删除的根目录的相同符号链接,然后重新启动到旧的“已删除”发行版。

到那时一切都应该会好起来,所以……

祝你好运!

相关内容