CentOS中误删除libc.so.6系统库文件,如何恢复?

在做实验的过程中,对于一些系统关键的库,要小心使用,稍不留神就会造成系统的瘫痪,比如小编在做实验的时候不小心将/lib64/libc.so.6这个系统共享库给不小心删除了,可能刚开始不知道这个库的重要性,结果下一秒就后悔了,因为系统大部分的命令都不能正常使用了,会显示一个:error while loading shared libraries: libc.so.6:cannot open shared object file: No such file or directory。 提示当加载共享库libc.so.6的时候找不到该文件,后来经过查找资料才得以解决,下面小编将我的方法分享给大家:

在开始解决问题之前我们首先的搞清几个概念:

*Libc.so.6共享库是干什么的?

*Selinux是什么鬼?

*LD_ORELOAD是什么东东?

经过小编在因特网上翻江倒海之后,终于弄清除了这些东西都是什么鬼:

Libc.so.6共享库是Linux平台提供的C的标准库,提供了函数的实现,大多数库函数在libc中 ,这就解释了为什么缺少了这个库那么多的命令都运行不了了。

Selinux:以下解释来自于百度文库,SeLinux(Security-EnhancedLinux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件SeLinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SeLinux的补丁,最后还有一个相应的安全策略。任何程序对其资源享有完全的控制权。

SELINUX有「disabled」「permissive」,「enforcing」3种选择。

*Disabled就不用说了,

*permissive就是Selinux有效,

*Enforcing就是你违反了策略,你就无法继续操作下去。

LD_ORELOAD简介:在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtimelinker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以向别人的程序注入恶意程序,从而达到那不可告人的罪恶的目的。

以上都是概念的补充,接下来我们会用到。

造成系统找不到libc.so.6库的原因有三种:

*)文件的名字被更改了,即重命名。

*)文件被移动到别的目录了。

*)文件被删除了。

针对以上三种情况,前两种情况可以看作一种情况处理,文件还在,就是路径系统找不到了,这种情况相对来说要好办一点,对于第三种情况,文件整个都不存在了,这个时候我们就得借助外部的文件进行解决。

我们首先来看一下系统加载libc.so.6的路径信息:

在系统中,libc.so.6的路径明确指明是/lib64/libc.so.6如果此路径发生变化或者文件名对不上号了,都会导致系统找不到该共享文件。

第一种:文件存在,系统找不到

对于这种情况,我们不能再将文件重新复制到或移动到原目录中,因为mv和cp等大多数命令都不能执行了,所以我们看着就是挺着急没办法,首先我们来看一下这种情况:

移动了libc.so.6文件

重命名了libc.so.6文件

ls命令和id命令都不能使用了,这个时候我们就用到LD_ORELOAD这个环境变量了,经过上面的知识补充,我们知道,通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。现在我们可以使用这个环境变量来临时加载还存在但是不在原目录或是名字被篡改了的库文件,在临时添加环境变量的后面接上我们要执行的命令就可以将libc.so.6库恢复到原来的样子,让小编带你进行实验验证:                              将移动的文件恢复                                   将重命名的文件恢复

第二种:文件被删除,不存在了

对于这种情况比较复杂,我们不能通过本地直接进行恢复,我们必须借助外面的文件进行恢复,具体的思路就是通过加载光盘系统文件,将该函数库重新拷贝到本地系统中来,达到恢复的目的,让小编画图来说明:

我们要借助光盘系统将光盘系统中的/lib64/libc.so.6拷贝到本地系统的/lib64/中,达到恢复的目的。

光盘系统和本地系统都是Linux系统,所以有着相似的根目录,需要把本地系统的根挂载到光盘系统根下的一个子目录中,系统默认挂载到/mnt/sysconfig/下,这里的/mnt/sysconfig/就是我们本地系统的根,接下来跟随小编来看一看具体的步骤吧。

首先小编先将我本地的libc.so.6文件删除,为接下来的实验做准备。

在没有这个库文件的情况下,我们是不能使用命令正常关机或重新启动的,我们是在虚拟机的情况下进行的实验所以此步骤仅供参考,不过原理都是一样的。

