【A】RHEL 6 中误删 libc.so.6 文件后恢复

【Q】:RHEL 6 中 误删 /lib64/libc.so.6 库文件后

libc.so.6 简介

libc.so.6 是Linux系统(RHEL/CentOS)发行版系统中位于/lib64/目录下的GNU C (GLIBC-x.xx)标准库文件链接文件。一般是链接到同目录下的 libc-2.xx.so文件,具体版本号取决于系统版本情况。

可以使用如下命令查看 libc-x.xx.so文件中包含的GLIBC主库版本
strings /lib64/libc-2.12.so |grep -Eo “^GLIBC_.*”

删除libc.so.6后现象

删除此文件后,最直观的现象是:基本系统中绝大部分命令都无法正常使用(这应该是因为Linux系统是C开发的),执行常用的ls、pwd、cd等命令都会报错:

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

如何恢复

恢复此文件有三种方式:

方法1: 如果误删操作后,当前的shell还在登录状态,则直接执行:

#  sln  /lib64/libc-2.12.so  /lib64/libc.so.6

说明:

  1. /lib64/libc-2.12.so 文件是误删 libc.so.6 前已存在于/lib64 目录下的;
  2. 如删libc.so.6之前,不知道/lib64/下的libc-x.xx.so 文件具体版本,我个人有两个办法:
    a. 找个同系统版本的另一台服务器,查一下;
    b. 从libc-2.12.so 开始尝试,如果不存在,就尝试libc-2.13.so …
  3. sln此命令是 创建一个源文件的静态符号链接目标文件。

方法2: 如果误删除操作后,当前的shell还在登录状态,也可以使用如下方式:

# LD_PRELOAD=/lib64/libc-2.12.so  ln -s /lib64/libc-2.12.so  /lib64/libc.so.6

说明:
同方法1说明。

方法2: 如果已经丢失了当前的shell登录,重启进入救援模式:

  1. 挂载系统镜像文件,重启服务器;
  2. 进入救援模式(rescue)
  3. 进入终端后,系统会提示 原系统的目录被mount到/mnt/sysimage下,于是进入/mnt/sysimage,此时就可以使用ln -s命令创建软链接了
  4. 然后重启系统,正常进入系统即可。

或者
可以尝试进入单用户模式试试(此方式本人未试验),但个人感觉可行。

@end