一次误删除libc.so.6后虚惊一场
1. libc.so.6介绍
/usr/lib/libc.so.6是glibc的软链接,不同的平台可能路径会不一样。
使用命令查看会看到:
[root@farmer:~]$ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 11 Jan 1 22:23 /lib/libc.so.6 -> libc-2.9.so
glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc,所以说绝大部分操作命令都缺少不了它。
2. 误删处理
如何误删了libc.so.6,大部分系统命令将无法执行,ssh登录系统也不成功,只会无休止的提示以下错误:
error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
这种情况下,大部分命令已经不能执行了,只能执行例如cd,echo等小部分命令,而实用的cp,mv则不可用
经过各种百度,得到解决方法(而此种方法的前提是ssh还没断开,如果ssh已断开则无法重新连接上,得使用另外的方法用光盘重启进入急救模式):
在同版本系统上查看/lib/libc.so.6得知是属于libc-2.9.so的软链接,因此,libc-2.9.so文件肯定还是存在的,误删的只是软链接而已,但此时想用ln命令重新建立软链接是失败的,但是可以这样强制设置变量就能执行成功!
LD_PRELOAD=/lib/libc-2.9.so ln -s /lib/libc-2.9.so /lib/libc.so.6
红色部分为glibc临时指定的库,这样正确执行后libc.so.6就正确恢复了。
3. 后续
glibc是一个非常底层的库,bash也依赖她,所以,如果把这个库干掉了,基本上啥事都干不了了,但是为啥前面设置一下LD_PRELOAD变量 就可以了呢?是这样的,LD_PRELOAD可以影响程序的运行时的链接(Runtime linker), 它允许你定义在程序运行前优先加载的动态链接库,之前把libc.so.6这个软连接给干掉了,所以系统找不到这个库了,但是通过LD_PRELOAD设置一下glibc这个库的真实地址就可以解决这个问题了
- mysql处理删除自增字段之后下一次插入数据的问题
- 给定一个有序数组,删除重复内容,使每个元素只出现一次
- list一次for循环删除多个数据
- 笔试算法题(18):常数时间删除节点 & 找到仅出现一次的两个数字
- VC环境中MapX一次删除图层所有图元
- 用命令或批处理命令一次删除windows系统一个目录下的所有文件
- 2012世界末日倒计时代码 原来没事虚惊一场
- 虚惊一场
- 一次删除数据库中所有表和存储过程
- 今天虚惊一场
- laravel迁移文件一次删除创建字段报错
- 20051113: 虚惊一场
- 20060125: 虚惊一场
- 2012世界末日倒计时代码 原来没事虚惊一场
- 页面自动加载一次(用于添加或者删除后显示页面)
- 一次Linux服务器被入侵和删除木马程序的经历 推荐
- linux 删除问题 一次删除多个目录下的相同扩展名的文件
- 一次不经意的遇见,一场美丽的情缘
- 记一次因重装系统误删除分区恢复数据
- Remove Duplicates from Sorted List 删除链表中的重复元素,保留一次