使用指令行工具管理軟體

目錄

5.1. 使用 Zypper
5.2. RPM — 套件管理員

摘要

本章介紹了兩個用於管理軟體的指令行工具︰Zypper 與 RPM。

使用 Zypper

Zypper 是用於安裝、更新和移除套件以及管理儲存庫的指令行套件管理員。Zypper 的語法與 rug 的語法類似。不同的是,Zypper 不需要視情境執行 zmd 精靈。如需有關 rug 相容性的詳細資訊,請參閱 man zypper 中的「與 RUG 的相容性」部分。這部分內容對於執行遠端軟體管理任務或透過外圍程序程序檔管理軟體非常有用。

如需透過指令行管理軟體的詳細資訊,請輸入 zypper helpzypper help 指令,或參閱 zypper(8) 的 man 頁面。

一般使用情形

Zypper 的一般語法為︰

zypper [global-options] command [command-options] [arguments] ...

括號中的部分為非必需。執行 Zypper 最簡單的方法就是輸入其名稱,後面跟著指令。例如,若要將所有需要的修補程式套用至系統類型︰

zypper patch

此外,您還可以在指令之前輸入全域選項來從一或多個全域選項中進行選擇。例如,--non-interactive 表示直接執行指令,不詢問任何問題 (自動套用預設回答)︰

zypper --non-interactive patch

若要使用特定於特殊指令的選項,請在指令之後輸入這些選項。例如,--auto-agree-with-licenses 表示將所有需要的修補程式套用至系統,而不要求確認任何授權 (系統會自動接受所有授權)。

zypper patch --auto-agree-with-licenses

某些指令需要一或多個引數︰例如,使用安裝指令時,您需要指定要安裝的套件︰

zypper install mplayer

某些選項也需要引數。以下指令會列出所有已知模式︰

zypper search -t pattern

您可以將上述所有指令組合使用。例如,以下指令將單獨使用 factory 儲存庫安裝 mplayeramarok 套件,並詳加說明︰

zypper -v install --repo factory mplayer amarok

大部分 Zypper 指令都有一個 dry-run 選項,對指定的指令進行模擬。它可以用於測試。

zypper remove --dry-run MozillaFirefox

使用 Zypper 安裝和移除軟體

若要安裝或移除套件,請使用以下指令:

zypper install package
zypper remove package

Zypper 可以使用多種方式來指定安裝和移除指令中所使用的套件︰

用確切的套件名稱
zypper in MozillaFirefox
用儲存庫別名和套件名稱
zypper in mozilla:MozillaFirefox

mozilla 是要安裝套件所在之儲存庫的別名。

用含萬用字元的套件名稱

以下指令將安裝名稱以 Moz 開頭的所有套件。使用萬用字元時請務必小心,特別是在移除套件時。

zypper in Moz*
用功能

例如,您要安裝 Perl 模組,但不知道套件的名稱,用功能指定便會幫上 忙︰

zypper in 'perl(Time::ParseDate)'
用功能和/結構和/或版本

除功能外,還可以同時指定結構 (如 i586x86_64) 和/或版本。版本的前面必須使用運算子︰< (小於)、<= (小於等於)、= (等於)、>= (大於等於)、> (大於)。

zypper in 'firefox.x86_64'
zypper in 'firefox>=3.5.3'
zypper in 'firefox.x86_64>=3.5.3'
用路徑

您也可以指定套件的本地或遠端路徑︰

zypper in /tmp/install/MozillaFirefox.rpm
zypper in http://download.opensuse.org/repositories/mozilla/SUSE_Factory/x86_64/MozillaFirefox-3.5.3-1.3.x86_64.rpm

若要同時安裝並移除套件,請使用 +/- 輔助按鍵。若要安裝 emacs 並移除 vim,請使用︰

zypper install emacs -vim

若要移除 emacs 並安裝 vim,請使用︰

zypper remove emacs +vim

為了防止將名稱以 - 開頭的套件解譯為指令選項,請一律將此類名稱用做第二個引數。如果行不通,則在前面加上 --

zypper install -emacs +vim       # Wrong
zypper install vim -emacs        # Correct
zypper install -- -emacs +vim    # same as above
zypper remove emacs +vim         # same as above

依預設,Zypper 會在安裝或移除所選套件前或出現問題時要求您確認。使用 --non-interactive 選項可覆寫此行為。此選項必須位於實際指令 (安裝、移除與修補) 之前,如下所示︰

zypper --non-interactive install package_name

