如何在不使用 ln 的情況下建立符號連結?

如何在不使用 ln 的情況下建立符號連結?

我刪除了一個關鍵的符號連結 - 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 啟動並連結檔案。

相關內容