centos系统误删libc.so.6

    前段时间遇到开发人员更新glibc版本,把/usr/lib64/libc-2.12.so & libc.so.6 -> libc-2.12.so 这个软链接更改以后致使报错:linux

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

    没法远程登陆,终端也没法登陆,也没法单用户登陆,如图:bash

终端登陆:网络

单用户:yii

其实在执行误操做以后只要不断开远程链接还有挽回的余地,但远程异常断开链接以后不少人就没有辙了,准备抢救数据&文件,重装系统,其实这里我们先不要着急重装系统,我们来试试rescue !命令行

1、首先准备好系统安装盘,使用安装盘启动:code

wKioL1bQFyiiyx9pAAGi8wcejWs890.png :blog

 

2、选择语言和键盘(默认的就好):ip

wKiom1bQFpnQUkFGAABXeZieUXc445.png

3、稍等一下子会出现要不要设置网络,通常来讲网络没问题就不用设置了,我这里选择No:开发

wKiom1bQFy6SBsq-AAA1PQGe3yE741.png

4、这里就是rescue选项了:

  1. 选择Continue,则救援模式程序会自动查找系统中已有的文件系统,并把他们挂载到/mnt/sysimage目录下。

  2. 选择Read-Only,则会以只读的方式挂载已有的文件系统。

  3. 手动挂载则Skip。

  4. Advanced ,高级选项就不做说明了。

我们这儿选择Continue:

wKioL1bQGCDDcHoqAACDKFkw2gE957.png

5、原系统挂载路径/mnt/sysimage,若是想得到原系统root环境,执行行命令:chroot /mnt/sysimage 便可。

wKioL1bQGdThFUjbAABWTp9lqv0392.png

6、这里能够执行fakd诊断,固然咱们这里直接进入shell 命令行:

wKiom1bQGqeT8qgyAAA-3a6VVso643.png

7、本次重头戏来了,由于/usr/lib64/libc-2.12.so & libc.so.6 -> libc-2.12.so 问题,执行chroot /mnt/sysinage会报错:

wKiom1bQGzmhzNfRAABQaSlSqbQ574.png

8、不要惧怕,执行:

cp /lib64/libc-2.12.so /mnt/sysimage/lib64/libc-2.12.so
cp /lib64/libc.so.6 /mnt/sysimage/lib64/libc.so.6

将光盘文件拷贝到系统文件去,再执行chroot /mnt/sysinage 就正常了:

wKiom1bQHe7TjnaLAABX_O5j2MU011.png

其实到这里我此次rescue 已经完成了,由于系统缺乏/usr/lib64/libc-2.12.so文件和 libc.so.6 -> libc-2.12.so软链接 ,复制过去就行了 。

9、退出shell & reboot  

wKiom1bQHuryNHddAAAZAeE9iu0368.png

简单的另外一个方法:
那就远程链接还未关闭:
# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
该命令的含义是:
linux调用so库文件时,先搜索当前路径,而后是系统库目录,提供LD_PRELOAD系统变量能够改变这个顺序,改变后的搜索顺序为 LD_PRELOAD, 当前路径, 系统库目录。
因而,使用LD_PRELOAD指向正常的glibc库文件,而后执行ln等命令,就能够正常执行,执行成功以后, libc.so.6 -> libc-2.12.so就又存在了。

其余系统文件损坏也能够参照一样步骤进行,就不在此赘述了 。

欢迎你们多多指教

相关文章
相关标签/搜索