![我覆盖了/bin/sh 如何恢复它?](https://linux22.com/image/190882/%E6%88%91%E8%A6%86%E7%9B%96%E4%BA%86%2Fbin%2Fsh%20%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D%E5%AE%83%EF%BC%9F.png)
我是 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
。
这应该可以让您再次正常使用终端。如果它有效,您可能需要重新启动,以防先前失败的脚本产生持续的后果。
- 这是 Debian/Ubuntu 及其系列特定的;其他发行版可能不包含
dash
shell,而是符号链接到bash
.如果没有dash
in/bin
,则使用bash
.
答案2
解决此类问题的一种(通用)解决方案是找出被破坏的文件属于哪个包,然后重新安装该包。如何做到这一点取决于您的发行版的包管理器。在基于 RPM 的系统上,它将是:
rpm -qf /bin/sh # Package is bash-5.1.0-2.fc34.x86_64 here
yum -y reinstall bash