一个软链接导致的系统崩塌

来源:互联网 发布:微信三级分销源码 编辑:程序博客网 时间:2024/05/06 18:37

今天,在centos6.5上测试,需要重新链接下libc.so.6,发现在/lib64下的libc.so.6只是一个软链接,于是毫不犹豫就删除了,结果就悲剧了,不管是ls,cp还是scp等命令全都不能用了,看了一下网上的介绍说若重启则系统不能启动了。

[root@rhino149 lib64]# su - rhino
su: relocation error: /usr/lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
[root@rhino149 lib64]# su - rhino
su: relocation error: /usr/lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
[root@rhino149 lib64]# ls
ls: relocation error: /usr/lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
[root@rhino149 lib64]# pwd
/lib64

恐慌了,果然root下操作简直就是战战兢兢。

查找了一下:

  1. libc.so.6 c运行时库 glibc的软链接,而系统几乎所有程序都依赖c运行时库。程序启动和运行时,是根据libc.so.6 软链接找到glibc库。删除libc.so.6将导致系统的几乎所有程序不能工作。
  2. 每个glibc.so文件有它支持的libc版本,可以通过# strings /lib64/libc.so.6 |grep GLIBC_ 查看。如果程序编译的时候链接的libc库版本不在程序运行环境下的glibc库支持的libc版本之内,也会报错.
当然,删除了也是有办法修复的。

一个就是使用系统光盘或者U盘进入修复模式,在修复模式下新建 libc.so.6 软链接,按照http://blog.csdn.net/u013753804/article/details/48392325和http://wbwk2005.blog.51cto.com/2215231/415185来搞定。


简单的另一个方法:

那就是你的窗口还没有关闭

[root@rhino149 lib64]# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
[root@rhino149 lib64]# ls

该命令的含义是:

linux调用so库文件时,先搜索当前路径,然后是系统库目录,提供LD_PRELOAD系统变量可以改变这个顺序,改变后的搜索顺序为 LD_PRELOAD, 当前路径, 系统库目录 
    于是,使用LD_PRELOAD指向正常的glibc库文件,然后执行ln等命令,就可以正常执行,执行成功之后, libc.so.6 就又存在了。