1、命令简介
alternatives是Linux下的一个功能强大的命令。只能在root权限下执行。如系统中有几个命令功能十分类似,却又不能随意删除,则可以用 alternatives 来指定一个全局的设置。
2、命令用法
alternatives [options] --install link name path priority [--slave link name path]... [--initscript service]
alternatives [options] --remove name path
alternatives [options] --set name path
alternatives [options] --auto name
alternatives [options] --display name
alternatives [options] --config name
install | 表示安装 |
link | 是符号链接 |
name | 则是标识符 |
path | 是执行文件的路径 |
priority | 则表示优先级 |
3、命令描述
alternatives创建、删除、维护和显示关于组成备选项系统的符号链接的信息。替代系统是Debian替代系统的重新实现。重写它主要是为了消除对perl的依赖;它的目的是取代Debian的更新依赖脚本。此手册页是Debian项目手册页的一个轻微修改版本。
在一个系统上,可以同时安装多个实现相同或类似功能的程序。例如,许多系统同时安装多个文本编辑器。这为系统的用户提供了选择,允许每个用户在需要时使用不同的编辑器,但如果用户没有指定特定的首选项,则程序很难选择要调用的编辑器。
alternatives旨在解决这个问题。文件系统中的通用名称由提供可互换功能的所有文件共享。alternatives和系统管理员共同决定这个通用名称引用的实际文件。例如,如果系统上同时安装了文本编辑器ed(1)和nvi(1),那么替代的系统将使通用名/usr/bin/editor
默认指向/usr/bin/nvi
。系统管理员可以覆盖此设置,并使其指向/usr/bin/ed
,而alternatives将不会更改此设置,直到明确要求这样做。
通用名不是指向所选备选项的直接符号链接。相反,它是指向alternative目录中某个名称的符号链接,而该名称又是指向所引用的实际文件的符号链接。
当安装、更改或删除提供具有特定功能的文件的每个包时,将调用替代来更新alternatives中关于该文件的信息。alternative通常从RPM包中的%post
或%pre
脚本调用。
将多个alternatives同步是很有用的,这样它们就可以作为一个组进行更改;例如,当安装了多个版本的vi(1)编辑器时,/usr/share/man/man1/vi.1
应该对应于/usr/bin/vi
引用的可执行文件。alternatives通过主和从链接来处理这个问题;当主服务器被更改时,任何关联的从服务器也会被更改。一个主链路和它关联的从链路组成一个链路组。
在任何给定的时间,每个链接组处于两种模式之一:自动或手动。当一个组处于自动模式时,当包被安装和删除时,alternatives将自动决定是否以及如何更新链接。在手动模式下,alternatives不会改变链接;它将把所有决策留给系统管理员。
当链路组第一次被引入系统时,它们处于自动模式。如果系统管理员更改了系统的自动设置,下一次在已更改链接的组上运行alternatives时将会注意到这一点,并且该组将自动切换到手动模式。
每个选项都有一个与之相关联的优先级。当链接组处于自动模式时,该组成员所指向的选项将是优先级最高的选项。
当使用--config
选项时,其他选项将列出名称为主链接的链接组的所有选项。然后将提示为链接组使用哪个选项。一旦你做了改变,链接组将不再处于自动模式。需要使用--auto
选项以返回自动状态。
4、命令选项
选项 | 说明 |
--install link name path pri [--slave slink sname spath] [--initscript service]... | |
| 向系统添加一组alternatives。name是主链接的通用名称, link是它的符号链接的名称, path是为主链接引入的替代方法。 Sname、slink和spath是通用名、符号链接名和从链接的替代名, service是替代名的任何相关初始化脚本的名称。 注意:--initscript是Red Hat Linux特有的选项。 可以指定零个或多个--slave选项,每个选项后面跟着三个参数。 |
如果指定的主符号链接已经存在于alternatives的记录中, 则提供的信息将作为组的一组新的alternatives添加。 否则,将使用此信息添加一个设置为自动模式的新组。 如果该组处于自动模式, 并且新添加的alternatives的优先级高于该组中任何已安装的alternatives, 则符号链接将被更新以指向新添加的alternatives。 如果使用--initscript, alternatives将通过chkconfig管理与alternatives相关联的初始化脚本, 根据哪个alternatives是活动的注册和注销初始化脚本。 注意:--initscript是Red Hat Linux特有的选项。 | |
--remove name path | |
| 删除一个alternatives及其所有关联的从链接。 name是alternative目录中的名称, path是名称可以链接到的绝对文件名。 如果name确实链接到path, 则name将被更新为指向另一个合适的alternatives, 如果没有这样的alternatives,则删除。相应的, 相关的从链接将被更新或删除。如果链接当前没有指向路径, 则不会更改链接;只有关于alternatives的信息被删除。 |
--set name path | |
| link group name的符号link和slave设置为path的符号, link和slave, link group设置为manual模式。 这个选项在最初的Debian实现中没有。 |
--config name | |
| 为用户提供一个配置菜单, 用于选择链接组名的主链接和从链接。 一旦选择,链接组被设置为手动模式。 |
--auto name | |
| 将主符号链接名称切换到自动模式。 在这个过程中,这个符号链接和它的slaves被更新到指向 最高优先级的已安装的alternatives。 |
--display name | |
| 显示名称为主链路的链路组信息。 显示的信息包括组的模式(自动或手动)、 符号链接当前指向的alternatives、 可用的其他alternatives(及其相应的从alternatives) 以及当前安装的最高优先级alternatives。 |
5、使用示例
# alternatives --install /usr/bin/java java /tools/jdk/bin/java 3
# alternatives --config java
There are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.7.0-icedtea/bin/java
2 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
3 /tools/jdk/bin/java
Enter to keep the current selection[+], or type selection number: 3
6、相关文档
选项 | 说明 |
/etc/alternatives/ | |
| 默认的alternatives目录。可以被--altdir选项覆盖。 |
/var/lib/alternatives/ | |
| 默认的管理目录。可以由--admindir选项覆盖。 |