问题
今天帮师弟在组里的小集群上用root权限yum安装一个库,然而安装完后悲剧开始了:
我发现连基本的ls
命令都不能用了,并报如下错误
[root@managernode ~]# ls
ls: relocation error: /lib/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
此时最最重要一点是不要关闭当前窗口,不要重新启动机器! 一旦关闭窗口将无法重新连接(可以自己新建窗口试下),重启机器后也将无法进入系统(如果已经关机,可以参考Centos7 – glibc 升级失败、意外删除、故意删除后的处理方法),以下解决方法仅限当前保留窗口内操作。
原因
libc.so.6
是C
运行时库glibc
的软链接,程序启动和运行时,是根据libc.so.6
软链接找到glibc
库lib64/libc.so.6
是一个软链接,指向/lib64/libc.so-2.1x
,2.1x
表示其对应版本,去兼容相应CentOS版本- 很多基本命命令依赖
glibc
,libc.so.6
链接对应版本不一致将导致系统的几乎所有程序不能工作
解决方案
先找到libc.so-2.1x
所对应的具体版本
由于许多基础的命令不能使用,网上不少教程里的快捷方法也失效了。在这里我们可以用尚可使用的cd
命令进入/lib64/
文件夹。然后由于ls
相关命令失效,我们可以输入
cat libc-2.
然后点Tab
键利用Linux的自动补全功能,找出该目录下相应的文件
libc-2.17.so libc-2.23.so
此时发现有两个/lib64/libc.so-2.xx
,应该是后面这个不兼容的覆盖了前面的
修改软连接
此时我们输入
sln /usr/lib64/libc-2.17.so /lib64/libc.so.6
sln /usr/lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2
然后大功告成!
反思:用root前要慎之又慎!现在因疫情不能回所,如果系统崩溃再搞不定就太麻烦了。