Libc6
壞了/lib64,可以挽救嗎?(ubuntu/mint12)
在使用調試符號重新編譯的錯誤嘗試中
ld
,我最終得到了一個未符號連結到 /lib 的 /lib64(Debian 64 位庫位於 /lib/x84_64-linux-gnu 中)。我嘗試使用 重新安裝 libc6apt
,但錯誤地抱怨上述問題。我(錯誤地)認為我可以
mv /lib64 /tmp && ln -s /lib /lib64
;第一個命令起作用了,留下了一個損壞的系統(/bin/ld not found
等等)。有沒有辦法就地解決這個問題?(即不執行救援磁碟)
如果我可以匿名發布這個,我會……
$$ sigh $$
不確定這是否會有所幫助,但如果你發現你已經移動了執行時連結器,這樣 mv,cp,ln,rm 之類的東西就不再工作了,你仍然可以執行它們(希望能拯救你自己)通過明確指定執行時連結器。例如
mv /lib64 /tmp ln -s /lib /lib64 # 失敗,沒有執行時連結器 /tmp/lib64/ld-2.13.so /bin/ln -s /lib /lib64 #應該成功
如果其他人有這個問題;一旦我使用恢復光碟將文件放回它們所屬的位置,以下腳本允許我重新安裝 libc:
#!/bin/bash # Fix symlinks in a b0rked /lib64 (Debian). # Libs in /lib64 should be symlinked to /lib/x86_64-linux-gnu; # if a symlink is found in /lib64, try to redirect it to a # file of the same name in /lib/x86_64-linux-gnu. # Then remove the old symlink destination. # # The Problem: # me@box # ls -l /lib64 # -rwxr-xr-x 1 root root 156683 2011-12-29 19:11 ld-2.13.so # lrwxrwxrwx 1 root root 10 2011-12-29 19:11 ld-linux-x86-64.so.2 -> ld-2.13.so # # The Solution: # lrwxrwxrwx 1 root root 10 2011-12-29 19:11 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.13.so # set -e libs=(/lib64/*) bak=$HOME for l in ${libs[@]}; do src=$(ls -l $l |awk '{print $10}'); if [[ ! -z "$src" ]]; then if [[ ! -f "/lib64/$src" ]] || [[ ! -f "/lib/x86_64-linux-gnu/$src" ]]; then echo "error: $l src or dest not found:" echo `ls -l "/lib64/$src"` > /dev/null echo `ls -l "/lib/x86_64-linux-gnu/$src"` > /dev/null continue fi ln -si "/lib/x86_64-linux-gnu/$src" "$l"; mv "/lib64/$src" $bak/; fi done