从为什么我的 Ubuntu 14.04 bash 上使用默认 shell?:
/bin/sh
在 Debian 衍生版本上,您可以通过以 root 身份运行dash来默认在 Dash 和 Bash 之间切换dpkg-reconfigure
。
update-alternatives
两者都dpkg-reconfigure
可以用于更改符号链接链接到的可执行文件,这是否正确/bin/
?
如果是,为此目的,update-alternatives
和之间有什么区别dpkg-reconfigure
?
谢谢。
答案1
update-alternatives
确实可以用来管理 下的符号链接/bin
,甚至其他任何地方;这就是它的目的。它需要协作包或手动设置——需要注册各种替代方案。
dpkg-reconfigure
根本不具体,它只运行包的安装后维护程序脚本。因此它的行为完全依赖于它用来配置的特定包。在bash
anddash
的情况下,维护者脚本处理/bin/sh
符号链接,所以是的,在这种特殊情况下dpkg-reconfigure
用于管理符号链接。
不使用bash
和来管理的原因很简单,当启用该可能性时,不被认为足够强大,无法依赖于像.如果dash
update-alternatives
/bin/sh
update-alternatives
/bin/sh
任何事物一旦出现错误并/bin/sh
最终被删除或指向不存在的文件,系统就会变得毫无用处且难以修复;它甚至无法正常启动...因此bash
请dash
务必小心以确保其/bin/sh
始终可用。这涉及到预安装“脚本”(实际上是二进制文件,以避免预依赖循环)中的一些仔细处理、涉及的技巧dpkg-divert
以及安装后脚本中的一些最后的处理。您将在以下位置找到所有这些设计的详细信息错误#34717(十九年前)。
要了解系统中的哪些二进制文件是使用替代方案处理的,哪些是使用转移(来自维护者脚本)处理的,您可以使用相应的工具,特别是dpkg-divert --list
它会列出所有转移。因为update-alternatives --list
您需要知道您感兴趣的替代组,但替代组很容易发现,因为它们都是指向/etc/alternatives
.
答案2
该update-alternatives
命令要求所有替代项注册到它,以便它管理哪个替代项将获得 /bin 中指向的符号链接。
替代系统非常灵活,因为它可以一次管理多个符号链接,并且可以处理多个替代实现,可能会给予它们权重,以帮助决定在安装两个以上时选择哪一个,并且还会优雅地选择一个如果该权重被卸载,则具有下一个最高权重。
使用的方案使用dpkg-reconfigure dash
dpkg 的转移系统,其中一个包(bash)发布/bin/sh
,但其他包可以“转移”它以覆盖其实现。
dpkg 的转移系统不限于符号链接(也可以转移文件),并且不需要主包发送原始符号链接(或文件)来修改以采用诸如update-alternatives
.
转移系统不像替代系统那么灵活,因为它通常依赖于要配置的软件包将自己置于转移的顶部,并且在许多情况下根本不进行任何配置(只需安装新的软件包就会自动转移文件)来自先前安装的软件包,无需配置。)这些限制也使得使用 dpkg 的转移系统来实现两个以上的替代方案变得更加困难。