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

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

(0)

相关推荐

  • linux使用update-alternatives切换java版本

    linux使用update-alternatives切换java版本 关于update-alternatives命令的使用,请见: http://www.jb51.net/article/112372.htm 之前的文章说明了使用文件夹管理来代替原来的当个命令配置的方式,不过这个是属于个人使用的方式,并不是规范的通用的方式. 按照默认的方式,每一个软件包对应的命令都是分别设置的,这样的好处是,可以不同的命令使用不同的版本.如java使用1.9,javap使用1.8 还是以java为例,它默认配置

  • 使用Linux的alternatives命令替换选择软件的版本方法

    上周在安装搜索引擎Elasticsearch时,要求安装比较新的java 版本,我选择了java 1.8.0,安装java 成功后使用java -version 发现使用的版本仍旧是1.6.0, 查询了一些资料,发现可以使用Linux的alternatives命令替换选择软件的版本. 说明: alternatives --install <link> <name> <path> <priority> 其中, install表示安装 link是符号链接 nam

  • 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

  • linux传输文件命令 rz 和 sz详解

    一. 概述 rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. 优点就是不用再开一个sftp工具登录上去上传下载文件. Zmodem协议是针对modem的一种错误校验协议.利用Zmodem协议,可以在modem上发送512字节的数据块.如果某个数据块发生错误,接受端会发送"否认"应答,因此,数据块就会被重传.它是Xmodem 文件传输协议的一种增强形式,不仅能传输更大的数据,而且错误率更小.包含一种名为检查点重启的特性,如果通信链接在数据传输过程中中

  • Linux下tcpdump命令解析及使用详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具.tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动 tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 监视指定网络接口的数据包 tcpdum

  • Linux文本查找命令find的用法详解

    find 命令主要用于查找目录和文件,可以指定多种参数进行匹配. 用法:find  +查找路径  +命令参数   [输出形式] 查找路径:告诉find在哪查找 命令参数:指定要查找的文件属性,属性包括多种,类型.名称.大小.修改时间等等 常用的参数: -name 按文件名进行查找 -user 按照文件的属主进行查找 -mtime  按照文件的更改时间来查找,-n 表示文件修改时间距今天n天以内,+n 表示文件修改时间距今天n天以前 -type  按照文件的类型查找,d 表示目录, f表示文件 ,

  • linux中ipset命令的使用方法详解

    ipset介绍 iptables是在linux内核里配置防火墙规则的用户空间工具,它实际上是netfilter框架的一部分.可能因为iptables是netfilter框架里最常见的部分,所以这个框架通常被称为iptables,iptables是linux从2.4版本引入的防火墙解决方案. ipset是iptables的扩展,它允许你创建 匹配整个地址sets(地址集合) 的规则.而不像普通的iptables链是线性的存储和过滤,ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行

  • Linux traceroute命令使用方法实例详解

    Linux traceroute命令使用方法实例详解 一.默认使用的是UDP协议(30000以上端口) 二.使用TCP协议 -T -p 三.使用ICMP协议 -I 四.实战 [root@localhost hping-master]# whereis traceroute traceroute: /usr/bin/traceroute /usr/share/man/man8/traceroute.8.gz [root@localhost hping-master]# [root@localhos

  • linux命令行批量创建目录详解

    linux命令行批量创建目录详解 以前一直用-p创建目录链,觉得很方便了. 在空目录/opt/app/myapp里创建src,再创建main,再创建java mkdir -p /opt/app/myapp/src/main/java 没想到还可以这样玩##¥%--&*( root@vm1:~/tmp# mkdir -p src/{{main,test}/{java,resources},main/webapp} root@vm1:~/tmp# tree . └── src ├── main │

  • 在linux下升级软件包版本等方法详解

    Linux环境下,要想查看某个软件(package)是否安装. rpm包方式安装的,使用 rpm -qa | grep "软件或者包的名字". yum方式安装的, yum list installed | grep "软件或者包的名字". 升级软件包版本. 我们经常会遇到依赖其他版本包的情况(一般是更新的版本),这时候我们需要升级包. 1.卸载后安装新的包. 首先要根据文首提到的查看软件包是否安装的方式查看你是否安装了这个软件,若没有安装,找到路径后使用wget命令

  • linux 编译安装python3.6的教程详解

    1. 首先去官网  https://www.python.org/downloads/source/ 下载 Gzipped source tarball 不要下载 " XZ compressed source tarball " ,目前 python3.6 最新版压缩包名字是:Python-3.6.7.tgz. 把下载的压缩包随便放到一个地方,也可以放到桌面(便于安装过后删除安装包和解压后的安装包). 2. 命令行切换到上面压缩文件所在的目录(比如桌面),然后输入 tar -xzf P

  • Windows10安装linux子系统的两种方式(图文详解)

    Windows10支持Linux子系统了,告别繁琐的双系统.虚拟机安装,原生安装方便快捷. windows subsystem for linux简称WSL. 这里介绍2种安装方式,总有一款适合你. 图形化安装 启用开发者模式 按下 Windows 键,打开设置 设置-->更新和安全-->开发者选项-->开发人员模式 开启适用于Linux的Windows子系统按下 Windows jian键,输入控制面板 打开控制面板 打开 应用或关闭Windows功能 ,勾选 适用于Linux的Win

随机推荐