全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

linux软件版本管理命令update-alternatives使用详解

linux软件版本管理命令update-alternatives使用详解

update-alternatives 命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命令参数略有区别,但大致是一样的。

1、 注册软件

以jdk为例,安装了jdk以后,先要在update-alternatives工具中注册;

# update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_91/bin/java 200
# update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_111/bin/java 300

其中:

第一个参数--install表示向update-alternatives注册服务名。

第二个参数是注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链;

第三个参数:服务名,以后管理时以它为关联依据。

第四个参数,被管理的命令绝对路径。

第五个参数,优先级,数字越大优先级越高。

2、查看已注册列表

# update-alternatives --display java
java - status is auto.
 link currently points to /opt/install/jdk1.8.0_111/bin/java
/opt/install/jdk1.8.0_91/bin/java - priority 200
/opt/install/jdk1.8.0_111/bin/java - priority 300
Current `best' version is /opt/install/jdk1.8.0_111/bin/java.

3、 修改命令版本

注意--display开关使用时第一行信息:

java - auto/manual mode

默认为自动版本,根据优先级,使用优先级高的。

下面手动修改为jdk1.8.0_91:

交互式修改

交互式会提示一所有可用的列表, 选择对应的索引确认。

# update-alternatives --config java

There are 2 programs which provide 'java'.

 Selection  Command
-----------------------------------------------
  1      /opt/install/jdk1.8.0_91/bin/java
*+ 2      /opt/install/jdk1.8.0_111/bin/java

Enter to keep the current selection[+], or type selection number: 1

# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

# update-alternatives --display java
java - status is manual.
 link currently points to /opt/install/jdk1.8.0_91/bin/java
/opt/install/jdk1.8.0_91/bin/java - priority 200
/opt/install/jdk1.8.0_111/bin/java - priority 300
Current `best' version is /opt/install/jdk1.8.0_111/bin/java.

看到当前状态变成了manual。

修改为自动:

# update-alternatives --auto java
# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

# update-alternatives --display java
java - status is auto.
 link currently points to /opt/install/jdk1.8.0_111/bin/java
