我不小心将目录重命名/usr
为/usr_bak
.
我想把它改回来,所以我附加了路径/usr_bak/bin
以$PATH
允许系统找到该命令sudo
。
但现在sudo mv /usr_bak /usr
给了我错误:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
除了重装系统还有办法重命名/usr_bak
为吗?/usr
答案1
由于您已经为 root 设置了密码,因此请使用Ubuntu 中默认安装的su
和。busybox
所有su
必需的库都在/lib
. Busybox 是静态链接的实用程序的集合,因此缺少库应该不是问题。做:
su -c '/bin/busybox mv /usr_bak /usr'
(虽然 Busybox 本身也有一个su
小程序,但/bin/busybox
二进制文件不是 setuid,因此除非以 root 身份运行否则无法工作。)
如果您没有 root 密码,您可能可以使用吉尔斯的解决方案在这里使用(Gilles 说这不适用于像 sudo 这样的 setuid 二进制文件)重新启动并编辑 GRUB 菜单以LD_LIBRARY_PATH
,或者init=/bin/busybox
作为内核参数启动并将文件夹移回。
答案2
此外穆鲁的回答:
您可以使用一些救援启动 USB 密钥来修复您的系统;例如,如果您的系统是 Debian 或 Ubuntu,请在救援模式下启动安装 USB 闪存盘,然后执行相应的
mount
和mv
和操作umount
。为了能够更轻松地修复此类错误,我通常还会安装一个带有多个内置命令(特别是一些
cp
,rm
,mv
-like 内置命令)的静态 shell,例如sash
(这是包装好的在 Debian 和 Ubuntu 中,也可以作为sash-3.8.tar.gz以源代码形式)并引导并init=/bin/sash
传递给 Grub。
PS:sash
有点 bug,并且不完全符合 Posix,但仍然非常有用。
答案3
我认为最安全的方法是使用 USB、CD 或 DVD 启动操作系统(Debian、Ubuntu、Suse 等)重新启动。然后安装包含问题的驱动器并进行重命名。
比在 /usr 或 /lib 有效缺失的情况下启动进入雷区更安全。
答案4
我现在不能尝试这个(并且不确定我是否愿意),但看起来是这样应该努力为自己创建一个新的“/usr”作为硬链接(不是软链接)到您的“/usr_bak”,然后删除“/usr_bak”
ln /usr_bak /usr
rm /usr_bak
由“ln”创建的硬链接(带有不文件系统中的“-s”参数应使 usr 和 usr_bak 目录成为指向相关目录的同等有效链接。 “rm”仅删除您要求其删除的一个链接,而不是同时删除两者。由于仍然存在指向内容的有效链接,因此应该可以通过“/usr”中的剩余链接来访问它们。