我们要在虚拟机上进行强制重新启动,如图所示:

在启动前我们需要把系统镜像挂载到CD/DVD(IDE)上,如下图所示:

当进入开机画面的时候要快速的按一下ESC键,进入如下所示的界面,(我们要把鼠标点进虚拟机中,这样执行的操作才是对虚拟机的指令,不要按的太快,别错过这个界面。)选择第三项:光盘驱动。

这个时候我们会进入装机引导界面,这几项分别是:安装或升级存在的系统、安装系统用基本视频驱动、恢复安装的系统、从当地驱动器启动、内存测试。我们要选择恢复安装的系统,如下图所示:

之后会进入选择语言的界面,请根据以下小编的步骤一步步进行:

这里显示,你的系统将会被挂载到/mnt/sysimage目录下,如果你想在root环境下操作,运行命令:chroot /mnt/sysimage

当你选择OK之后系统就会Start shell,如下所示的命令行,此时,我们进入的是光盘系统下的Linux,切记,不要弄混乱了。

这里有必要说明以下,目前进入的系统是光盘中引导的Linux系统,不是真实的本地系统,我们真正的系统刚才也提示过了,被挂载到了/mnt/sysiconfig中,所以除了/mnt/sysiconfig下的东西,别的都是光盘系统中国的文件。

我们的本地系统中没有了libc.so.6这个文件,所以我们需要将光盘系统中的这个文件进行Copy到本地系统中,并放到原来的目录下,这里一定要看清楚自己所在的目录,尽量使用相对路径来进行复制:如小编操作所示:

进行完文件的恢复之后,我们还要对本地系统下的selinux这个文件进行修改,根据我们前面的只是补充,我们知道selinux是一种强制访问安全控制系统,当我们对系统中的重要文件进行了更改之后,重新启动的过程中,这个安全控系统会检测到我们对本地系统进行了更改,因为机器本身不具有检测文件安全性的功能,所以机器本身能做的最好的决定就是,不让你启动,我们在上面的知识扩展中也了解到,selinux一共有三种选择:

*Disabled就不用说了,是禁止的意思。

*permissive就是Selinux有效,

*Enforcing就是你违反了策略,你就无法继续操作下去。

在我们知情的情况下,我们复制了该文件,并且该文件也是安全的,所以我们可以经SELIUNX的值修改为Disabled,不执行安全监测,可以让我们正常启动,当然在我们正常启动并恢复后,我们可以再将该值修改回来,开启安全监测功能。小编的操作如下:

一定要记得,是需要对本地系统的selinux进行的操作,如果修改成了光盘系统中的selinux,那么是不能正常启动的。请一定确定路径的正确性。

在nano编辑器中,我们修改好之后要进行ctrl + o进行保存,Ctrl +x进行退出。退出之后,我们进行重启。

等到重启完成我们就可以进入正常的系统了,如下图所示:

通过这次的实验和学习,我们不仅知道了如何恢复libc.so.6文件,(其实,这种方式也适用于其他重要文件的恢复)还学习到了三个知识点:

明白了libc.so.6文件的作用以及该文件对系统的重要性。

知道了selinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统。

知道了LD_PRELOAD是一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。

收获满满!

时间: 2024-08-24 19:13:51

CentOS中误删除libc.so.6系统库文件,如何恢复?的相关文章

移动硬盘显示使用驱动器中的光盘之前需要格式化文件怎样恢复

使用驱动器中的光盘之前需要格式化说明这个盘的文件系统结构损坏了.在平时如果数据不重要,那么可以直接格式化就能用了.但是有的时候里面的数据很重要,那么就必须先恢复出数据再格式化.具体恢复方法可以看正文了解(不格式化的恢复方法) 工具/软件:星空数据恢复软件 步骤1:先下载并解压软件运行后,直接双击需要恢复的分区,然后右击软件图标选择<以管理员身份运行>(如果是xp系统可以直接双击打开软件)步骤2:程序打开后,直接双击需要恢复的分区步骤3:软件会很快将找出的文件,放到与要恢复盘卷标名相同的目录中步

