由于某种原因升级了centOS系统的glibc库导致了系统linux命令大部分不可使用!

今天由于需要在环境中使用到node,所以准备下载并安装使用,但是安装完成后提示如下信息:
111
于是就按照网上的教程下载并安装了对应的glibc库,而且删除了/lib64/目录下的libc.so.6文件之后,和新的glibc库建立了软连接,结果悲剧发生了,接下来我执行的所有Linux命令几乎都报错:

error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument  

然后我在网上搜了解决办法,清一色的告诉我备份然后重装系统!!!
我当时慌的一批!!!貌似备份也挺麻烦,而且这个系统我捣鼓了一个多月,解决了各种bug,不能就这么毁了!!!于是我不死心的继续找解决办法,功夫不负有心人,找到如下一种解决办法,来自博客:
https://www.jianshu.com/p/216b28535c6b

大概意思如下:
如果发生了和我类似的情况,或者报出如下另外两种错误之一:

Segmentation fault  

或者:

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

那么这个时候千万不要关掉你的终端(包括SSH),执行如下命令可以挽救你于水火之中:

cd /lib64
LD_PRELOAD=/lib64/libc-2.12.so ln -sf /lib64/libc-2.12.so libc.so.6  

那么请注意,上述命令中/lib64/libc-2.12.so这个文件是因系统版本有所差异的,我的系统版本是centOS6.10,而且在删除libc.so.6之前,我特意观察了它原始的软连接是指向libc-2.12.so的,所以我使用的是它,如果你不知道,你可以依次降低文件版本去尝试,总有一个能执行完成,成功之后你会发现Linux命令能恢复使用了!!!

至于它的原理大致是这样的:

linux调用so的库文件时,搜索路径为当前路径,再是系统lib目录。  
但是如果指定了一个LD_PRELOAD系统变量就能改变这个顺序。  
设置LD_PRELOAD了后,库加载的顺序就变成这样了:
LD_PRELOAD —> 当前路径 —> 系统lib目录  

总结

像这样的要修改系统基础运行库的操作,慎用!!!特别是随便从网上找来的解决方法,一定要慎重,操作之前做好必要的备份工作,并且要多次考察对比(多找几篇博文去比对),找出最可靠的方案去解决!!!
但是,我是说但是,最好不要去修改系统相关的依赖,除非你知道这将给你带来什么样的后果!!!

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值