
我刪除了一個關鍵的符號連結 - libc.so.6
.我有它應該指向的文件,但由於連結丟失,諸如ln
或 之類的基本命令wget
將不再起作用。但是,echo
或者其他 Bash 內建函數也可以工作。
我正在尋找一種重新建立此符號連結的方法。
答案1
您可以使用 ldconfig,它會重新建立符號連結:
# rm /lib/libc.so.6
rm: remove symbolic link `/lib/libc.so.6'? y
# ls -l /lib/libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file:
# ldconfig
# ls -l /lib/libc*
[skip]
lrwxrwxrwx. 1 root root 12 May 11 07:59 /lib/libc.so.6 -> libc-2.12.so
剛剛測試過,如你所見。
答案2
CentOS 6 一般自備busybox
,一組靜態連結的 Unix 工具,安裝在/sbin
.你可以像這樣運行它:
/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6
答案3
設定LD_PRELOAD以預先載入相關庫。我用 libpthread 嘗試了一下,它似乎有效:
root@spirit:~# mv /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0-bak
root@spirit:~# chattr
chattr: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
root@spirit:~# LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0-bak chattr
Usage: chattr [-RVf] [-+=AaCcDdeijsSu] [-v version] files...
答案4
您可以設定LD_LIBRARY_PATH
變數以包含實際所在的目錄libc.so.6
:
export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"
另外,執行ldconfig
它以重新建立連結。這應該會使命令起作用,以便您可以使用ln
命令來修復系統。
另一種方法是透過 LiveCD 啟動並連結檔案。