<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    herbert@natsu:~$ ls -l /usr/bin/editor
    lrwxrwxrwx 1 root root 24 2004-09-26 08:48 /usr/bin/editor -> /etc/alternatives/editor
    herbert@natsu:~$ ls -l /etc/alternatives/editor
    lrwxrwxrwx 1 root root 12 2004-10-27 16:24 /etc/alternatives/editor -> /usr/bin/vim
    herbert@natsu:~$

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

    下面我們就來看看 update-alternatives 的功能。當然,如果你覺得我說得不詳細,可以看看這個命令的 manpage:UPDATE-ALTERNATIVES(8)。

    首先要介紹的參數是 --display。它使我們可以看到一個命令的所有可選命令。執行

    natsu:/home/herbert# update-alternatives --display editor
    editor - status is auto.
     link currently points to /usr/bin/vim
    /bin/ed - priority -100
     slave editor.1.gz: /usr/share/man/man1/ed.1.gz
    /usr/bin/nvi - priority 19
     slave editor.1.gz: /usr/share/man/man1/nvi.1.gz
    /bin/nano - priority 40
     slave editor.1.gz: /usr/share/man/man1/nano.1.gz
    /usr/bin/vim - priority 120
     slave editor.1.gz: /usr/share/man/man1/vim.1.gz
    /usr/bin/emacs21 - priority 0
     slave editor.1.gz: /usr/share/man/man1/emacs.1emacs21.gz
    Current `best' version is /usr/bin/vim.
    natsu:/home/herbert#

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

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

    natsu:/home/herbert# update-alternatives --config editor

    There are 5 alternatives which provide `editor'.

      Selection Alternative
    -----------------------------------------------
          1 /bin/ed
          2 /usr/bin/nvi
          3 /bin/nano
    *+    4 /usr/bin/vim
          5 /usr/bin/emacs21

    Press enter to keep the default[*], or type selection number: 4
    Using `/usr/bin/vim' to provide `editor'.
    natsu:/home/herbert#

    我并沒有修改它,因為我還是比較喜歡 vim 的。當然,你可以選擇別的程序。

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

    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。它的格式是:

    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-alternatives 會自動用一個具有其他優先級的可選程序代替原來的程序。如果這個組變成空的了,那么連這個 alternative 組都會被移除。如果刪除的程序沒有被鏈接,則只有有關這個程序的信息會被移除。

    說個例子吧。我下載了 Eclipse,并且安裝了 gcj 和 gij。可是我發現 GNU 的 java 工具還不足以運行 Eclipse。我只好到 Sun 公司的網頁上下載了它的 java 工具 jdk。因為是自己安裝的,我將它們安裝在 /usr/local 上,以便將來重新安裝 Linux 系統時這些程序仍然可以使用。于是我要做的就是用這個 jdk 中的 java 和 javac 來代替系統原來的。執行

    natsu:/home/herbert# update-alternatives --display java
    java - status is auto.
     link currently points to /usr/local/j2sdk1.4.2_06/bin/java
    /usr/bin/gij-wrapper-3.3 - priority 33
     slave java.1.gz: /usr/share/man/man1/gij-wrapper-3.3.1.gz
    /usr/local/j2sdk1.4.2_06/bin/java - priority 100
     slave java.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/java.1
    Current `best' version is /usr/local/j2sdk1.4.2_06/bin/java.
    natsu:/home/herbert# update-alternatives --display javac
    javac - status is auto.
     link currently points to /usr/local/j2sdk1.4.2_06/bin/javac
    /usr/bin/gcj-wrapper-3.3 - priority 33
     slave javah: /usr/bin/gcjh-wrapper-3.3
     slave javac.1.gz: /usr/share/man/man1/gcj-wrapper-3.3.1.gz
     slave javah.1.gz: /usr/share/man/man1/gcjh-wrapper-3.3.1.gz
    /usr/bin/gcj-wrapper-3.4 - priority 33
     slave javah: /usr/bin/gcjh-wrapper-3.4
     slave javac.1.gz: /usr/share/man/man1/gcj-wrapper-3.4.1.gz
     slave javah.1.gz: /usr/share/man/man1/gcjh-wrapper-3.4.1.gz
    /usr/local/j2sdk1.4.2_06/bin/javac - priority 100
     slave javah: /usr/local/j2sdk1.4.2_06/bin/javah
     slave javac.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/javac.1
     slave javah.1.gz: /usr/local/j2sdk1.4.2_06/man/man1/javah.1
    Current `best' version is /usr/local/j2sdk1.4.2_06/bin/javac.
    natsu:/home/herbert#

    (你看到的是我更新以后的)就可以得到關于要更新哪些 alternatives 的信息。我是這么更新的:

    update-alternatives --install /usr/bin/javac javac /usr/local/j2sdk1.4.2_06/bin/javac 100 --slave /usr/bin/javah javah /usr/local/j2sdk1.4.2_06/bin/javah --slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/local/j2sdk1.4.2_06/man/man1/javac.1 --slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/local/j2sdk1.4.2_06/man/man1/javah.1
    update-alternatives --install /usr/bin/java java /usr/local/j2sdk1.4.2_06/bin/java 100 --slave /usr/share/man/man1/java.1.gz java.1.gz /usr/local/j2sdk1.4.2_06/man/man1/java.1
    posted on 2008-02-13 10:08 保爾任 閱讀(2576) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产偷国产偷亚洲清高动态图| 日韩激情无码免费毛片| 亚洲中文字幕无码一区二区三区| 亚洲精品无码专区| 成人在线视频免费| 美国毛片亚洲社区在线观看| 韩国免费三片在线视频| 国产偷国产偷亚洲清高APP| 国产成人高清精品免费鸭子| 污污视频免费观看网站| 亚洲国产精品碰碰| 香蕉视频在线免费看| 亚洲无人区一区二区三区| 国产自国产自愉自愉免费24区| 亚洲精品无码mv在线观看网站| 中文字幕乱码一区二区免费| 久久青青成人亚洲精品| 亚洲成人免费网址| 狠狠色香婷婷久久亚洲精品| 国产精品国产午夜免费福利看| 无码亚洲成a人在线观看| 亚洲一区二区高清| 三年片在线观看免费观看大全一| 99久久精品国产亚洲| 久久精品a一国产成人免费网站| 亚洲AV无码一区二区乱子仑| 久久久久久久亚洲精品| 久久国产乱子伦精品免费看| 亚洲中文字幕久在线| 免费精品国产自产拍观看| 久久高潮一级毛片免费| 91亚洲精品自在在线观看| 国产免费直播在线观看视频| 在线观看免费视频网站色| 亚洲国产成a人v在线观看| 亚洲一级特黄大片在线观看 | 亚洲国产精品一区二区三区久久| 国产一级婬片A视频免费观看| 亚洲高清无在码在线电影不卡| 日韩激情淫片免费看| 曰批全过程免费视频在线观看无码 |