一、我是怎样一步一步毁掉系统的

最近在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,然后,就没有然后了。。。

  1. libc.so.6 是c运行时库 glibc的软链接,而系统几乎所有程序都依赖c运行时库。程序启动和运行时,是根据libc.so.6 软链接找到glibc库。删除libc.so.6将导致系统的几乎所有程序不能工作。
  2. 每个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 恢复的更多相关文章

  1. mysql 误删除ibdata1之后如何恢复

    mysql 误删除ibdata1之后如何恢复 如果误删除了在线服务器中mysql innodb相关的数据文件ibdata1以及日志文件 ib_logfile*,应该怎样恢复呢? 这时候应该一身冷汗了吧 ...

  2. linux下rm误删除数据库文件的恢复方法

    在linux redhat 5.4版本,rm误删除数据库文件的恢复过程分享.测试没有问题,可用. 1.首先测试rm 误删除数据库文件 [oracle@primary dbwdn]$ ll total ...

  3. 误删除libc.so.6的解决方法

     误删除libc.so.6的解决方法   原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://63638790.blog.51cto. ...

  4. Oracle误删除表空间的恢复

    对于误删除表空间的恢复,本文通过基于数据库的时间点恢复和基于表空间的时间点恢复分别加以讨论 一 通过基于数据库的时间点恢复被误删除的表空间 1 需要注意的事项 a 基于数据库的时间点恢复将会回退整个数 ...

  5. ESXi5.0误删除虚拟机还有办法恢复吗?答案是可以!

    [数据恢复故障描述]故障的虚拟化系统是 ESXi5.0,连接了多个LUN,其中一个1T的LUN上跑有7 台虚拟机,均为Windows Server 2003,管理员因为其它原因误删除了一台虚拟机,此台 ...

  6. 转://Linux下误删除/home目录的恢复方法

    一般情况下,我们在安装Oracle数据库的时候,都会创建一个Oracle用户,用该用户来安装和管理Oracle.Oracle用户的根目录就是/home/oracle. 通常安装Oracle数据库是按照 ...

  7. linux-ext4格式文件误删除,该如何恢复?

    在开始进行实验之前,我已经新建了一个空目录/data,并将该目录挂载了一块新硬盘,将硬盘分区格式化为ext4的格式,所以当我操作/data目录下的文件及文件夹的时候,实际上就是针对新挂载的硬盘进行数据 ...

  8. 误删除libc.so.6的解决

    最近安装一个软件需要glibc-2.17. 使用ldd --version 发现系统的glibc版本为 glibc-2.12,当时没有想到更好的方法,就尝试将系统的glibc版本修改为glibc-2. ...

  9. 企业案例-Mysql误删除用户表如何恢复

    1.不小心删除了mysql所有用户 mysql> delete from mysql.user where 1=1; Query OK, 5 rows affected (0.00 sec) # ...

随机推荐

  1. jQuery File Upload done函数没有返回

    最近在使用jQuery File Upload 上传图片时发现一个问题,发现done函数没有callback,经过一番折腾,找到问题原因,是由于dataType: ‘json’造成的,改为autoUp ...

  2. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  3. WebConfig错误页配置

    在system.web节下配置<customErrors mode="On" defaultRedirect="/ErrorPage/MyErrorPage.htm ...

  4. CEGUI0.8.4引入到自己工程中

    首先要确定你的CEGUI已经完全编译好,若未进行这一步请参照http://www.cnblogs.com/wenguang1996/p/5027522.html 打开VS2012新建C++工程,然后添 ...

  5. C#委托和事件

    委托和事件都可以用来调用跟自己方法签名一样的方法,两者在使用中主要有以下区别: 委托和事件没有可比性,因为委托是类型,事件是对象: 委托可以在声明它的类外部进行调用,而事件只能在类的内部进行调用: 委 ...

  6. ADB简单基础命令

    1.查看设备 adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2.安装软件 adb install adb install :这个命令将 ...

  7. PHP获取时间、时间戳的各种格式

    1.获取当前时间方法date() 很简单,这就是获取时间的方法,格式为:date($format, $timestamp),format为格式.timestamp为时间戳--可填参数. 2.获取时间戳 ...

  8. 笔记--mysql rpm 安装

    1.rpm包下载 http://taokey.blog.51cto.com/4633273/1630561

  9. 《编写可维护的JavaScript》——JavaScript编码规范(二)

    昨天是我偶像生日,现在整个人都还好兴奋啊O(∩_∩)O~  闲话少说,让我先发篇随笔留念一下^_^ ////////////////////////////////正文分割线///////////// ...

  10. Linux内核分析:dup、dup2的实现

    一.首先需要看一下这两个函数的作用: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 根据m ...