libc.so.6 导致Linux系统崩溃

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ymaini/article/details/81989332

问题

由于缺少对libc.so的认识,以为跟普通的lib包类似,直接把高版本的so软连过去就可以满足安装和升级,造成错误操作直接导致Linux系统崩溃。

错误操作:

在root用户下将/usr/lib/libc.so.6的覆盖,导致系统瘫痪,所有用户均被强制退出。

如下示例:

# root 用户
cp libc-2.12.1.so /usr/lib/libc.so.6

分析

后来查询资料发现,libc.so是软连接到在Linux系统中基本的命令如ls, cp等均依赖该so,其重要性不言而喻。如果不慎删除,重定向,覆盖,都会导致不同程度的异常。而libc.so.6是软连接到具体的版本的libc.so, 如libc-2.17.so

轻微异常:基本命令无法使用,出现错误

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

严重异常:所有用户被强制退出,系统崩溃

服务器崩溃

解决方法

解决思路:2步

  1. 首先删除软连接libc.so.6。不同类型的Linux系统该libc的位置不同,我使用的服务器在/usr/lib//usr/lib64下均存在libc.so.6
  2. 根据系统实际的libc.so,再添加libc.so.6的软连接。

轻微异常

该异常尽管基本命名无法使用,但是root用户还在,所以定位到libc.so.6之后可以根据解决思路简单实现。示例如下:

# 假设 /usr/lib/下的libc.so.6的软连接错误的软连到libc.2.17.so, 系统支持的是libc.2.12.1.so

# 现在忘记rm是否可以使用了,如果rm不能使用,则使用 LD_PRELOAD=/lib64/libc-2.12.1.so rm
rm libc.so.6
LD_PRELOAD=/lib64/libc-2.12.1.so ln -s libc-2.12.1.so libc.so.6

系统崩溃

此时系统已经崩溃,无法再登录进行操作,我们的做法是通过U盘进行登录(U盘存在一个系统),尝试修复系统。使用U盘登录后,原来的系统可以当场文件直接操作,实现解决思路。

rm libc.so.6
LD_PRELOAD=/lib64/libc-2.12.1.so ln -s libc-2.12.1.so libc.so.6

总结

在修改系统中的so时要非常小心,如果牵扯到系统的底层基础,一定要对so的职能做到简单的了解。

参考文献

https://www.linuxidc.com/Linux/2017-02/140994.htm

猜你喜欢

转载自blog.csdn.net/ymaini/article/details/81989332