linux删除了libc.so.6
Linux 刘宇帅 6年前 阅读量: 6530
不小心删除了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你什么都干不了
无法通过命令行方式恢复状态列举
- 如果你删除了libc.so.6软连,当前用户是非root则无法通过命令行简单恢复
首先你不是root,想用方法1是不可能的,因为你没有/lib64目录的写权限
看了方法1,可能会想到用以下方式LD_PRELOAD=/lib64/libc-2.17.so ln sudo -s // 或则su root
答案是不可以,因为su、sudo里LD_PRELOAD变量是不加载的或者说是不生效的。
- shell窗口关闭则无法恢复,应为ssh不可执行,根本就登录不上了。。
shell链接断开,或者libc源文件丢失
- 虚拟机:关闭出问题的虚拟机,当前虚拟机同一个母机的其他虚拟机,增加虚拟硬盘,选择出问题的虚拟机硬盘文件。然后把libc文件复制过去
- 实体机:拆下硬盘挂到其他linux系统上,把文件复制过去即可。
重装系统
直接重装