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

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

1、 注册软件

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

?

1

2

# 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注册服务名。

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

( --install link name path priority)

其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如java path为你所要使用新命令、新软件的所在目录 priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;# 整数 根据版本号设置的优先级(更改的优先级需要大于当前的)

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

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

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

2、查看已注册列表

?

1

2

3

4

5

6

# 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开关使用时第一行信息:

?

1

java - auto/manual mode

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

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

交互式修改

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# update-alternatives --config java

There are 2 programswhich 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[+], ortype 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。

修改为自动:

?

1

2

3

4

5

6

7

8

9

10

11

12

# update-alternatives --auto java

# java -version

java version"1.8.0_111"

Java(TM) SE Runtime Environment (build1.8.0_111-b14)

Java HotSpot(TM)64-Bit Server VM (build25.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 - priority200

/opt/install/jdk1.8.0_111/bin/java - priority300

Current `best' version is /opt/install/jdk1.8.0_111/bin/java.

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

立即修改

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

?

1

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

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

?

1

2

# cd /opt/jdk1.8.0_91/bin/

# update-alternatives --set java $PWD/java

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

# 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:40awk ->/usr/bin/gawk*

lrwxrwxrwx 1 root root  29 Dec 2 12:40awk.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了吧?来看看它有哪些版本:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# update-alternatives --display awk

awk - auto mode

link best version is/usr/bin/gawk

link currently points to/usr/bin/gawk

linkawk is/usr/bin/awk

slaveawk.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

slaveawk.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

slaveawk.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找不到。

?

1

2

# javac

-bash: javac:command not found

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

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

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

?

1

2

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

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

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

?

1

# update-alternatives --remove-all java

注册javahome管理

?

1

2

3

4

5

6

7

8

9

10

11

12

# 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环境变量,指向注册的软链地址。

?

1

2

3

# echo export JAVA_HOME=/usr/local/jdk >>~/.bash_profile

# echo export PATH=$PATH:$JAVA_HOME/bin >>~/.bash_profile

# source ~/.bash_profile

管理JAVA_HOME

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

# 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 choicesfor 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 to keep the current choice[*], ortype 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 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解相关推荐

  1. linux两台服务器传输,Linux两台服务器之间高速数据传输命令:scp应用详解

    Linux两台服务器之间高速数据传输命令:scp应用详解 Linux scp命令用于Linux之间复制文件和目录到另外一台,这个命令在多台服务器之间传输还是非常有用的,速度也是非常快的.比window ...

  2. linux golang进程调试环境配置 dlv命令报错 总结详解

    1. golang服务编译避坑 现象:dlv 调试,p打印变量时无法正常打印,报错:Command failed: could not find symbol value for 变量 解决方法:一定 ...

  3. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  4. linux命令rz和sz,linux传输文件命令 rz 和 sz详解

    linux传输文件命令 rz 和 sz详解 一. 概述 rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. 优点就是不用再开一个sftp工具登录上去上传下载文件. ...

  5. linux中gz文件怎么解压,Linux解压gz文件的命令使用教程及详解

    今天小编给带来一篇linux解压方面的资料 Linux解压gz文件的命令有:gunzip命令.gzip命令.tar命令.下面本篇文章就来带大家了解一下 gz文件是一种压缩文件,以.gz或者.tar.g ...

  6. linux命令大全rz,Linux下rz命令使用的实例详解

    摘要 腾兴网为您分享:Linux下rz命令使用的实例详解,猿辅导,学习帮,我爱我家,唯品会等软件知识,以及2034盒子,endnotex6,方塘音控,供销网,论文修改神器,小乌龟,银河谷,兼职app, ...

  7. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  8. linux中group命令详解,linux groupmod命令参数及用法详解

    需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作.接下来是小编为大家收集的linux groupmod命令参数及用法详解,希望能帮到大家. linux groupmod命令参数及用 ...

  9. linux ipset 流量,linux中ipset命令的使用方法详解

    linux中ipset命令的使用方法详解 发布时间:2020-10-25 17:07:19 来源:脚本之家 阅读:97 作者:lijiaocn 栏目:服务器 ipset介绍 iptables是在lin ...

最新文章

  1. 商汤涨涨涨涨:上市4日股价累涨130%,市值一度3000亿港元
  2. Interface Builder 和UIController的联系
  3. 实现双击IE9的Tab键关闭当前页面的功能
  4. 讯飞tts语音引擎9.0_使用科大讯飞语音转文字的服务进行电话录音分析
  5. Dart中的mixins
  6. 拼团功能实现 php_PHP实现微信提现功能
  7. c++文件流基本用法(fstream, ifstream, ostream)
  8. android-pageviewer实现linearlayout的切换
  9. go 公众号 关注 监听_golang微信公众平台之消息接入
  10. 在Excel的单元格中,调用VBA函数
  11. 如何将PDF转成高清JPG图片
  12. 微信分享自定义图标大小限制_微信分享时安卓的自定义参数无效的解决办法
  13. MIUI12或android11找不到QQ文件的问题
  14. Python教程一:Python环境安装(Anaconda3版本)
  15. android 相机功能修改,Android11不再支持更改默认相机程序,再也不能用美颜相机拍照了...
  16. 数学建模系列-预测模型(四)马尔可夫预测
  17. java 抓取 flash 控件,java-从Flash抓取数据(游戏)
  18. 常见的预设分栏包括_智慧树知到青铜器类型学黑龙江联盟单元测试答案
  19. 毕设微信小程序之访问ssm后台连接数据库
  20. 欧洲在线支付sofortbanking

热门文章

  1. 在嵌入式Neo4j中使用Neo4j浏览器
  2. 第一次Java 8体验
  3. JVM PermGen –您在哪里?
  4. 与詹金斯一起连续交付Heroku
  5. 将社交登录添加到Spring MVC Web应用程序:配置
  6. 泽西岛的RESTful Web服务
  7. Spring MVC拦截器示例
  8. simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成
  9. 正则表达式之 NFA 引擎匹配原理详解
  10. Linux 关机/关闭主机/关闭系统/重启系统/注销系统的命令