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,這纔是最終的可執行文件。之因此創建這樣兩個連接,是爲了方便腳本程序的編寫和系統的管理。html