此選項允許在程序檔與 cron 工作中使用 Zypper。

[Warning]不要移除必要的系統套件

不要移除 glibczypperkernel 或類似套件。這些套件都是系統的必要套件,若是移除,可能會導致系統不穩定甚至停止工作。

安裝來源套件

若要安裝某套件對應的來源套件,請使用︰

zypper source-install package_name
   

使用此指令還會安裝指定套件的建構相依套件。如果不想如此,請新增參數 -D。若想單獨安裝建構相依套件,請使用 -d

zypper source-install -d package_name # source package only
    zypper source-install -D package_name # build dependencies only

當然,您必須在儲存庫清單中啟用含來源套件的儲存庫 (預設會新增,但不會啟用),此指令才有效。如需有關儲存庫管理的詳細資料,請參閱第 5.1.4 節「使用 Zypper 管理儲存庫」

儲存庫中所有可用來源套件的清單可透過以下指令獲得︰

zypper search -t srcpackage

公用程式

若要驗證是否仍滿足所有相依條件並執行未滿足的相依條件,請使用︰

zypper verify

除了必須滿足的相依條件之外,一些套件還會「推薦」其他套件。這些被推薦方套件只有在可用時才能進行安裝。如果在安裝推薦方套件之後 (透過新增其他套件),被推薦方套件方才可用,請使用以下指令︰

zypper install-new-recommends

使用 Zypper 更新軟體

Zypper 有三種方法更新軟體︰安裝修補程式、安裝新版本的套件或更新整個套裝作業系統。最後一種方法透過 zypper dist-upgrade 指令來實現,可參閱第 4.1.4 節「Distribution Upgrade with zypper」 (第 4 章「Updating SUSE Linux Enterprise」, ↑部署指南)。

安裝修補程式

若要安裝所有正式發佈的適用於您系統的修補程式,只需執行︰

zypper patch

在此情況下,系統會檢查儲存庫中所有可用修補程式的關聯性,並視需要進行安裝。為 SUSE Linux Enterprise Desktop 安裝進行註冊後,包含此類修補程式的正式更新儲存庫將新增至您的系統。需要套用這些修補程式時,只需輸入上述指令即可。

Zypper 有三種指令可以查詢修補程式的可用性︰

zypper patch-check

列出所需修補程式 (已套用至系統但尚未安裝的修補程式) 的數量。

~ # zypper patch-check
Loading repository data...
Reading installed packages...
5 patches needed (1 security patch)
zypper list-patches

列出所需的所有修補程式 (已套用至系統但尚未安裝的修補程式)。


~ # zypper list-updates
Loading repository data...
Reading installed packages...
S | Repository | Name                          | Current | Available  | Arch
--+------------+-------------------------------+---------+------------+-------
v | Updates    | update-test-interactive       | 0-2.35  | 0-9999.1.2 | noarch
v | Updates    | update-test-optional          | 0-2.35  | 0-9999.1.2 | noarch
v | Updates    | update-test-reboot-needed     | 0-2.35  | 0-9999.1.2 | noarch
v | Updates    | update-test-relogin-suggested | 0-2.35  | 0-9999.1.2 | noarch
v | Updates    | update-test-security          | 0-2.35  | 0-9999.1.2 | noarch
zypper patches

列出為 SUSE Linux Enterprise Desktop 提供的所有修補程式,不論是否已安裝或適用於您的安裝。

還會列出與特定問題相關的修補程式並加以安裝。若要列出特定的修補程式,請使用 zypper list-patches 指令及以下選項︰

-b

列出 Bugzilla 問題所需的所有修補程式。

--bugzilla[=數字]

列出指定數字對應的 Bugzilla 問題所需的修補程式。

若要安裝可解決特定問題的修補程式,請使用指令︰

zypper patch --bugzilla=number
  

安裝更新

如果儲存庫中只含有新套件,但未提供修補程式,則 zypper patch 不起任何作用。若要使用可用的較新版本更新所有安裝的套件,請使用︰

zypper update

若要更新個別套件,請在更新或安裝指令中指定套件︰

zypper update package
zypper install package

所有可用新套件的清單可透過以下指令獲得︰

zypper list-updates
[Note]zypper updatezypper dist-upgrade 的不同之處

選擇 zypper update 會將套件更新至您的產品所適用的較新版本,並保持系統的完整性。zypper update 遵從以下規則︰

不變更廠商
不變更結構
不降級
保留安裝的套件

