linux 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解
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使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 怎么添加path环境变量,L
- 下一篇: “十大文明用语”文明语评选30句