Libc6

壞了/lib64,可以挽救嗎?(ubuntu/mint12)

  • March 14, 2013

在使用調試符號重新編譯的錯誤嘗試中ld,我最終得到了一個未符號連結到 /lib 的 /lib64(Debian 64 位庫位於 /lib/x84_64-linux-gnu 中)。我嘗試使用 重新安裝 libc6 apt,但錯誤地抱怨上述問題。

我(錯誤地)認為我可以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

引用自:https://serverfault.com/questions/354826