歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下alternatives工具詳解

Linux下alternatives工具詳解

日期:2017/2/27 15:53:18   编辑:Linux教程
lternatives與update-alternatives好像是同一樣工具(各個linux發行版使用的不一樣),這裡就以update- alternatives為例進行講述。update-alternatives是linux裡很有用的工具,不僅在Debian系列,redhat系列 也同樣有它。

linux發展到今天,可用的軟件已經非常多了。這樣自然會有一些軟件的功能大致上相同。例如,同樣是編輯器,就有 nvi,vim,emacs,nano等。大多數情況下,這樣的功能相似的軟件都是同時安裝在系統裡的,可以用它們的名稱來執行。例如,要執行vim,只 要在終端下輸入vim並按回車就可以了。不過,有些情況下我們需要用一個相對固定的命令調用這些程序中的一個。例如,當我們寫一個腳本程序時,只要寫下 editor,而不希望要為“編輯器是哪個”而操心。以Debian為例,它提供了一種機制來解決這個問題,而update-alternatives就 是用來實現這種機制的。

在說明update-alternatives的詳細內容之前,先讓我們看看系統中已有的例子。打開終端,執行下面的命令:

我們看到,editor這個可執行命令實際上是個符號連接,它指向/etc/alternatives/editor;而/etc /alternatives/editor也是個符號連接,它指向/bin/nano。這樣,當我們輸入editor並回車,將執行nano。之所以要在 費心建立這樣兩個鏈接,就是要實現上面說到的特性:方便腳本程序的編寫和系統的管理。

下面我們來看看update-alternatives的功能。首先要介紹的參數是 --display 。它使我們可以看到一個命令的所有可選命令。執行代碼:

$ sudo update-alternatives -- display editor

你可以看到我的機器上所有可以用來被 editor 鏈接的命令。

下面說說 --config 。這個選項使我們可以選擇其中一個命令,代碼如下:

$ sudo  update-alternatives --config editor

上例中,我從3代表的emacs24編輯器,修改為1代表的ed。

說到這裡,我們就要介紹一些概念了。首先,update-alternatives在一般情況下是由postinst和prerm這樣的安裝腳本自 動調用的,所以一個alternative的狀態有兩種:自動和手動。每個alternative的初始狀態都是自動,如果系統發現管理員手動修改了一個 alternative,它的狀態就從自動變成了手動,這樣安裝腳本就不會更新它了。如果你希望將一個alternative變回自動,只要執行代碼:

$ sudo update-alternatives --auto editor

就可以了。我們來看一下官方的命令選項:

你注意到了嗎?上面見到了”名字“。該怎樣寫名字呢?這就是我們要介紹的第二個概念:

  • general name -- 這是指一系列功能相似的程序的“公用”名字(包括絕對路徑),比如 /usr/bin/editor。

  • link -- 這是指一個alternative在 /etc/alternative中的名字,比如 editor。

  • alternative -- 顧名思議,這是指一個可選的程序所在的路徑(包括絕對路徑),比如 /usr/bin/vim。

--auto , --display和--config 跟的都是link。我們要說的第三個概念是優先級。這個比較簡單,當然優先級越高的程序越好啦!最後一個概念是主和從的alternative。想想看, 你將/usr/bin/editor鏈接到vim,可是當你執行man editor時看到的卻是emacs的manpage,你會做何感想呢?這就引出了主和從alternative的概念:當更新主的 alternative時,從的alternative也會被更新。

說完這四個重要的概念後,我們介紹另外兩個選項,其它的自己看文檔。

第一個是 --install。它的格式是:sudo update-alternatives --install gen link alt pri [--slave sgen slink salt]...

gen,link,alt,pri分別是我們上面說過的。如果需要從alternative,你可以用 --slave加在後面。如果你在向一個已經存在的alternative組中添加新的alternatives,該命令會把這些 alternatives加入到這個已經存在的alternative組的列表中,並用新的可選命令作為新的命令;否則,將會將立一個新的自動的 alternative組。

如果我們加入一個錯誤的alternative。我不想要這個alternative了。在這種情況下,可以執行下面的命令,代碼示例:

update-alternatives --remove name path

name是一個在/etc/alternatives中的名字,也就是上面的link,而path是希望刪除的可選程序名的絕對路徑名(放心,這樣 只是從列表中刪除了這個程序,並不會真的從硬盤上刪除程序的可執行文件)。如果從一個alternative組中刪除了一個正在被鏈接的程序並且這個組仍 然沒有變成空的,update-alternative會自動用一個具有其他優先級的可選程序代替原來的程序。如果這個組變成空的了,那麼連這個 alternative組都會被移除。如果刪除的程序沒有被鏈接,則只有有關這個程序的信息會移除。

注:update-alternatives工具非常適合在多版本的java之間切換。
Copyright © Linux教程網 All Rights Reserved