我不小心将目录重命名/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
Run Code Online (Sandbox Code Playgroud)
除了重装系统,有没有办法重命名/usr_bakas /usr?
mur*_*uru 112
由于您已经为 root 设置了密码,因此在 Ubuntu 中默认安装了su和busybox。所有su必需的库都在/lib. Busybox 是一组静态链接的实用程序,因此缺少库应该不是问题。做:
su -c '/bin/busybox mv /usr_bak /usr'
Run Code Online (Sandbox Code Playgroud)
(虽然 Busybox 本身也有一个su小程序,但/bin/busybox二进制文件不是 setuid,因此除非以 root 身份运行,否则它无法工作。)
如果您没有 root 密码,您可能可以使用 Gilles 的解决方案(Gilles 说这不适用于像 sudo 这样的 setuid 二进制文件)重新启动并编辑 GRUB 菜单以LD_LIBRARY_PATH,或者init=/bin/busybox作为内核参数启动并移动文件夹回来。
Bas*_*tch 35
除了穆鲁的回答:
您可以使用一些救援启动 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有点小问题,不完全符合 Posix,但仍然非常有用。
小智 5
我认为最安全的方法是使用 USB、CD 或 DVD 引导的操作系统(Debian、Ubuntu、Suse 等)重新启动。然后挂载包含问题的驱动器并进行重命名。
比在 /usr 或 /lib 有效丢失的情况下启动到雷区更安全。