2012年9月28日 星期五

常用 YUM 命令:安裝、移除、查詢及回復

前文“Fedora 中常用的 YUM 更新命令”只將更新有關的 YUM 用法寫出,其它有些也很方便、好用的 YUM 命令,並未寫出。
    本文將筆者常用的 YUM 命令,完整說明於後,方便初學者參考、使用。

一、切換成 root 身份

以下操作除查詢用途外,多需先切換成 root 身份,請讀者注意。

二、更新套件

這是最常用的 YUM 命令,開源碼系統有全球許多的自由開發者,隨時都可能有新的套件更新被發佈。所以,更新套件是 YUM 中最常用的一個命令型式,
[root@Celeron-D ~]# yum update
[root@Celeron-D ~]# yum update 套件名
[root@Celeron-D ~]# yum update 套件名*
例子中,分別為:『全部更新』,『指定套件更新』及『指定部分套件名更新』。當有數個套件要同時安裝時,用「空白」間隔這些套件名稱。套件名加『*』符號,會檢查所有已安裝的套件中,名稱與「指定部分名稱」相符者,再進行更新。未安裝的套件,不會更新,也不會補安裝(除非因關連性而加裝)。
    有安全顧慮的套件,最好立即更新,其它套件倒是不用那麼頻繁。可是,何時更新?更新頻率如何?卻是沒有標準答案的問題。通常,我是在關機前,下一個「更新 + 關機」的複合命令,達到時常更新,卻又不影響正常使用。

三、安裝套件

Fedora 的「套件資料庫」收錄相當多的套件,但不是每個都全部需要。因此,在第一次安裝時,只有通過社群評估的套件才會預設安裝。其它套件都由系統管理者,依系統需求再加以安裝。
[root@Celeron-D ~]# yum install 套件名
當有數個套件要同時安裝時,用「空白」間隔這些套件名稱。

注意:雖然,安裝仍可在套件名加『*』符號,但是,一不小心會裝入一大堆不需要的套件;因此,並不建議『安裝套件』時在套件名後加『*』。

四、移除套件

將不需要或不再使用套件移除,可以回收硬碟空間,做更有效的運用。因為某些套件有關聯性,若移除時未注意,可以會使其它使用中的套件不能正常運作。
[root@Celeron-D ~]# yum remove 套件名
[root@Celeron-D ~]# yum remove 套件名*
注意:移除套件的名稱,最好與安裝時的套件名稱相同。否則,會不能完整移除所安裝的套件。

 五、查詢套件(已知套件名)

在網路上找到一些程式,有時也提供 Linux 的安裝套件名。但是,若直接下載、安裝,有時不能正常執行,這是因為有些設定檔,未依 Linux 系統的不同而調整。建議用 YUM 查詢一下,是否 Fedora 的「套件資料庫」有收錄。若有的話,從已收錄的「套件資料庫」安裝,比較不會在將來使用時出問題。
[root@Celeron-D ~]# yum list 套件名
[root@Celeron-D ~]# yum list | grep 部分套件名
以上兩個命令都可以查詢套件是否已收錄。

六、查詢套件名(已知程式、模組名)

想安裝某個程式或模組,可是下了安裝指令卻出現這個訊息,例:欲安裝 vncserver
[root@Celeron-D ~]# yum install vncserver
Loaded plugins: langpacks, presto, refresh-packagekit
No package vncserver available.
Error: Nothing to do
這有可能是因為「套件名稱」與「程式名稱」不同所致,要先查出這個「程式」包裝在哪個「套件」中。使用正確的「套件名稱」安裝,才可正常執行。
[root@Celeron-D ~]# yum provides vncserver
tigervnc-server-1.1.0-5.fc17.x86_64 : A TigerVNC server
Repo : fedora
Matched from:
Filename : /usr/bin/vncserver

tigervnc-server-1.1.0-6.1.fc17.x86_64 : A TigerVNC server
Repo : updates
Matched from:
Filename : /usr/bin/vncserver

tigervnc-server-1.1.0-6.1.fc17.x86_64 : A TigerVNC server
Repo : @updates
Matched from:
Filename : /bin/vncserver