centos下误删除文件

在centos6下 :  rm  -rf /  已经被屏蔽了. windows  恢复误删除的文件:  final data v2.0 汉化版  和  easyrecoverycentos  ext4文件系统上删除文件,可以恢复  extundelete (使用范围 ext4及以前 的ext系列文件类型)扩展:    linux文件系统由三部分组成:文件名   inode  block    查看inode 方法:    #ls -i filename      #stat filename问题

2017-7-19-每日博客-关于Linux下的CentOS中文件夹基本操作命令.doc

CentOS中文件夹基本操作命令 文件(夹)查看类命令 ls--显示指定目录下内容 说明:ls 显示结果以不同的颜色来区分文件类别.蓝色代表目录,灰色代表普通文件,绿色代表可执行文件,红色代表压缩文件,浅蓝色代表链接文件. -a---显示所有内容,包括隐藏文件 说明:在Linux系统中,以"."开头的就是隐藏文件或隐藏目录. -l---以长格式(内容更详细)显示文件或目录的详细信息. 说明:ls -l命令可以简写成ll, 输出的信息共分为7组:文件类别和文件权限.链接数或子目录个数.文

在Centos中导入sql文件的方法

对于文件的导入, 在Centos下里面的是首先要新建一个和文件相同名字的数据库. 例如: mysql> create database Student; 然后输入指令: mysql> use Student; 如果没有错误的话,说明进入了你新建的数据库中. 然后把先设置编码: mysql> set names utf8; 接着输入你所导入到Centos下的数据库文Student.sql文件的位置 例如: mysql>source /usr/database.sql; 接着你会看到屏

centos中Mysql数据库导入sql文件

1.对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库. mysql>create database Student; 2.切换到需要导入sql文件的数据库 mysql> use Student; 3.如果没有错误的话,说明进入了你新建的数据库中.然后把先设置编码: mysql>set names utf8; 4.接着输入你所导入到Centos下的数据库文Student.sql文件的位置 mysql>source /usr/database.sql; 文件

Centos中samba精简安装与使用

samba的功能是非常强大的,但是CleverCode在实际的工作中发现,CleverCode使用的功能比较少.最主要的使用是将Linux机器中/home/CleverCode目录,在windows下能够访问.所以一般CleverCode只简单安装,然后将/home/CleverCode目录共享到windows的某个盘. 1 简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是

在CentOS中搭建自己的VPN

很多人都有买国外的VPN看视频的经历,今天我们就讲一讲如何搭建一个自己的VPN.下面是我在CentOS中搭建自己的VPN的过程,简单说来,主要分为两步: 1:购买国外的VPS 2:在购买的VPS上搭建VPN 一.购买国外VPS 1.购买国外的VPS主机[我买的时候用的是朋友推荐的链接,省了点钱,只要是8块多],这里推荐一个我的链接,https://my.frantech.ca/aff.php?aff=2099 2.打开链接以后,这里我们需要先注册一个账户. 3.选择主页[Services]下的[

怎样在Centos中配置gcc、g++、和gdb?

linux中使用gcc来编译C程序,使用g++来编译C++程序,使用GDB来调试程序,这些使用工具都需要自己进行安装,那么应该怎样配置这些工具呢? 首先,在命令行中输入vi查看一下vim的信息如下: 然后,输入ls -a查看是否存在.vimrc和.viminfo这样的配置文件,结果如下: 1.配置gcc.g++ Centos中使用yum来配置gcc和g++,若要安装gcc,则在命令行中输入:yum -y install gcc,按回车键就能够进行gcc的安装,若要安装g++,则需要在命令行中输入

应用SVN(CentOS中搭建SVN服务器)

简单介绍如何在虚拟机 CentOS 中,搭建 SVN 服务器. 软件版本信息 Vmware 10.0.0 build-1295980 CentOS 7.0-1406-x64 Java 1.7.0_67_x64 Suberverson 1.7.14 GNU Wget 1.14 软件安装 subversion yum install subversion 需要选择时,选第一个选项 Wget 用于下载 Java wget --no-cookies --no-check-certificate --he