man 会查找哪个安装的命令名称?

man 会查找哪个安装的命令名称?

在 Lubuntu 18.04 上,默认值为awkmawk我发现man awk给出了 manpagmawk

然后我安装了gawk,就awk成了gawk。并man awk给出了 的 manpag gawk

我想知道这是不是一般情况。换句话说,当我运行man某个命令名称时,它是否始终提供当前与该命令名称关联的安装的联机帮助页?

谢谢。

答案1

这是更新替代方案魔法 。

如果某些命令具有相同的名称(如本例所示)gawkmawk,并且两者都必须通过名称 可用awk,则symlink创建 。例如

/usr/bin/awk -> /etc/alternatives/awk
/etc/alternatives/awk -> /usr/bin/gawk

对男人来说也是如此

/usr/share/man/man1/awk.1.gz -> /etc/alternatives/awk.1.gz
/etc/alternatives/awk.1.gz -> /usr/share/man/man1/gawk.1.gz

man 从中读取/usr/share/man/man1/awk.1.gz,它是指向当前安装的命令手册的符号链接,将打开当前安装的命令手册

/etc/alternatives目录被使用更新替代方案跟踪当前使用的替代方案。

答案2

换句话说,当我运行man某个命令名称时,它是否始终提供当前与该命令名称关联的安装的联机帮助页?

通过正确配置的程序,是的。 (至少对于源自 Debian 的所有软件包来说应该是这种情况。)

正确设置的软件包备择方案up for 命令会将相应的联机帮助页与替代项关联起来。

mawk设置awk低优先级 (5) 的替代方案,并将该nawk命令与两个联机帮助页(forawknawk)相关联。因此,每当mawk选择 为awk提供程序时,它也被选择为nawk提供程序,并且其联机帮助页也被选择为awk和联机帮助页的提供nawk程序。

gawk也以这种方式设置其替代方案,具有更高的优先级(10)。

默认情况下,替代方案以自动模式进行管理:每当安装或删除替代方案时,替代方案系统都会选择具有最高优先级的可用提供程序。当您安装 Lubuntu 时,仅mawk安装了,因此它是唯一的提供程序,并且默认情况下被选中。当您安装时gawk,有两个awk提供程序可用,系统会选择替代方案,gawk因为它具有最高优先级。

您可以使用 来选择自己的替代方案update-alternatives --config awk,这将允许您强制自己的选择(通过选择“手动模式”条目之一),或使用任何自动选择(通过选择“自动模式”条目)。

所有这一切的结果是一堆符号链接/etc/alternatives;可执行文件awk是 的符号链接/etc/alternatives/awk,它本身就是所选提供程序的符号链接。系统的当前状态存储在 下的文件中/var/lib/dpkg/alternatives,每个“主要”替代项都有一个(/var/lib/dpkg/alternatives/awk在本例中)。当然,这是一个实现细节,您应该仅用于update-alternatives与替代系统交互。

相关内容