tigervnc-server-1.1.0-6.1.fc17.x86_64 : A TigerVNC server
Repo : @updates
Matched from:
Filename : /usr/bin/vncserver
由以上結果可以發現,正確的「套件名稱」為 tigervnc-server。所以,正確的安裝命令應為
[root@Celeron-D ~]# yum install tigervnc-server
註:「套件名稱」後的數字是套件的版本資料,除非要安裝特定版本,否則不用指定;YUM 會自動安裝最新的版本。

七、忽略某些「套件資料庫」

有些「套件資料庫」不想在當次的 YUM 操作中使用時,可以加參數,將這些「套件資料庫」忽略不檢查。
[root@Celeron-D ~]# yum install 套件名 --disablerepo=updates
[root@Celeron-D ~]# yum update  套件名 --disablerepo=rpmfusion*
通常使用情況為,欲安裝原始版本,故忽略更新版的「套件資料庫」;或只想更新部份套件,加快更新速度,例:暫時忽略 RPM Fusion 的更新(註:有時會很久)。

八、回復之前異常中斷之更新

若下了更新命令後,出現有未完成的更新訊息,
[root@Celeron-D ~]# yum update
 . . . . . .
There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
 . . . . . .
[root@Celeron-D ~]#
這是因為在之前的更新命令未正確執行完畢,忽略不處理的話,什麼時候會出問題,誰也說不準。幸好,YUM 有個修復這個錯誤的命令,
[root@Celeron-D ~]# yum-complete-transaction
Loaded plugins: . . . . . .
There are 2 outstanding transactions to completes. Finishing the most recent one
The remaining transaction had . . . . . .
 . . . . . .
[root@Celeron-D ~]# yum-complete-transaction
 . . . . . .
[root@Celeron-D ~]# yum-complete-transaction
Loaded plugins: . . . . . .
No unfinished transactions left.
[root@Celeron-D ~]#
上例中有兩個未完成的更新,這個命令會從最近一次未完成開始修復。重覆下這個命令,直到任何未完成的更新為止。修復命令的執行時間多像更新一樣久,若不想更新,只想清除這個訊息,則用這個命令
[root@Celeron-D ~]# yum-complete-transaction --cleanup-only

九、特殊參數整理

有些參數是搭配其它操作一起使用,下表將這些參數與本文所提參數列出,方便參考。
參    數常用時機作        用
--disablerepo=套件庫名install
update
令 YUM 不檢查指定「套件資料庫」的更新資訊,有時某些「套件資料庫」無法連上,更新過程會一再嘗試,欲節省時間可暫忽略此資料庫。
--nogpgcheckinstall某些非由 Fedora 維護的套件資料庫,未檢查通過無法安裝,閉其檢查。請小心使用,確認這些套件是由官方網站下載,如:adobe flash plugin 等。
--showduplicatelist查詢套件時,預設顯示『已安裝』及『最新版』,在某些查詢時,需要加這個參數已強制顯示所有『同名套件』。
--skip-brokeninstall
update
某些套件下載一直失敗,而關聯套件無法安裝,導致整個安裝、更新停止。強制忽略這些套件的作業,使其它安裝、更新正常執行。
-x 套件名update某個套件不處理,通常是在不更新某套件使用
-yinstall
update
對 YUM 的詢問皆以 yes 回答。通常 YUM 在『檢查簽章』或『列出更新項目』時會詢問,若不回應 YUM 會停在該處。當安裝、更新的來源未確認安全時慎用

後記

  • 2013-02-02:加入 --showduplicate 說明

已測試版本:

  • Fedora: 14, 17

5 則留言:

  1. 你們的鼓勵,是我繼續寫下去的動力。

    回覆刪除
  2. 所以yum install @mate-desktop, 其上的@應該是套件名的一部份囉?

    若要查詢所有的套件. 是不是list後面空白即可?

    回覆刪除
    回覆
    1. 對!
      但是會顯示很多套件,所以通常會再加上 grep,過濾出想看的套件。

      刪除

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)