Linux中國

12 條實用的 zypper 命令範例

Suse Linux 使用 zypper 進行包管理,其是一個由 ZYpp 包管理引擎提供的包管理系統。在此篇文章中我們將分享 12 條附帶輸出示例的實用 zypper 命令,能幫助你處理日常的系統管理任務。

不帶參數的 zypper 命令將列出所有可用的選項,這比參考詳細的 man 手冊要容易上手得多。

root@kerneltalks # zypper
  用法:
        zypper [--global-options] <command> [--command-options] [arguments]
        zypper <subcommand> [--command-options] [arguments]

  全局選項:
        --help, -h              幫助
        --version, -V           輸出版本號
        --promptids             輸出 zypper 用戶提示符列表
        --config, -c <file>     使用指定的配置文件來替代默認的
        --userdata <string>     在歷史和插件中使用的用戶自定義事務 id
        --quiet, -q             忽略正常輸出,只列印錯誤信息
        --verbose, -v           增加冗長程度
        --color
        --no-color              是否啟用彩色模式,如果 tty 支持的話
        --no-abbrev, -A         表格中的文字不使用縮寫
        --table-style, -s       表格樣式(整型)
        --non-interactive, -n   不詢問任何選項,自動使用默認答案
        --non-interactive-include-reboot-patches
                                針對帶有重啟標誌的補丁,不使用交互模式
        --xmlout, -x            切換至 XML 輸出
        --ignore-unknown, -i    忽略未知的包

        --reposd-dir, -D <dir>  使用自定義倉庫文件目錄
        --cache-dir, -C <dir>   為所有緩存啟用可選路徑
        --raw-cache-dir <dir>   啟用可選 raw 元數據緩存路徑
        --solv-cache-dir <dir>  啟用可選 solv 文件緩存路徑
        --pkg-cache-dir <dir>   啟用可選包緩存路徑

     倉庫選項:
        --no-gpg-checks         忽略 GPG 檢查失敗並跳過
        --gpg-auto-import-keys  自動信任並導入新倉庫的簽名密鑰
        --plus-repo, -p <URI>   使用附加倉庫
        --plus-content <tag>    另外使用禁用的倉庫來提供特定的關鍵詞
                                嘗試使用 &apos;--plus-content debug&apos; 選項來啟用倉庫
        --disable-repositories  不從倉庫中讀取元數據
        --no-refresh            不刷新倉庫
        --no-cd                 忽略 CD/DVD 中的倉庫
        --no-remote             忽略遠程倉庫
        --releasever            設置所有 .repo 文件中的 $releasever 變數(默認值:發行版版本)

     Target Options:
        --root, -R <dir>        在另一個根路徑下進行操作
        --disable-system-resolvables
                                不讀取已安裝包

  命令:
        help, ?                 列印幫助
        shell, sh               允許多命令

     倉庫管理:
        repos, lr               列出所有自定義倉庫
        addrepo, ar             添加一個新倉庫
        removerepo, rr          移除指定倉庫
        renamerepo, nr          重命名指定倉庫
        modifyrepo, mr          修改指定倉庫
        refresh, ref            刷新所有倉庫
        clean                   清除本地緩存

     服務管理:
        services, ls            列出所有自定義服務
        addservice, as          添加一個新服務
        modifyservice, ms       修改指定服務
        removeservice, rs       移除指定服務
        refresh-services, refs  刷新所有服務

     軟體管理:
        install, in             安裝包
        remove, rm              移除包
        verify, ve              確認包依賴的完整性
        source-install, si      安裝源碼包及其構建依賴
        install-new-recommends, inr
                                安裝由已安裝包建議一併安裝的新包

     更新管理:
        update, up              更新已安裝包至更新版本
        list-updates, lu        列出可用更新
        patch                   安裝必要的補丁
        list-patches, lp        列出必要的補丁
        dist-upgrade, dup       進行發行版更新
        patch-check, pchk       檢查補丁

     查詢:
        search, se              查找符合匹配模式的包
        info, if                展示特定包的完全信息
        patch-info              展示特定補丁的完全信息
        pattern-info            展示特定模式的完全信息
        product-info            展示特定產品的完全信息
        patches, pch            列出所有可用的補丁
        packages, pa            列出所有可用的包
        patterns, pt            列出所有可用的模式
        products, pd            列出所有可用的產品
        what-provides, wp       列出提供特定功能的包

     包鎖定:
        addlock, al             添加一個包鎖定
        removelock, rl          移除一個包鎖定
        locks, ll               列出當前的包鎖定
        cleanlocks, cl          移除無用的鎖定

     其他命令:
        versioncmp, vcmp        比較兩個版本字元串
        targetos, tos           列印目標操作系統 ID 字元串
        licenses                列印已安裝包的證書和 EULAs 報告
        download                使用命令行下載指定 rpm 包到本地目錄
        source-download         下載所有已安裝包的源碼 rpm 包到本地目錄

     子命令:
        subcommand              列出可用子命令

