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的動態鏈接庫,如果您不小心把它給刪除了,基本上所有命令都不能使用了,之前很多同學都通過重裝操作系統來解決,今天介紹一種一條命令可以解決的辦法:
[root@localhost ~]# 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 ;
試驗模擬現場:刪除文件,後恢復(前提沒有退出終端,也沒有重啟服務器)
在服務器查看/lib64目錄:
libc.so.6 是軟鏈接文件,鏈接的源文件就是libc-2.12.so 文件,刪除軟鏈接文件,可以使用上面的方法恢復;
[root@localhost lib64]# ll libc*
-rwxr-xr-x. 1 root root 1923352 May 10 2016 libc-2.12.so
lrwxrwxrwx. 1 root root 12 Aug 3 10:18 libc.so.6 -> libc-2.12.so
操作過程:
刪除文件,之後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
重新加載
[root@localhost lib64]# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
可以使用cp ls 命令,恢復成功;
[root@localhost lib64]# cp libc-2.12.so /tmp/
[root@localhost lib64]# 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