这可能听起来很傻,但我想卸载 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 将卸载bash
、lightdm
和ubuntu-desktop
元包(以及依赖这三个包的所有包),因为它们都依赖于。除非您当前的 shell 运行正常,否则在您终止或dash
的最后一个实例后,您的系统将无法使用。bash
dash
如果您确实执行此命令,则恢复正确文件的唯一方法是启动 Live CD 并通过chroot
ed 恢复会话重新安装软件包。
如果你是真的幸运的是,您仍然可以通过重新安装软件包来实时修复系统,前提是您仍然打开 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
(只要它们不依赖于*sh
或xterm
)。