![我刚刚意外运行了 rm /*,有什么解决办法吗?](https://linux22.com/image/1351877/%E6%88%91%E5%88%9A%E5%88%9A%E6%84%8F%E5%A4%96%E8%BF%90%E8%A1%8C%E4%BA%86%20rm%20%2F*%EF%BC%8C%E6%9C%89%E4%BB%80%E4%B9%88%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95%E5%90%97%EF%BC%9F.png)
我变得如此愚蠢……
我只是不小心运行了 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
对 / 中的所有符号链接执行此操作,以便列出目录并显示当前根目录和已删除的根目录的相同符号链接,然后重新启动到旧的“已删除”发行版。
到那时一切都应该会好起来,所以……
祝你好运!