輸入 &apos;zypper help <command>&apos; 來獲得特定命令的幫助。

如何使用 zypper 安裝包

zypper 通過 ininstall 子命令來在你的系統上安裝包。它的用法與 yum 軟體包安裝 相同。你只需要提供包名作為參數,包管理器(此處是 zypper)就會處理所有的依賴並與你指定的包一併安裝。

# zypper install telnet
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
  telnet

1 new package to install.
Overall download size: 51.8 KiB. Already cached: 0 B. After the operation, additional 113.3 KiB will be used.
Continue? [y/n/...? shows all options] (y): y
Retrieving package telnet-1.2-165.63.x86_64                                                                                        (1/1),  51.8 KiB (113.3 KiB unpacked)
Retrieving: telnet-1.2-165.63.x86_64.rpm .........................................................................................................................[done]
Checking for file conflicts: .....................................................................................................................................[done]
(1/1) Installing: telnet-1.2-165.63.x86_64 .......................................................................................................................[done]

以上是我們安裝 telnet 包時的輸出,供你參考。

推薦閱讀:在 YUM 和 APT 系統中安裝包

如何使用 zypper 移除包

要在 Suse Linux 中擦除或移除包,使用 zypper 附帶 removerm 子命令。

root@kerneltalks # zypper rm telnet
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is going to be REMOVED:
  telnet

1 package to remove.
After the operation, 113.3 KiB will be freed.
Continue? [y/n/...? shows all options] (y): y
(1/1) Removing telnet-1.2-165.63.x86_64 ..........................................................................................................................[done]

我們在此處移除了先前安裝的 telnet 包。

使用 zypper 檢查依賴或者認證已安裝包的完整性

有時可以通過強制忽略依賴關係來安裝軟體包。zypper 使你能夠掃描所有已安裝的軟體包並檢查其依賴性。如果缺少任何依賴項,它將提供你安裝或重新安裝它的機會,從而保持已安裝軟體包的完整性。

使用附帶 verifyve 子命令的 zypper 命令來檢查已安裝包的完整性。

root@kerneltalks # zypper ve
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...

Dependencies of all installed packages are satisfied.

在上面的輸出中,你能夠看到最後一行說明已安裝包的所有依賴都已安裝完全,並且無需更多操作。

如何在 Suse Linux 中使用 zypper 下載包

zypper 提供了一種方法使得你能夠將包下載到本地目錄而不去安裝它。你可以在其他具有同樣配置的系統上使用這個已下載的軟體包。包會被下載至 /var/cache/zypp/packages/<repo>/<arch>/ 目錄。

root@kerneltalks # zypper download telnet
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...
Retrieving package telnet-1.2-165.63.x86_64                                                                                        (1/1),  51.8 KiB (113.3 KiB unpacked)
(1/1) /var/cache/zypp/packages/SMT-http_smt-ec2_susecloud_net:SLES12-SP3-Pool/x86_64/telnet-1.2-165.63.x86_64.rpm ................................................[done]

download: Done.

# ls -lrt /var/cache/zypp/packages/SMT-http_smt-ec2_susecloud_net:SLES12-SP3-Pool/x86_64/
total 52
-rw-r--r-- 1 root root 53025 Feb 21 03:17 telnet-1.2-165.63.x86_64.rpm

你能看到我們使用 zypper 將 telnet 包下載到了本地。

推薦閱讀:在 YUM 和 APT 系統中只下載包而不安裝

如何使用 zypper 列出可用包更新

zypper 允許你瀏覽已安裝包的所有可用更新,以便你可以提前計劃更新活動。使用 list-updateslu 子命令來顯示已安裝包的所有可用更新。

root@kerneltalks # zypper lu
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...
S | Repository                        | Name                       | Current Version               | Available Version                  | Arch
--|-----------------------------------|----------------------------|-------------------------------|------------------------------------|----v | SLES12-SP3-Updates                | at-spi2-core               | 2.20.2-12.3                   | 2.20.2-14.3.1                      | x86_64
v | SLES12-SP3-Updates                | bash                       | 4.3-82.1                      | 4.3-83.5.2                         | x86_64
v | SLES12-SP3-Updates                | ca-certificates-mozilla    | 2.7-11.1                      | 2.22-12.3.1                        | noarch
v | SLE-Module-Containers12-Updates   | containerd                 | 0.2.5+gitr639_422e31c-20.2    | 0.2.9+gitr706_06b9cb351610-16.8.1  | x86_64
v | SLES12-SP3-Updates                | crash                      | 7.1.8-4.3.1                   | 7.1.8-4.6.2                        | x86_64
v | SLES12-SP3-Updates                | rsync                      | 3.1.0-12.1                    | 3.1.0-13.10.1                      | x86_64

