/etc/alternatives

如何安裝一個可執行程序

通常來講咱們一個可執行程序,可能在多個路徑下,好比在opt路徑下,或者在本身的home下。html

當要達到在系統的任意路徑下敲擊該命令,均可執行的話,通常要將該可執行命令的路徑加入到環境變量PATH中。java

加入PATH能夠是直接到/etc/profile.d/中定義一個sh文件,在其中將該可執行程序的路徑加入其中,好比linux

JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export JAVA_HOME

固然還能夠將可執行文件,以軟鏈接的形式,放入到通常系統會找尋的目錄中。好比通常linux系統的PATH,默認都有這幾個路徑操作系統

  • /bin 系統啓動加載階段須要使用的命令,好比cat,ls
  • /sbin 系統啓動加載階段須要使用,而且須要root權限才能執行的命令
  • /usr/bin 整個系統範圍內都能使用的命令
  • /usr/sbin 整個系統範圍內都能使用的命令,但須要管理員權限

好比咱們裝一個java,若是想在任意路徑敲擊java後,都啓動java(不考慮JAVA_HOME這個環境變量),咱們能夠在/usr/bin下建立一個軟鏈接文件java , 將其連接到咱們java的具體路徑,好比.net

/usr/bin/java -> /usr/java/jdk1.8.0_221-amd64/jre/bin/java

這樣作的好處是,其它程序須要使用java時,它直接去/usr/bin中找就好,不管java實際路徑怎麼存放,使用java的程序,不須要修改。code

當一個可執行程序有多個版本怎麼辦 , alternatives

上述只介紹了一個可執行程序的全局安裝方式。但若是一個程序,有好幾個版本的實現。系統怎麼判斷該使用哪個版本?htm

好比咱們即安裝了java8,又安裝了java10。 這就是alternatives機制要解決的。blog

alternatives機制,可以自動選擇高版本程序做爲默認程序,或者使用管理員指定的版本做爲默認的程序。rem

一個alternatives機制,涉及以下術語get

  • Generic name 不考慮版本,這個程序對應的名字,好比不考慮java的版本,咱們通常統一使用java做爲啓動命令,其generic name 爲:/usr/bin/java
  • Alternatives directory Alternatives 機制,默認使用軟鏈接的方式,去連接實際的程序版本。該路徑下展現了全部的軟鏈接
  • Link group 而通常一個可執行程序,除了本身以外,還須要依賴一些其餘的庫文件,或與之對應的配置文件。這些須要一併鏈接。因此跟這個程序相關的一組鏈接叫作link group
  • Master link 鏈接組中程序主體的連接
  • Slave link 連接中程序依賴相關的文件連接

alternatives管理的命令爲update-alternatives

版本選擇的兩種模式

當安裝的alternatives有多個版本時。操做系統默認選擇哪一個版本,有兩種模式

  • 自動模式,基於權重自動判斷,高權重爲自動啓用版本。而且新安裝的版本因爲權重高,自動成爲默認版本
  • 手動模式,系統管理員經過命令sudo update-alternatives --config command手動指定一個版本爲默認版本,即使後來又裝了更新的版本,默認版本都不會變。

管理手動指定版本後,該alternative即進入手動模式。若是要回滾到自動模式,使用命令

手動安裝一個alternatives

安裝一個alternatives

  1. 表示在/usr/local/bin/下建立的genericname。固然,用戶側程序,通常建立在/usr/bin下,而不是截圖中的/usr/local/bin中。generic name通常沒有版本
  2. 整個Link group的名稱,通常跟generic name一致
  3. 連接的執行程序實際版本的路徑
  4. 當前安裝版本對應的權重。alternatives 若是是自動模式的話,會自動選權重高的版本作爲默認程序

上述程序的兩個版本的實際路徑是

  • /usr/local/bin/foo-2
  • /usr/local/bin/foo-3

帶slave links的安裝

跟上述安裝相似,只是附加指定了主程序依賴的相關配置做爲slave link

總結

默認狀況下,上述步驟不須要咱們手動來作。通常在安裝一個linux的安裝包時,會自動完成上述步驟。而且安裝好的alternatives都是auto模式,即自動決定程序版本

alternatives的一些命令

如何查看一個程序的alterntives 總體狀況

sudo update-alternatives --display commandname

手動指定一個版本

列出多個版本,以交互的方式讓用戶選擇指定版本

sudo update-alternatives --config commandname

直接將默認程序設置到某個具體版本的路徑上

sudo update-alternatives --set commandname path

如何回退到自動模式

sudo update-alternatives  --auto commandname

從alternatives中移除指定版本

sudo update-alternatives  --remove commandnamepath

舉例

sudo update-alternatives --remove foo /usr/local/bin/foo-2

移除指定程序的全部alternatives

sudo update-alternatives  --remove-all commandname

參考連接

https://linux.die.net/man/8/alternatives
https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-update-alternative.html

本站公眾號
   歡迎關注本站公眾號,獲取更多信息