通常來講咱們一個可執行程序,可能在多個路徑下,好比在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,默認都有這幾個路徑操作系統
好比咱們裝一個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
上述只介紹了一個可執行程序的全局安裝方式。但若是一個程序,有好幾個版本的實現。系統怎麼判斷該使用哪個版本?htm
好比咱們即安裝了java8,又安裝了java10。 這就是alternatives機制要解決的。blog
alternatives機制,可以自動選擇高版本程序做爲默認程序,或者使用管理員指定的版本做爲默認的程序。rem
一個alternatives機制,涉及以下術語get
alternatives管理的命令爲update-alternatives
當安裝的alternatives有多個版本時。操做系統默認選擇哪一個版本,有兩種模式
sudo update-alternatives --config command
手動指定一個版本爲默認版本,即使後來又裝了更新的版本,默認版本都不會變。管理手動指定版本後,該alternative即進入手動模式。若是要回滾到自動模式,使用命令
上述程序的兩個版本的實際路徑是
跟上述安裝相似,只是附加指定了主程序依賴的相關配置做爲slave link
默認狀況下,上述步驟不須要咱們手動來作。通常在安裝一個linux的安裝包時,會自動完成上述步驟。而且安裝好的alternatives都是auto模式,即自動決定程序版本
sudo update-alternatives --display commandname
列出多個版本,以交互的方式讓用戶選擇指定版本
sudo update-alternatives --config commandname
直接將默認程序設置到某個具體版本的路徑上
sudo update-alternatives --set commandname path
sudo update-alternatives --auto commandname
sudo update-alternatives --remove commandnamepath
舉例
sudo update-alternatives --remove foo /usr/local/bin/foo-2
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