在做实验的过程中,对于一些系统关键的库,要小心使用,稍不留神就会造成系统的瘫痪,比如小编在做实验的时候不小心将/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_PRELOAD简介:在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtimelinker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以向别人的程序注入恶意程序,从而达到那不可告人的罪恶的目的。
以上都是概念的补充,接下来我们会用到。
造成系统找不到libc.so.6库的原因有