我覆盖了/bin/sh 如何恢复它?

我覆盖了/bin/sh 如何恢复它?

我是 Linux 新手,以为/bin/sh是一个文件夹。

我做到了mv path/to/file /bin/sh现在我无法再打开终端和 Ubuntu 软件。可能还有更多我还没有注意到的损坏程序。

我收到错误:

无法生成子进程/bin/sh符号链接层太多

有什么建议吗?

我运行的是 Ubuntu 20.04

答案1

/bin/sh是一个符号链接,覆盖实际上并没有删除任何内容,只是使链接无效。

这是一个问题,因为所有类型的脚本都/bin/sh在 shebang 标头中使用。这可能就是为什么各种随机的事情也会失败的原因。

您需要以 root 身份或通过 sudo:1

cd /bin 
rm sh 
ln -s dash sh 

希望其含义足够清楚,因为根据您发现的机制,使用绝对路径执行此操作可能会更容易(原始链接可能没有使用绝对路径,但这应该不重要)。如果您不熟悉(符号)文件链接man ln

这应该可以让您再次正常使用终端。如果它有效,您可能需要重新启动,以防先前失败的脚本产生持续的后果。

  1. 这是 Debian/Ubuntu 及其系列特定的;其他发行版可能不包含dashshell,而是符号链接到bash.如果没有dashin /bin,则使用bash.

答案2

解决此类问题的一种(通用)解决方案是找出被破坏的文件属于哪个包,然后重新安装该包。如何做到这一点取决于您的发行版的包管理器。在基于 RPM 的系统上,它将是:

rpm -qf /bin/sh         # Package is bash-5.1.0-2.fc34.x86_64 here
yum -y reinstall bash

相关内容