若要將安裝升級至新版本的產品,請使用 zypper dist-upgrade 搭配所需的儲存庫 (如需詳細資料,請參閱第 5.1.4 節「使用 Zypper 管理儲存庫」)。此指令可確保所有套件都從目前啟用的儲存庫安裝。此規則會強制執行,因此套件可能會變更廠商或結構,甚至降級。不滿足相依條件的所有套件在升級後都會被解除安裝。

使用 Zypper 管理儲存庫

Zypper 的所有安裝或修補指令均依賴於一系列已知的儲存庫。若要列出系統可識別的所有儲存庫,請使用指令︰

zypper repos

結果類似於以下輸出︰



# | Alias                             | Name                              | Enabled | Refresh
--+-----------------------------------+-----------------------------------+---------+--------
1 | SUSE-Linux-Enterprise-Server 11-0 | SUSE-Linux-Enterprise-Server 11-0 | Yes     | No
2 | SLES-11-Updates                   | SLES 11 Online Updates            | Yes     | Yes
3 | broadcomdrv                       | Broadcom Drivers                  | Yes     | No      

在各種指令中指定儲存庫時,可以使用 zypper repos 指令輸出的別名、URI 或儲存庫編號。請注意,修改儲存庫清單後,其編號可能會發生變更,但別名永遠不會自行變更。

依預設,不會顯示 URI 或儲存庫優先程度等詳細資料。若要列出所有詳細資料,可以使用以下指令︰

新增儲存庫

若要新增儲存庫,請執行

zypper addrepo URI Alias

URI 可以是網際網路儲存庫、網路資源、目錄,也可以是 CD 或 DVD (如需詳細資料,請造訪 http://en.opensuse.org/Libzypp/URI)。別名是儲存庫的縮寫與唯一識別碼。您可以隨意選擇,前提是它必須是唯一的。如果指定了已使用的別名,Zypper 會發出警告。為了讓儲存庫更易於使用,請使用簡短並且容易記住的別名。

移除儲存庫

若要從清單中移除儲存庫,請使用 zypper removerepo 指令,加上要刪除的儲存庫別名或編號。若要移除範例中的第三個項目,請使用以下指令︰

zypper removerepo 3

修改儲存庫

zypper modifyrepo 可以啟用或停用儲存庫。您也可以使用此指令變更儲存庫的內容 (如重新整理行為、名稱或優先程度)。以下指令會啟用名為「updates」的儲存庫,開啟自動重新整理功能,並將優先程度設為 20︰

zypper mr -er -p 20 'updates'

修改儲存庫不只是局限於一個儲存庫,您也可以對群組執行該操作︰

-a︰所有儲存庫
-l︰本地儲存庫
-t︰遠端儲存庫
-m 類型︰某種類型的儲存庫 (類型可以是以下一種︰http、https、ftp、cd、dvd、dir、file、cifs、smb、nfs、hd、iso)

若要重新命名儲存庫別名,請使用 renamerepo 指令。以下範例會將別名「Mozilla Firefox」變更為「firefox」︰

zypper renamerepo 'Mozilla Firefox' firefox

使用 Zypper 查詢儲存庫和套件

Zypper 提供多種方法來查詢儲存庫或套件。若要獲得所有可用產品、模式、套件或修補程式的清單,請使用以下指令︰

zypper products
zypper patterns
zypper packages
zypper patches

若要在所有儲存庫中查詢某些套件,請使用 search。它可以對套件名稱、功能或 (視情況) 套件摘要及描述進行搜尋。搜尋詞彙中允許使用萬用字元 * 和 ?。依預設,搜尋不區分大小寫。

zypper se firefox       # simple search for "firefox"
zypper se *fire*        # using wildcards
zypper se -d fire       # also search in package descriptions and summaries
zypper se -u firefix    # only display packages not already installed

若要搜尋提供特殊功能的套件,請使用指令 what-provides。例如,如果您想瞭解哪個套件提供 Perl 模組 SVN::Core,可以使用以下指令︰

zypper what-provides 'perl(SVN::Core)'

若要查詢單個套件,請在 info 指令中使用準確的套件名稱做為引數。它會顯示套件的詳細資訊。此外,使用 --requires--recommends 還會顯示套件所需或是推薦的項目︰

zypper info --requires MozillaFirefox

what-provides 套件類似於 rpm -q --whatprovides 套件,但是 rpm 只能查詢 RPM 資料庫 (即所有已安裝套件的資料庫)。另外,Zypper 會告知您任何儲存庫功能的提供者,而不是只有已安裝的儲存庫。