linux删除了libc.so.6

Linux 刘宇帅 6年前 阅读量: 6649

不小心删除了libc.so.6

升级系统软件说依赖更高glibc库,然后升级过程中错误删除了libc.so.6。。导致所有的命令均无法执行。
例如执行ll,有如下提示

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

libc.so.6介绍

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。

sh bash这些都是依赖与glibc库的,所以你如果删除了glibc.so.6链接库,你对系统机会什么都做不了。。

误删libc.so.6恢复

如果你shell窗口还没关闭,并且还是root用户

libc.so.6位于/lib64/libc.so.6。这个文件是一个软连,所以一般误删除之后源文件并未删除,我们可以通过重建软连接来恢复。

  • 第一步我们需要找到源文件,可以通过ll /lib64/libc- 命令行自动提示的功能来找到源文件(例如是: /lib64/libc-2.17.so)
  • 第二步 使用变量 LD_PRELOAD来重新建立链接
    LD_PRELOAD=/lib64/libc-2.17.so ln -s /lib64/libc-2.17.so /lib64/libc.so.6      // 两条命令必须同一行执行!!

    linux调用库文件的时候会到系统的lib目录查找,而LD_PRELOAD则能够改变搜索路径,会现在LD_PRELOAD变量值的目录里找,再到系统lib库里找。

另外如果你是redhat6版本可以通过busybox恢复(网上找到的方案,非验证) 通过busybox恢复如下

busybox ln -s /lib64/libc-2.17.so /lib64/libc.so.6

除了处于这个状态的情况下可以通过命令行操作恢复,其他状态均无法恢复。因为丢失了libc.so.6你什么都干不了

无法通过命令行方式恢复状态列举
  1. 如果你删除了libc.so.6软连,当前用户是非root则无法通过命令行简单恢复 首先你不是root,想用方法1是不可能的,因为你没有/lib64目录的写权限
    看了方法1,可能会想到用以下方式
    LD_PRELOAD=/lib64/libc-2.17.so ln sudo -s // 或则su root

    答案是不可以,因为su、sudo里LD_PRELOAD变量是不加载的或者说是不生效的。

  2. shell窗口关闭则无法恢复,应为ssh不可执行,根本就登录不上了。。

shell链接断开,或者libc源文件丢失

  1. 虚拟机:关闭出问题的虚拟机,当前虚拟机同一个母机的其他虚拟机,增加虚拟硬盘,选择出问题的虚拟机硬盘文件。然后把libc文件复制过去
  2. 实体机:拆下硬盘挂到其他linux系统上,把文件复制过去即可。

重装系统

直接重装

提示

功能待开通!


暂无评论~