centos/linux alternatives與update-alternatives詳解與軟件版本切換

    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

轉自:http://www.5ycode.com/article/59.htmljava

相關文章
相關標籤/搜索