我rm /*
在以 root 身份登录远程 Ubuntu 服务器时意外执行了该操作,并删除了几乎所有二进制文件,目前我无法通过 ssh 或 ftp 登录来恢复文件(希望一切顺利)。
有没有办法以某种方式解决这个混乱,或者我应该致电数据中心并询问格式?
答案1
rm /*
应该删除很少。那里没有-r
可以递归删除任何内容的标志,没有它,目录将不会被删除(即使目录被删除,也只能删除空目录)。这个答案是基于您没有运行的假设rm -rf /*
。
根文件系统中唯一的文件可能是内核和 initrd 的符号链接(尽管在我正在查看的一个 Ubuntu 系统上,它们不存在)或/lib64
64 位系统上的符号链接。
问题可能只是符号/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
如果无法访问物理服务器,您就无能为力。