glibc编译及误删除修复
基于源码构建glibc(得到so文件),继而替换升级so
glic
glibc库,是系统中最核心的共享库和工具,所以最好不要覆盖系统默认的,如果盲目覆盖,很可能导致整个系统瘫痪.
因为一般更新glibc库时,其它所有依赖libc库的共享库都需要重新被编译一遍,所以要做了备份工作.防止系统崩溃.
加载so
1、查看glibc支持的版本
strings /lib64/libc.so.6 |grep GLIBC_
rpm -qa |grep glibc
2、加入系统库
LD_PRELOAD="/lib64/libc-2.18.so"
vi /etc/ld.so.conf
加入一行即可
/lib64
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
1.glibc buiding libc.so
curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
#make instal
如果不需要安装,仅仅需要so则不用执行make install
2.误删除libc.so.6的解决方法
glibc是GNU发布的libc库,即c运行库。
glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。
glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。
而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。
在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。
Linux的很多命令都是依赖libc.so.6的动态链接库,如果您不小心把它给删除了,基本上所有命令都不能使用了,之前很多同学都通过重装操作系统来解决
3.误删除,未退出终端
//此操作有前提的,源文件为删除,仅仅删除软连接文件,且有一个终端未退出(前提)
LD_PRELOAD=/lib64/libc-2.12.so
ln -s /lib64/libc-2.12.so /lib64/libc.so.6
注:目前CentOS 6.x 64位的glibc的版本是 v2.12 ;
4.误删除模拟
试验模拟现场:删除文件,后恢复(前提没有退出终端,也没有重启服务器)
1、在服务器查看/lib64目录:
libc.so.6 是软链接文件,链接的源文件就是libc-2.12.so 文件,删除软链接文件,可以使用上面的方法恢复;
//centos6.5
[root@lab-110 ~]# ll /lib64/libc.so.6 //glbic版本
lrwxrwxrwx. 1 root root 12 Jun 28 00:52 /lib64/libc.so.6 -> libc-2.12.so
[root@lab-110 ~]# strings /lib64/libc.so.6 |grep GLIBC_ //glbic的支持版本
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
2、操作过程:
删除文件,之后ls cp 命令无法使用;
[root@localhost lib64]# rm -f libc.so.6
[root@localhost lib64]# ls -lh libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@localhost lib64]# cp libc-2.12.so /tmp/
cp: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
3、重新加载
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
//内置软连接 sln /lib64/libc-2.12.so /lib64/libc.so.6
可以使用cp ls 命令,恢复成功;
cp libc-2.12.so /tmp/
ls -lh libc*
-rwxr-xr-x. 1 root root 1.9M May 10 2016 libc-2.12.so
lrwxrwxrwx 1 root root 19 Nov 25 12:17 libc.so.6 -> /lib64/libc-2.12.so
4、objdump 反汇编查看缺失依赖库
objdump -x liblog4cxx.so|grep NEEDED