意外地在远程服务器上执行了 sudo rm /*

意外地在远程服务器上执行了 sudo rm /*

rm /*在以 root 身份登录远程 Ubuntu 服务器时意外执行了该操作,并删除了几乎所有二进制文件,目前我无法通过 ssh 或 ftp 登录来恢复文件(希望一切顺利)。

有没有办法以某种方式解决这个混乱,或者我应该致电数据中心并询问格式?

答案1

rm /*应该删除很少。那里没有-r可以递归删除任何内容的标志,没有它,目录将不会被删除(即使目录被删除,也只能删除空目录)。这个答案是基于您没有运行的假设rm -rf /*

根文件系统中唯一的文件可能是内核和 initrd 的符号链接(尽管在我正在查看的一个 Ubuntu 系统上,它们不存在)或/lib6464 位系统上的符号链接。

问题可能只是符号/lib64 -> /lib链接已被删除。但这非常令人讨厌,因为几乎每个程序都会依赖该符号链接:

$ ldd /bin/bash
...
    /lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)

ld-linux就是动态加载程序,如果它不可用,则无法运行任何动态可执行文件。这将使登录变得极其困难,甚至您可能根本无法登录。

也许有一位救世主busybox。运行此命令来检查:

$ ldd /bin/busybox
    not a dynamic executable

在这种情况下,busybox 应该是可以运行的,但问题是如何运行它?

如果您有权访问启动加载程序提示符,则可以使用 启动init=/bin/static-sh,其中 static-sh 是一个符号链接busybox(检查是否/bin/static-sh存在 - 它在我的系统上存在,但它不是标准的 Ubuntu。 这个错误表明这是可用的。)

拥有 root shell 后,您可以重新创建/lib64符号链接。您可能需要首先将根文件系统重新挂载为读/写。 busybox 应该内置了这些工具,您可以按如下方式运行它们:

# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash# 

如果 bash 有效,则问题应该得到解决。

答案2

如果您需要从当前安装恢复文件,请请求主机帮助您。假设它是一个虚拟机,每天大约需要五分钟来映像您的磁盘,从头开始重新安装主机并将旧磁盘映像转储到新文件系统中。

如果您不需要任何东西,只需让它们重新安装即可。当你把事情搞得很艰难时,几乎总是更快的选择。

答案3

如果您刚刚删除了 /lib 的 /lib64 符号链接并且控制台仍然打开,只需执行以下操作:

/lib/ld-linux-x86-64.so.2 /bin/ln -s /lib /lib64

并且您应该能够再次正常运行命令。调整实际 ld 库的路径。您还可以运行任何其他您想要的命令,只需在命令前面加上完整的 ld 库路径即可。

答案4

如果无法访问物理服务器,您就无能为力。

相关内容