輸出特意被格式化以便於閱讀。每一列分別代表包所屬倉庫名稱、包名、已安裝版本、可用的更新版本和架構。

在 Suse Linux 中列出和安裝補丁

使用 list-patcheslp 子命令來顯示你的 Suse Linux 系統需要被應用的所有可用補丁。

root@kerneltalks # zypper lp
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...

Repository                        | Name                                     | Category    | Severity  | Interactive | Status | Summary                                 
----------------------------------|------------------------------------------|-------------|-----------|-------------|--------|---------------------------------------------------------------------------------SLE-Module-Containers12-Updates   | SUSE-SLE-Module-Containers-12-2018-273   | security    | important | ---         | needed | Version update for docker, docker-runc, containerd, golang-github-docker-libnetwork
SLE-Module-Containers12-Updates   | SUSE-SLE-Module-Containers-12-2018-62    | recommended | low       | ---         | needed | Recommended update for sle2docker       
SLE-Module-Public-Cloud12-Updates | SUSE-SLE-Module-Public-Cloud-12-2018-268 | recommended | low       | ---         | needed | Recommended update for python-ecdsa     
SLES12-SP3-Updates                | SUSE-SLE-SERVER-12-SP3-2018-116          | security    | moderate  | ---         | needed | Security update for rsync               
---- output clipped -SLES12-SP3-Updates                | SUSE-SLE-SERVER-12-SP3-2018-89           | security    | moderate  | ---         | needed | Security update for perl-XML-LibXML     
SLES12-SP3-Updates                | SUSE-SLE-SERVER-12-SP3-2018-90           | recommended | low       | ---         | needed | Recommended update for lvm2             

Found 37 applicable patches:
37 patches needed (18 security patches)

使用相應的表頭可以很好地組織輸出。你可以輕鬆地找出並根據情況計劃你的補丁更新。我們能看到在我們的系統中,37 個可用補丁中有 18 個是安全補丁,需要被高優先順序應用!

你可以通過發出 zypper patch 命令安裝所有需要的補丁。

如何使用 zypper 更新包

要使用 zypper 更新包,使用 updateup 子命令後接包名。在上述列出的更新命令中,我們知道在我們的伺服器上 rsync 包更新可用。讓我們現在來更新它吧!

root@kerneltalks # zypper update rsync
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is going to be upgraded:
  rsync

1 package to upgrade.
Overall download size: 325.2 KiB. Already cached: 0 B. After the operation, additional 64.0 B will be used.
Continue? [y/n/...? shows all options] (y): y
Retrieving package rsync-3.1.0-13.10.1.x86_64                                                                                      (1/1), 325.2 KiB (625.5 KiB unpacked)
Retrieving: rsync-3.1.0-13.10.1.x86_64.rpm .......................................................................................................................[done]
Checking for file conflicts: .....................................................................................................................................[done]
(1/1) Installing: rsync-3.1.0-13.10.1.x86_64 .....................................................................................................................[done]

在 Suse Linux 上使用 zypper 查找包

如果你不確定包的全名也不要擔心。你可以使用 zypper 附帶的 sesearch 子命令並提供查找字元串來查找包。

root@kerneltalks # zypper se lvm
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...

S  | Name          | Summary                      | Type
---|---------------|------------------------------|--------   | libLLVM       | Libraries for LLVM           | package
   | libLLVM-32bit | Libraries for LLVM           | package
   | llvm          | Low Level Virtual Machine    | package
   | llvm-devel    | Header Files for LLVM        | package
   | lvm2          | Logical Volume Manager Tools | srcpackage
i+ | lvm2          | Logical Volume Manager Tools | package
   | lvm2-devel    | Development files for LVM2   | package 

在上述示例中我們查找了 lvm 字元串並得到了如上輸出列表。你能在 zypper install/remove/update 命令中使用 Name 欄位的名字。

使用 zypper 檢查已安裝包信息

你能夠使用 zypper 檢查已安裝包的詳細信息。infoif 子命令將列出已安裝包的信息。它也可以顯示未安裝包的詳細信息,在該情況下,Installed 參數將返回 No 值。

root@kerneltalks # zypper info rsync
Refreshing service &apos;SMT-http_smt-ec2_susecloud_net&apos;.
Refreshing service &apos;cloud_update&apos;.
Loading repository data...
Reading installed packages...

