update-alternatives是linux系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,比如,我们在系统中同时安装了open jdk和sun jdk两个版本,而我们又希望系统默认使用的是sun jdk,那怎么办呢?通过update-alternatives就可以很方便的实现了。
根据update-alternatives 命令查看该命令的选项
[yxkong@localhost ~]$ update-alternatives
alternatives(备用)版本 1.3.61 - 版权 (C) 2001 红帽公司
在 GNU 公共许可条款下,本软件可被自由地重发行。
用法:alternatives --install <链接> <名称> <路径> <优先度>
[--initscript <服务>]
[--slave <链接> <名称> <路径>]*
alternatives --remove <名称> <路径>
alternatives --auto <名称>
alternatives --config <名称>
alternatives --display <名称>
alternatives --set <名称> <路径>
alternatives --list
公用选项:--verbose --test --help --usage --version
--altdir <目录> --admindir <目录>
install选项
install选项的功能就是增加一组新的系统命令链接符了,使用语法为:
update-alternatives --install link name path priority [--slave link name path]...
其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录); name为命令链接符名称,如java; path为你所要使用新命令、新软件的所在目录; priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接; --slave为从alternative。
alternative有两种模式:auto和manual,默认都为auto模式,因为大多数情况下update-alternatives命令都被postinst (configure) or prerm (install)调用的,如果将其更改成手动的话安装脚本将不会更新它了。
例如:
update-alternatives --install /usr/bin/java java /usr/local/lib/java/jdk1.7.0_67 17067
# /usr/bin/java java link所在的路径
# java 创建link的名称
# /usr/local/lib/java/jdk1.7.0_67 java链接指向的路径
# 17067 根据版本号设置的优先级(更改的优先级需要大于当前的)版本越高优先级越高
remove选项
remove选项的功能是删除一个alternative及相关从alternative,使用语法为
update-alternatives --remove name path
其中name与path与install中的一致,如果所删除的链接组中还有其他链接的话,系统将会自动从其他中选择一个priority高的链接作为默认为链接。
update-alternatives --remove java /usr/local/lib/java/jdk1.7.0_67
auto选项
auto选项用于修改命令的模式,语法如下:
update-alternatives --auto name
# 只有两个auto和manual模式,默认都为auto模式
config选项
config选项功能为在现有的命令链接选择一个作为系统默认的,使用语法为:
update-alternatives --config name
[root@localhost yxkong]# update-alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
*+ 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java
2 /usr/local/lib/java/jdk1.7.0_67/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:2
这里才是配置版本的重点,当系统中有多个版本时,可以通过该命令设置默认版本,类似于默认程序
display选项
display选项的功能就是查看一个命令链接组的所有信息,包括链接的模式(自动还是手动)、链接priority值、所有可 用的链接命令等等。使用语法:
update-alternatives --display name
其中name为命令链接名称,如java
[yxkong@localhost ~]$ update-alternatives --display java
java - 状态为手工。
链接当前指向 /usr/local/lib/java/jdk1.7.0_67/bin/java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java - 优先度 170051
....
当前“最佳”版本是 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java。
原理解析
我们来看下跟踪
[yxkong@localhost ~]$ ls -l /usr/bin/java #该链接link到了/etc/alternatives/java
lrwxrwxrwx. 1 root root 22 9月 29 12:28 /usr/bin/java -> /etc/alternatives/java
[yxkong@localhost ~]$ ls -l /etc/alternatives/java #链接到了/usr/local/lib/java/jdk1.7.0_67/bin/java
lrwxrwxrwx. 1 root root 40 9月 29 12:28 /etc/alternatives/java -> /usr/local/lib/java/jdk1.7.0_67/bin/java
java这个可执行命令实际是一个链接,指向了/etc/alternatives/java。而这个也是一个链接,指向了/usr/local/lib/java/jdk1.7.0_67/bin/java,这才是最终的可执行文件。之所以建立这样两个链接,是为了方便脚本程序的编写和系统的管理。
转载于:https://www.cnblogs.com/boyzgw/p/7187199.html