所以,最近我从头开始做 Linux 项目,我打开了多个终端,所以我继续制作它,不小心我在另一个终端选项卡(根)中键入了该行,它完全弄乱了符号链接!,我无法在 bash 上运行任何命令。
case $(uname -m) in
i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
;;
x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
;;
esac
我在arch linux上,当我重新启动计算机时,也发生了内核恐慌,它说:“switch_root:执行/sbin/init失败:符号链接级别太多。”
有什么解决办法吗?我希望有人帮忙。
要恢复什么
当您运行此命令时,该
LFS
变量可能未设置。所以它修改了/lib64/ld-linux-x86-64.so.2
和/lib64/ld-lsb-x86-64.so.3
。你已经破坏了动态加载器。因此,您无法运行任何动态链接的程序。几乎每个程序都是动态链接的,包括
bash
,init
,ln
等。/lib64/ld-linux-x86-64.so.2
是重要的。它是 64 位 Arch 程序使用的动态加载器。符号链接由glibc 包提供。从一个正常工作的 Linux 系统,运行注意:数字 2.33 会随着时间而改变!检查
/lib/ld-*.so
系统上存在什么文件。/lib64/ld-lsb-x86-64.so.3
是为了与不是为 Arch 构建的程序兼容。它由ld-lsb
包提供。如果安装了这个包,恢复链接:如果
ld-lsb
未安装,请删除/lib/ld-lsb-x86-64.so.3
.预先计划的独立恢复
当动态库损坏时,您仍然可以运行静态链接的可执行文件。如果您正在运行任何类型的不稳定或滚动发布系统,我建议您使用一组基本的静态链接实用程序。(不仅仅是一个 shell:例如,静态链接的 bash 对创建符号链接没有帮助。)Arch Linux 似乎没有。您可以从 Debian 的busybox-static或zsh-static复制可执行文件:两者都包括 shell 以及内置的核心实用程序,例如
cp
,ln
等。有了这样的预先计划,只要您仍然有一个正在运行的 root shell,您就可以运行
busybox-static
并或运行
zsh-static
并如果您已重新启动并且因为
/sbin/init
无法启动而卡住,请启动到静态 shell:按照“有用的调试技术:”下在最近的公司计算机上启动时崩溃中的步骤,从“按住 Shift”开始。在linux
命令行上,添加init=/bin/busybox-static
(或任何正确的路径)。从恢复系统修复
如果没有提前计划,您将需要运行一个正常工作的 Linux 系统来修复您的系统。Arch wiki建议启动每月一次的 Arch 镜像。您也可以使用SysRescueCD。无论哪种方式,使用您的书面笔记、
lsblk
、fdisk -l
、lvs
或任何可以帮助您弄清楚根分区是什么的东西,然后使用mount /dev/… /mnt
. 然后修复符号链接: