误删除libc.so.6 恢复
一、我是怎样一步一步毁掉系统的
最近在centos 7上进行开发。由于需要使用高版本linux内核的特性,需要将linux内核升级。按照教程:centos 7升级内核 进行升级的时候发现在安装elrepo的yum源时遇到问题说elrepo-release-7.0-2.el7.elrepo.noarch.rpm 需要glibc-2.17。
使用ldd --version 发现系统的glibc版本为 glibc-2.22,当时没有想到更好的方法,就尝试将系统的glibc版本修改为glibc-2.17.
于是按照stackoverflow上的教程
You cannot update glibc on Centos 6 safely. However you can install 2.14 alongside 2.12 easily, then use it to compile projects etc. Here is how:
mkdir ~/glibc_install; cd ~/glibc_install
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
tar zxvf glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/opt/glibc-2.14
make -j4
sudo make install
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib
进行编译安装 glibc-2.17.
当make install 完成之后,看教程上说需要将 /lib64/libc.so.6 软链接更新为 /usr/local/glibc-1.7/lib/libc-2.17.so,于是我准备删除 /lib64/libc.so.6,然后新建一个指向/usr/local/glibc-1.7/lib/libc-2.17.so.然后我就删除了 /lib64/libc.so.6,然后,就没有然后了。。。
libc.so.6 是c运行时库 glibc的软链接,而系统几乎所有程序都依赖c运行时库。程序启动和运行时,是根据libc.so.6 软链接找到glibc库。删除libc.so.6将导致系统的几乎所有程序不能工作。每个glibc.so文件有它支持的libc版本,可以通过# strings /lib64/libc.so.6 |grep GLIBC_ 查看。如果程序编译的时候链接的libc库版本不在程序运行环境下的glibc库支持的libc版本之内,也会报错.
于是,系统的所有命令 ls,cp,cd 等等都无法使用了。
二、修复系统
赶紧百度了下该怎么处理,发现说使用系统光盘或者U盘进入修复模式,在修复模式下新建 libc.so.6 软链接。于是我就按照教程centos7 营救模式 和 lic.so.6 缺失问题的做法修复。大体步骤是:
1.搞到系统光盘或者U盘
2.开机设置bios由光盘或U盘启动
3.选择 troubleshooting,rescue a centos system
4.进入终端,系统提示说 原系统的目录被mount到/mnt/sysimage下,于是进入/mnt/sysimage,此时就可以使用ln -s命令创建软链接了。
5.重启,搞定
更简单的做法
这种做法要求在删除libc.so.6之后没有关闭shell或者ssh连接的情况下紧急处理。按照教程libc.so.6: cannot open shared object file报错处理所说,执行
先删除连接 :
# cd /lib64
建立新连接 :
# LD_PRELOAD=/usr/local/glibc-2.17/libc-2.17.so ln -s /usr/local/glibc-2.17/libc-2.17.so /lib64/libc.so.6
#注意 LD_PRELOAD和后面的ln -s在同一行
LD_PRELOAD的解决原理是,linux调用so库文件时,先搜索当前路径,然后是系统库目录,提供LD_PRELOAD系统变量可以改变这个顺序,改变后的搜索顺序为 LD_PRELOAD, 当前路径, 系统库目录。
于是,使用LD_PRELOAD指向正常的glibc库文件,然后执行ln等命令,就可以正常执行,执行成功之后, libc.so.6 就又存在了。
误删除libc.so.6 恢复的更多相关文章
- mysql 误删除ibdata1之后如何恢复
mysql 误删除ibdata1之后如何恢复 如果误删除了在线服务器中mysql innodb相关的数据文件ibdata1以及日志文件 ib_logfile*,应该怎样恢复呢? 这时候应该一身冷汗了吧 ...
- linux下rm误删除数据库文件的恢复方法
在linux redhat 5.4版本,rm误删除数据库文件的恢复过程分享.测试没有问题,可用. 1.首先测试rm 误删除数据库文件 [oracle@primary dbwdn]$ ll total ...
- 误删除libc.so.6的解决方法
误删除libc.so.6的解决方法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://63638790.blog.51cto. ...
- Oracle误删除表空间的恢复
对于误删除表空间的恢复,本文通过基于数据库的时间点恢复和基于表空间的时间点恢复分别加以讨论 一 通过基于数据库的时间点恢复被误删除的表空间 1 需要注意的事项 a 基于数据库的时间点恢复将会回退整个数 ...
- ESXi5.0误删除虚拟机还有办法恢复吗?答案是可以!
[数据恢复故障描述]故障的虚拟化系统是 ESXi5.0,连接了多个LUN,其中一个1T的LUN上跑有7 台虚拟机,均为Windows Server 2003,管理员因为其它原因误删除了一台虚拟机,此台 ...
- 转://Linux下误删除/home目录的恢复方法
一般情况下,我们在安装Oracle数据库的时候,都会创建一个Oracle用户,用该用户来安装和管理Oracle.Oracle用户的根目录就是/home/oracle. 通常安装Oracle数据库是按照 ...
- linux-ext4格式文件误删除,该如何恢复?
在开始进行实验之前,我已经新建了一个空目录/data,并将该目录挂载了一块新硬盘,将硬盘分区格式化为ext4的格式,所以当我操作/data目录下的文件及文件夹的时候,实际上就是针对新挂载的硬盘进行数据 ...
- 误删除libc.so.6的解决
最近安装一个软件需要glibc-2.17. 使用ldd --version 发现系统的glibc版本为 glibc-2.12,当时没有想到更好的方法,就尝试将系统的glibc版本修改为glibc-2. ...
- 企业案例-Mysql误删除用户表如何恢复
1.不小心删除了mysql所有用户 mysql> delete from mysql.user where 1=1; Query OK, 5 rows affected (0.00 sec) # ...
随机推荐
- Java多线程学习(三)
一.线程的异常(续) 在上一篇博文中我们提到了Thread.UncaughtExceptionHandler接口,我们在日常的编写中可以通过实现这一接口来给每一个Thread对象都附着一个异常处理器, ...
- 227 Entering Passive Mode (xxx,xxx,,xxx,xxx,x)
登录ftp时显示227 Entering Passive Mode (xxx,xxx,,xxx,xxx,x) 因为FTP有两种工作模式,PORT方式和PASV方式,中文意思为主动式和被动式 ,详细介绍 ...
- java反射小例子
package com.txwsqk.reflect; public class Car { private String brand; private String color; private i ...
- OC-hello, world
你好, 世界 --1-- Xcode创建OC项目 1.1 OC命令行项目 --2-- NSLog函数和@符号 2.1 NSLog的介绍 2.2 NSLog使用方法 2.3 NS前缀的含义 2.4 @符 ...
- 山东省第七届ACM省赛------Julyed
Julyed Time Limit: 2000MS Memory limit: 65536K 题目描述 Julyed is preparing for her CET-6. She has N wor ...
- 关于HandlerThread的分析
Android中的Thread没有对java中的Thread做任何封装,而Android提供了一个遍历方法HandlerThread,他继承于Thread,实现了对遍历系统的一些封装,下面研究一下Ha ...
- 20161011001 treeView 递归
protected void FillTree() { H_data H_data = new H_data(); H_data.sql_text1 = " ...
- JavaScript局部变量和全局变量的理解
原文链接:http://www.cnblogs.com/eric-qin/p/4166552.html JavaScript局部变量和全局变量的理解 1 2 3 4 5 6 7 8 9 10 &l ...
- [Linux] Nginx networking 403 Forbidden 静态文件不允许查看
nginx 的 403 Forbidden errors 表示你在请求一个资源文件但是nginx不允许你查看. 403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误 ...
- 使用FIR.im发布自己的移动端APP
一次很偶然的机会知道FIR.im,这家公司主要的产品就是帮助开发者方便便捷地发布iOS或者Android应用的.今天我就聊聊如何在FIR.im中发布自己的APP,然后让加入UUID的设备通过网页直接下 ...