有没有办法列出系统上所有可配置的“替代品”(类似命令的符号链接)?

uvs*_*tid 40 linux redhat fedora

RHEL/Fedora 上的alternatives命令 (package chkconfig) 管理符号链接,这些符号链接将通用名称链接到替代实现之一。例如,一mta组符号链接可以由 Sendmail 和 Postfix 提供(以实现 iesendmail命令):

alternatives --display mta
Run Code Online (Sandbox Code Playgroud)

虽然我可以使用--display一组符号链接,但我需要先猜测它的名称(即mta)。

我可以简单地列出所有可能的可配置符号链接组(如mta)以供选择吗?

原因是我偶尔会忘记一些组名。

小智 42

在 Debian(但不是 Fedora 或 RHEL)上,查看所有“主替代名称”的列表:

update-alternatives --get-selections
Run Code Online (Sandbox Code Playgroud)

--get-selections 列出主备用名称及其状态。

对于列出的每个,您可以运行--list $ALTERNATIVE_NAME,例如

update-alternatives --list editor
Run Code Online (Sandbox Code Playgroud)

--list name 显示链接组的所有目标。

如果您想查看各自组中所有备选方案的列表,您可以在fishshell 中运行以下命令:

for alternative in (update-alternatives --get-selections)
    echo $alternative 
    update-alternatives --list (echo $alternative | cut -d" " -f1)
    echo
end | pager
Run Code Online (Sandbox Code Playgroud)

(ba|z)?sh 语法应该是类似的。

要更改备选方案,请运行 sudo update-alternatives --config $ALTERNATIVE_NAME


uvs*_*tid 21

确切的答案是(RHEL):

ls /var/lib/alternatives
Run Code Online (Sandbox Code Playgroud)

目录/etc/alternatives维护着主从混合在一起的所有符号链接的扁平长列表。从属符号链接不能与alternatives --display [symlink]命令一起使用。

同时目录/var/lib/alternatives包含每个组的状态信息(包括主从关系)在文件名的缩短列表中,所有这些都可以直接与--display选项一起使用。例如/var/lib/alternatives/java

alternatives --display java
Run Code Online (Sandbox Code Playgroud)

  • 在 Ubuntu 12.04 上,没有 `/var/lib/alternatives`,它似乎是 `/var/lib/dpkg/alternatives`。 (4认同)

Mic*_*ton 5

最简单的答案是...

ls /etc/alternatives
Run Code Online (Sandbox Code Playgroud)