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

per*_*eal 21 linux glibc shared-libraries

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

/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)

正如所料,这给了我:

/bin/ln: error while loading shared libraries: libc.so.6: 
    cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

/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
Run Code Online (Sandbox Code Playgroud)

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

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

[ 编辑 ]我做了:

while read line; do echo $line; done < /lib/libc-2.11.3.so > libc.so.6
Run Code Online (Sandbox Code Playgroud)

复制文件并尝试使用:

/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
Run Code Online (Sandbox Code Playgroud)

得到了:

/bin/ln: error while loading shared libraries: ./libc.so.6: ELF file OS ABI invalid
Run Code Online (Sandbox Code Playgroud)

Sim*_*ter 31

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


小智 11

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

ldconfig -l -v /lib/libc-2.13.so
Run Code Online (Sandbox Code Playgroud)


Kum*_*ani 8

尝试:

LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)

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

  • 允许否认 (4认同)

wol*_*969 5

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

  • LD_PRELOAD =/lib/libc.so.6 bash怎么样?我会打开你的shell,这个shell里面的所有命令都应该继承那个设置.或者......也许不是sudo.你可以使用`sudo su`或者只是`su`来成为root用户吗?新环境将需要再次设置LD_PRELOAD. (2认同)