不小心重命名/usr后,如何将其重命名回来?

不小心重命名/usr后,如何将其重命名回来?

我不小心将目录重命名/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 密码,您可能可以使用吉尔斯的解决方案在这里使用LD_LIBRARY_PATH,或者(Gilles 说这不适用于像 sudo 这样的 setuid 二进制文件)重新启动并编辑 GRUB 菜单以init=/bin/busybox作为内核参数启动并将文件夹移回。

答案2

此外穆鲁的回答:

  • 您可以使用一些救援启动 USB 密钥来修复您的系统;例如,如果您的系统是 Debian 或 Ubuntu,请在救援模式下启动安装 USB 闪存盘,然后执行相应的mountmv和操作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”中的剩余链接来访问它们。

相关内容