Information for package rsync:
---------------------------Repository     : SLES12-SP3-Updates
Name           : rsync
Version        : 3.1.0-13.10.1
Arch           : x86_64
Vendor         : SUSE LLC <https://www.suse.com/>
Support Level  : Level 3
Installed Size : 625.5 KiB
Installed      : Yes
Status         : up-to-date
Source package : rsync-3.1.0-13.10.1.src
Summary        : Versatile tool for fast incremental file transfer
Description    :
    Rsync is a fast and extraordinarily versatile file  copying  tool. It can copy
    locally, to/from another host over any remote shell, or to/from a remote rsync
    daemon. It offers a large number of options that control every aspect of its
    behavior and permit very flexible specification of the set of files to be
    copied. It is famous for its delta-transfer algorithm, which reduces the amount
    of data sent over the network by sending only the differences between the
    source files and the existing files in the destination. Rsync is widely used
    for backups and mirroring and as an improved copy command for everyday use.

使用 zypper 列出倉庫

使用 zypper 命令附帶 lrrepos 子命令列出倉庫。

root@kerneltalks # zypper lr
Refreshing service &apos;cloud_update&apos;.
Repository priorities are without effect. All enabled repositories share the same priority.

#  | Alias                                                                                | Name                                                  | Enabled | GPG Check | Refresh
---|--------------------------------------------------------------------------------------|-------------------------------------------------------|---------|-----------|----- 1 | SMT-http_smt-ec2_susecloud_net:SLE-Module-Adv-Systems-Management12-Debuginfo-Pool    | SLE-Module-Adv-Systems-Management12-Debuginfo-Pool    | No      | ----      | - 2 | SMT-http_smt-ec2_susecloud_net:SLE-Module-Adv-Systems-Management12-Debuginfo-Updates | SLE-Module-Adv-Systems-Management12-Debuginfo-Updates | No      | ----      | - 3 | SMT-http_smt-ec2_susecloud_net:SLE-Module-Adv-Systems-Management12-Pool              | SLE-Module-Adv-Systems-Management12-Pool              | Yes     | (r ) Yes  | No
 4 | SMT-http_smt-ec2_susecloud_net:SLE-Module-Adv-Systems-Management12-Updates           | SLE-Module-Adv-Systems-Management12-Updates           | Yes     | (r ) Yes  | Yes
 5 | SMT-http_smt-ec2_susecloud_net:SLE-Module-Containers12-Debuginfo-Pool                | SLE-Module-Containers12-Debuginfo-Pool                | No      | ----      | - 6 | SMT-http_smt-ec2_susecloud_net:SLE-Module-Containers12-Debuginfo-Updates             | SLE-Module-Containers12-Debuginfo-Updates             | No      | ----      | -```

此處你需要檢查 `enabled` 列來確定哪些倉庫是已被啟用的而哪些沒有。

### 在 Suse Linux 中使用 zypper 添加或移除倉庫

要添加倉庫你需要倉庫或 .repo 文件的 URI,否則你會遇到如下錯誤。

root@kerneltalks # zypper addrepo -c SLES12-SP3-Updates
If only one argument is used, it must be a URI pointing to a .repo file.


使用 URI,你可以像如下方式添加倉庫:

root@kerneltalks # zypper addrepo -c http://smt-ec2.susecloud.net/repo/SUSE/Products/SLE-SDK/12-SP3/x86_64/product?credentials=SMT-http_smt-ec2_susecloud_net SLE-SDK12-SP3-Pool
Adding repository 'SLE-SDK12-SP3-Pool' ...........................................................................................................................[done]
Repository 'SLE-SDK12-SP3-Pool' successfully added

URI : http://smt-ec2.susecloud.net/repo/SUSE/Products/SLE-SDK/12-SP3/x86_64/product?credentials=SMT-http_smt-ec2_susecloud_net
Enabled : Yes
GPG Check : Yes
Autorefresh : No
Priority : 99 (default priority)

Repository priorities are without effect. All enabled repositories share the same priority.


在 Suse 中使用附帶 `addrepo` 或 `ar` 子命令的 `zypper` 命令添加倉庫,後接 URI 以及你需要提供一個別名。

要在 Suse 中移除一個倉庫,使用附帶 `removerepo` 或 `rr` 子命令的 `zypper` 命令。

root@kerneltalks # zypper removerepo nVidia-Driver-SLE12-SP3
Removing repository 'nVidia-Driver-SLE12-SP3' ....................................................................................................................[done]
Repository 'nVidia-Driver-SLE12-SP3' has been removed.


### 清除 zypper 本地緩存

使用 `zypper clean` 命令清除 zypper 本地緩存。

root@kerneltalks # zypper clean
All repositories have been cleaned up.



via: 

作者:[KernelTalks](https://kerneltalks.com) 譯者:[cycoe](https://github.com/cycoe) 校對:[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原創編譯,[Linux中國](https://linux.cn/) 榮譽推出

---
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國