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

问题描述 投票:21回答:8

在我们的服务器中,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
linux shared-libraries glibc
8个回答
31
投票

你可以简单地运行ldconfig。大多数发行版都将其作为静态二进制文件。


11
投票

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

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

8
投票

尝试:

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

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


5
投票

使用像Knoppix或其他任何东西的live cd启动,并在将“已损坏”系统安装到运行的实时系统之后修复丢失的链接。


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


3
投票

如果您之前已经完成了ls命令并且知道libc的版本是什么,

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

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

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

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


0
投票

非常感谢你的回答。它与root 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

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


0
投票

如果您使用的是Ubuntu,则ldconfig将无法正常工作。赶紧跑:

/sbin/ldconfig.real
© www.soinside.com 2019 - 2024. All rights reserved.