/lib64 损坏了,可以挽救吗?(ubuntu/mint12)

/lib64 损坏了,可以挽救吗?(ubuntu/mint12)

在一次使用调试符号重新编译的错误尝试中ld,我最终得到了一个未与 /lib 建立符号链接的 /lib64(Debian 64 位库位于 /lib/x84_64-linux-gnu 中)。我尝试使用 重新安装 libc6 apt,但出现错误并抱怨上述问题。

我(错误地)认为我可以mv /lib64 /tmp && ln -s /lib /lib64;第一个命令起作用了,但系统却坏了(/bin/ld not found等等)。

有什么方法可以就地修复此问题吗?(即无需运行救援盘)

如果我可以匿名发布此文,我就会......[叹气]

答案1

不确定这是否会对部分问题有所帮助,但如果您发现您已经移动了运行时链接器,以至于 mv、cp、ln、rm 等不再起作用,您仍然可以通过明确指定运行时链接器来运行它们(并希望拯救自己)。例如

    mv /lib64 /tmp
    ln -s /lib /lib64 # 失败,没有运行时链接器
    /tmp/lib64/ld-2.13.so /bin/ln -s /lib /lib64 # 应该会成功

答案2

如果其他人遇到过这个问题;一旦我使用恢复光盘将文件放回原位,以下脚本允许我重新安装 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

相关内容