zypper
是 Suse 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> 另外使用禁用的倉庫來提供特定的關鍵詞 嘗試使用 '--plus-content debug' 選項來啟用倉庫 --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 列出可用子命令 輸入 'zypper help <command>' 來獲得特定命令的幫助。
zypper
通過 in
或 install
子命令來在你的系統上安裝包。它的用法與 yum 軟體包安裝 相同。你只需要提供包名作為引數,包管理器(此處是 zypper
)就會處理所有的依賴並與你指定的包一併安裝。
# zypper install telnetRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.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): yRetrieving 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 系統中安裝包
要在 Suse Linux 中擦除或移除包,使用 zypper
附帶 remove
或 rm
子命令。
root@kerneltalks # zypper rm telnetLoading 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
使你能夠掃描所有已安裝的軟體包並檢查其依賴性。如果缺少任何依賴項,它將提供你安裝或重新安裝它的機會,從而保持已安裝軟體包的完整性。
使用附帶 verify
或 ve
子命令的 zypper
命令來檢查已安裝包的完整性。
root@kerneltalks # zypper veRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.Loading repository data...Reading installed packages... Dependencies of all installed packages are satisfied.
在上面的輸出中,你能夠看到最後一行說明已安裝包的所有依賴都已安裝完全,並且無需更多操作。
zypper
提供了一種方法使得你能夠將包下載到本地目錄而不去安裝它。你可以在其他具有同樣設定的系統上使用這個已下載的軟體包。包會被下載至 /var/cache/zypp/packages/<repo>/<arch>/
目錄。
root@kerneltalks # zypper download telnetRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.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 包下載到了本地。
zypper
允許你瀏覽已安裝包的所有可用更新,以便你可以提前計劃更新活動。使用 list-updates
或 lu
子命令來顯示已安裝包的所有可用更新。
root@kerneltalks # zypper luRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.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_64v | SLES12-SP3-Updates | bash | 4.3-82.1 | 4.3-83.5.2 | x86_64v | SLES12-SP3-Updates | ca-certificates-mozilla | 2.7-11.1 | 2.22-12.3.1 | noarchv | SLE-Module-Containers12-Updates | containerd | 0.2.5+gitr639_422e31c-20.2 | 0.2.9+gitr706_06b9cb351610-16.8.1 | x86_64v | SLES12-SP3-Updates | crash | 7.1.8-4.3.1 | 7.1.8-4.6.2 | x86_64v | SLES12-SP3-Updates | rsync | 3.1.0-12.1 | 3.1.0-13.10.1 | x86_64
輸出特意被格式化以便於閱讀。每一列分別代表包所屬倉庫名稱、包名、已安裝版本、可用的更新版本和架構。
使用 list-patches
或 lp
子命令來顯示你的 Suse Linux 系統需要被應用的所有可用修補程式。
root@kerneltalks # zypper lpRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.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-libnetworkSLE-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
更新包,使用 update
或 up
子命令後接包名。在上述列出的更新命令中,我們知道在我們的伺服器上 rsync
包更新可用。讓我們現在來更新它吧!
root@kerneltalks # zypper update rsyncRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.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): yRetrieving 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]
如果你不確定包的全名也不要擔心。你可以使用 zypper
附帶的 se
或 search
子命令並提供查詢字串來查詢包。
root@kerneltalks # zypper se lvmRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.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 | srcpackagei+ | lvm2 | Logical Volume Manager Tools | package | lvm2-devel | Development files for LVM2 | package
在上述範例中我們查詢了 lvm
字串並得到了如上輸出列表。你能在 zypper install/remove/update
命令中使用 Name
欄位的名字。
你能夠使用 zypper
檢查已安裝包的詳細資訊。info
或 if
子命令將列出已安裝包的資訊。它也可以顯示未安裝包的詳細資訊,在該情況下,Installed
引數將返回 No
值。
root@kerneltalks # zypper info rsyncRefreshing service 'SMT-http_smt-ec2_susecloud_net'.Refreshing service 'cloud_update'.Loading repository data...Reading installed packages... Information for package rsync:------------------------------Repository : SLES12-SP3-UpdatesName : rsyncVersion : 3.1.0-13.10.1Arch : x86_64Vendor : SUSE LLC <https://www.suse.com/>Support Level : Level 3Installed Size : 625.5 KiBInstalled : YesStatus : up-to-dateSource package : rsync-3.1.0-13.10.1.srcSummary : Versatile tool for fast incremental file transferDescription : 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
命令附帶 lr
或 repos
子命令列出倉庫。
root@kerneltalks # zypper lrRefreshing service 'cloud_update'.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
列來確定哪些倉庫是已被啟用的而哪些沒有。
要新增倉庫你需要倉庫或 .repo 檔案的 URI,否則你會遇到如下錯誤。
root@kerneltalks # zypper addrepo -c SLES12-SP3-UpdatesIf 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-PoolAdding 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_netEnabled : YesGPG Check : YesAutorefresh : NoPriority : 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-SP3Removing repository 'nVidia-Driver-SLE12-SP3' ....................................................................................................................[done]Repository 'nVidia-Driver-SLE12-SP3' has been removed.
使用 zypper clean
命令清除 zypper 本地快取。
root@kerneltalks # zypper cleanAll repositories have been cleaned up.