/opt/install/jdk1.8.0_91/bin/java - priority 200
/opt/install/jdk1.8.0_111/bin/java - priority 300
Current `best' version is /opt/install/jdk1.8.0_111/bin/java.

又改为按照优先级高的了。

立即修改

除了交互式修改,也可以使用一条命令直接修改,修改后立即生效。

# update-alternatives --set java /opt/jdk1.8.0_91/bin/java

该情形适用于你对路径很熟悉,或者你已经进入了该路径:

# cd /opt/jdk1.8.0_91/bin/
# update-alternatives --set java $PWD/java

4、 update-alternatives是偏门命令吗?

可能你觉得这个命令很偏门,用处不大,但实际上在linux中早已被大量的使用。我们来挖掘一下,先看看我们注册的java做了什么:

# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan 16 01:45 /usr/bin/java -> /etc/alternatives/java*

# ls -l /etc/alternatives/
total 12
drwxr-xr-x 2 root root 4096 Jan 16 01:57 ./
drwxr-xr-x 95 root root 4096 Jan 16 01:41 ../
lrwxrwxrwx 1 root root  13 Dec 2 12:40 awk -> /usr/bin/gawk*
lrwxrwxrwx 1 root root  29 Dec 2 12:40 awk.1.gz -> /usr/share/man/man1/gawk.1.gz
lrwxrwxrwx 1 root root  38 Dec 2 12:38 builtins.7.gz -> /usr/share/man/man7/bash-builtins.7.gz
lrwxrwxrwx 1 root root  12 Jan 12 02:04 c++ -> /usr/bin/g++*
...

首先可以看到我们的/usr/bin/java是一个软链, 它连接到/etc/alternatives目录中的另一个软链。

而/etc/alternatives中有很多软链,这里只列出了一部分。看到awk了吧?来看看它有哪些版本:

# update-alternatives --display awk
awk - auto mode
 link best version is /usr/bin/gawk
 link currently points to /usr/bin/gawk
 link awk is /usr/bin/awk
 slave awk.1.gz is /usr/share/man/man1/awk.1.gz
 slave nawk is /usr/bin/nawk
 slave nawk.1.gz is /usr/share/man/man1/nawk.1.gz
/usr/bin/gawk - priority 10
 slave awk.1.gz: /usr/share/man/man1/gawk.1.gz
 slave nawk: /usr/bin/gawk
 slave nawk.1.gz: /usr/share/man/man1/gawk.1.gz
/usr/bin/mawk - priority 5
 slave awk.1.gz: /usr/share/man/man1/mawk.1.gz
 slave nawk: /usr/bin/mawk
 slave nawk.1.gz: /usr/share/man/man1/mawk.1.gz

5、管理软件包

开始我们以java为例,作为jre运行环境可以,但如果你作为开发测试环境,你会发现javac找不到。

# javac
-bash: javac: command not found

原因是我们只对java命令做了版本管理。

事实上,update-alternatives的原理是软链管理,可以处理目录。那么我们就可以把整个软件包目录都纳入管理。

首先清理掉原来配置的java命令配置。

# update-alternatives --remove java /opt/jdk1.8.0_91/bin/java
# update-alternatives --remove java /opt/jdk1.8.0_111/bin/java

ubuntu里可以直接使用下面的全部清除,centos没有:

# update-alternatives --remove-all java

注册javahome管理

# update-alternatives --install /usr/local/jdk jdk /opt/jdk1.8.0_111 300
update-alternatives: using /opt/jdk1.8.0_111 to provide /usr/local/jdk (jdk) in auto mode

# update-alternatives --install /usr/local/jdk jdk /opt/jdk1.8.0_91 200

# update-alternatives --display jdk
jdk - auto mode
 link best version is /opt/jdk1.8.0_111
 link currently points to /opt/jdk1.8.0_111
 link jdk is /usr/local/jdk
/opt/jdk1.8.0_111 - priority 300
/opt/jdk1.8.0_91 - priority 200

配置jdk环境变量,指向注册的软链地址。

# echo export JAVA_HOME=/usr/local/jdk >>~/.bash_profile
# echo export PATH=$PATH:$JAVA_HOME/bin >>~/.bash_profile
# source ~/.bash_profile

管理JAVA_HOME

# echo $JAVA_HOME
/usr/local/jdk

# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

# javac -version
javac 1.8.0_111

# update-alternatives --config jdk
There are 2 choices for the alternative jdk (providing /usr/local/jdk).

 Selection  Path        Priority  Status
------------------------------------------------------------
* 0      /opt/jdk1.8.0_111  300    auto mode
 1      /opt/jdk1.8.0_111  300    manual mode
 2      /opt/jdk1.8.0_91  200    manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /opt/jdk1.8.0_91 to provide /usr/local/jdk (jdk) in manual mode

# echo $JAVA_HOME
/usr/local/jdk

# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

# javac -version
javac 1.8.0_91


感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# linux软件版本管理命令update-alternatives  # linux  # update-alternatives  # linux下怎样用命令启动docker服务  # docker如何查看容器启动命令(已运行的容器)  # docker update 命令及用法详解  # 软件包  # 为例  # 是一个  # 如果你  # 运行环境  # 在这个  # 出了  # 第一个  # 找不到  # 中有  # 软件版本  # 适用于  # 要在  # 希望能  # 第二个  # 可以看到  # 你对  # 可以直接  # 可以使用  # 你已经 


相关文章: 深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  Python多线程使用规范_线程安全解析【教程】  如何在腾讯云免费申请建站?  建站VPS推荐:2025年高性能服务器配置指南  免费ppt制作网站,有没有值得推荐的免费PPT网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何在景安服务器上快速搭建个人网站?  建站之星如何修改网站生成路径?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站主机CVM配置优化、SEO策略与性能提升指南  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  建站之星如何助力企业快速打造五合一网站?  如何在云指建站中生成FTP站点?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何用美橙互联一键搭建多站合一网站?  制作公司内部网站有哪些,内网如何建网站?  招商网站制作流程,网站招商广告语?  如何在阿里云部署织梦网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  深圳网站制作案例,网页的相关名词有哪些?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  建站上市公司网站建设方案与SEO优化服务定制指南  北京网站制作公司哪家好一点,北京租房网站有哪些?  存储型VPS适合搭建中小型网站吗?  建站之星下载版如何获取与安装?  制作宣传网站的软件,小红书可以宣传网站吗?  如何零基础在云服务器搭建WordPress站点?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何在Golang中使用replace替换模块_指定本地或远程路径  建站主机是否等同于虚拟主机?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  南宁网站建设制作定制,南宁网站建设可以定制吗?  建站主机类型有哪些?如何正确选型  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  如何选择CMS系统实现快速建站与SEO优化?  如何用景安虚拟主机手机版绑定域名建站?  如何通过云梦建站系统实现SEO快速优化?  如何制作网站标识牌,动态网站如何制作(教程)?  清除minerd进程的简单方法  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  如何快速上传自定义模板至建站之星?  建站主机如何安装配置?新手必看操作指南  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  建站之星上传入口如何快速找到? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。