删除符号链接libc.so.6后如何恢复?

时间:2012-09-03 14:13:40

标签: linux shared-libraries glibc

在我们的服务器中,已删除指向libc.so.6的符号链接。现在系统中的二进制文件都没有工作。为了解决这个问题,我尝试了:

/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6
正如预期的那样,

给了我:

/bin/ln: error while loading shared libraries: libc.so.6: 
    cannot open shared object file: No such file or directory

我也尝试过:

/lib/ld-linux-x86-64.so.2  --inhibit-rpath /lib/libc.so.6 \
   --library-path /lib/libc-2.11.3.so \
   /bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6

具有相同的结果。进一步不成功的尝试包括cp,mv,cat。

我通过ssh连接,我相信在关闭此会话后我将无法打开另一个会话。有没有办法修复这个系统(或许使用bash内置函数)?

[编辑]我做了:

while read line; do echo $line; done < /lib/libc-2.11.3.so > libc.so.6

复制文件并尝试使用:

/lib/ld-linux-x86-64.so.2  --inhibit-rpath libc.so.6 --library-path . \
  /bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6

得到了:

/bin/ln: error while loading shared libraries: ./libc.so.6: ELF file OS ABI invalid

9 个答案:

答案 0 :(得分:31)

您只需运行ldconfig即可。大多数发行版都将其作为静态二进制文件发送。

答案 1 :(得分:11)

这对我的情况有帮助(实际版本取决于您的库):

ldconfig -l -v /lib/libc-2.13.so

答案 2 :(得分:8)

尝试:

LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6

注意:实际版本取决于您的库。

答案 3 :(得分:5)

使用Knoppix或其他任何内容的现场CD进行引导,并在将“已损坏”的系统安装到正在运行的实时系统之后修复丢失的链接。

答案 4 :(得分:3)

注意,对于64位:

LD_PRELOAD=libc-2.13.so ln -s libc-2.13.so libc.so.6

这对我很有用

如果你当然不在那个目录中,那将会是这样的:
LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.13.so ln -s /lib/x86_64-linux-gnu/libc-2.13.so /lib/x86_64-linux-gnu/libc.so.6

答案 5 :(得分:3)

如果你以前做过ls命令并且知道libc的版本是什么,

ldconfig -l -v /lib64/libc-2.x.so

其中x是您的版本。请注意,它可能是lib64或lib,具体取决于您的版本。

我刚刚做了这件事并且有效。

简而言之,永远不要删除链接。不好的主意。

答案 6 :(得分:0)

非常感谢您提供以下答案。它与根ID一起运行良好。 我们取消链接libc.so.6到更高版本的链接,但是在取消链接libc.so.6服务器后突然失去响应。 ln -s命令不起作用。没有其他用户能够SSH到服务器。但是当我们在命令下运行时,它起作用了。 (服务器上存在libc版本)服务器开始正常运行。

下面是正确的命令,也可以挽救生命。...

LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6

注意:实际版本取决于您的库

答案 7 :(得分:0)

如果您使用的是Ubuntu,则ldconfig将不起作用。只需运行:

/sbin/ldconfig.real

答案 8 :(得分:0)

我在尝试升级符号链接时不小心删除了文件 /lib64/libc.so.6...这很奇怪。没有一个命令有效 ls、du、cd vim、su 等

唯一拯救我的是,我已经以 root 用户身份登录了 所以跑了“$ sln /lib64/libc.so-2.12 /lib64/libc.so.6” 哪一种救了我的命

请参阅此链接,它非常有用。而不是启动服务器和 https://www.programmersought.com/article/2176688665/ 只需确保您可以再次链接的符号链接与前一个相同

建议在重启等之前尝试一切,不要退出 bash 终端