是否可以卸载 sh?

是否可以卸载 sh?

这可能听起来很傻,但我想卸载 sh(出于研究目的)并将其替换为我自己的 shell。这实际上可能吗?

许多脚本和程序似乎都对其进行了硬编码,因此我对它的可行性表示怀疑。

答案1

⚠️警告!运行任何命令前请先阅读!⚠️

这个答案是仅有的提供研究和进一步了解 Ubuntu Linux。运行此答案中的任何命令都可能会完全破坏您的系统。确保您在 VM 或备份中。如果您破坏了系统,我不承担任何责任。

该命令由 通过符号链接sh提供:dash

$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jun  1 08:33 /bin/sh -> dash*

$ which sh
/bin/sh

$ dpkg -S /bin/dash
dash: /bin/dash

$ dpkg -S /bin/sh
diversion by dash from: /bin/sh
diversion by dash to: /bin/sh.distrib
dash: /bin/sh

要删除它,请运行以下命令:

sudo apt remove dash

APT 将返回以下错误消息:

You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'

如果您真的愿意破坏您的系统,请输入该内容并按Return

然后 Ubuntu 将卸载bashlightdmubuntu-desktop元包(以及依赖这三个包的所有包),因为它们都依赖于。除非您当前的 shell 运行正常,否则在您终止或dash的最后一个实例后,您的系统将无法使用。bashdash

如果您确实执行此命令,则恢复正确文件的唯一方法是启动 Live CD 并通过chrooted 恢复会话重新安装软件包。

如果你是真的幸运的是,您仍然可以通过重新安装软件包来实时修复系统,前提是您仍然打开 root shell。系统已从更糟糕的情况中恢复过来但要做到这一点,运气确实需要站在你这一边。


相反,我建议你重新创建/bin/sh指向 shell 的符号链接。在这种情况下,dash如果出现严重错误,你可以恢复到。通过运行以下命令执行此操作:

sudo -s
cd /bin
rm sh
ln -s /path/to/your/shell sh
chmod 777 sh

dash重复这些步骤,但指定dash而不是您自己的 shell,即可恢复到。或者直接运行sudo apt install --reinstall dash。您可能需要指定自定义init去做这个。

答案2

我会安装您自己的 shell 和 SH。卸载 SH 是一个非常糟糕的主意,因为许多程序和脚本都依赖它。

答案3

快进几年,是的,sh可以卸载并运行,但仅限于单应用程序场景,例如专用的 docker 容器,而不是通用的多应用程序系统。

例如,谷歌已经在其无发行版容器. 有些应用程序可能复制在那里(已经安装在更完整的系统中,例如早期的 Debian,使用两阶段 docker 构建),并使用 标识的所有共享依赖项完成ldd(只要它们不依赖于*shxterm)。

相关内容