Linux 命令之 yum -- 基于 RPM 的软件包管理器
文章目錄
- 一、命令介紹
- 二、選項參數
- 選項
- 參數
- 三、配置文件
- 四、參考示例
- (一)安裝、升級和刪除包
- 安裝指定的軟件包
- 強制重新安裝
- 本地安裝指定軟件包
- 本地更新指定軟件包
- 安裝 yum 服務器中的所有可安裝的軟件
- 安裝程序組(軟件組)
- 安裝 yum 圖形窗口插件
- 安裝自動搜索最快鏡像的插件
- 更新系統中所有的軟件
- 大規模的升級
- 更新所有名稱以 “gr” 開頭的包
- 更新指定的軟件包
- 更新指定的軟件包到指定的版本
- 升級指定程序包
- 升級程序組
- 刪除/卸載軟件包
- 刪除程序組
- (二)查詢和檢查包
- 查看目前 yum 服務器上可用的軟件組
- 查看指定程序組的詳細信息
- 檢查可更新的程序
- 查看在 yum 服務器中的可以安裝但本地系統尚未安裝的包
- 查看被廢棄的包
- 查看新添加進 yum 倉庫的包
- 查看當前能夠使用的yum倉庫
- 顯示所有倉庫
- 顯示禁用的倉庫
- 顯示啟用的倉庫
- 檢查 MySQL 是否已安裝
- 查看指定軟件包的安裝信息
- 查看軟件包的詳細信息
- 列出資源庫中特定的軟件包信息
- 列出資源庫中所有可以更新的軟件包信息
- 列出已經所有已安裝的軟件包信息
- 列出已經安裝的但是不包含在資源庫中的軟件包信息
- 列出 yum 服務器上所有可安裝的軟件
- 列出 yum 服務器上所有可以安裝的軟件包的信息
- 查看所有已經安裝的軟件包
- 列出已經安裝的但是不包含在資源庫中的rpm包
- 列出目前 yum 服務器上可供本機進行升級的軟件有哪些
- 根據關鍵字查找軟件包
- 查看軟件包的依賴關系
- 列出所有名稱以 foo 開頭的可用的軟件包
- 查看指定的功能是由哪個軟件包提供的
- (三)執行其它功能
- 清除緩存目錄下的軟件包
- 清除緩存目錄下的headers
- 清除緩存目錄下舊的headers
- 刪除所有緩存的包和頭文件
- 從存儲庫下載 RPM
- 需要檢查一個軟件包的內容但不安裝它
- 尋找 RPM
- 命令未找到
- 五、其他工具
一、命令介紹
Yellowdog Updater Modified(YUM) 是 Duke University 物理系最初為管理 Red Hat Linux 系統開發的包管理工具。YUM 現在是一款非常主流的基于 RPM 的 Shell 前端軟件包管理器,源自于紅帽系的 Linux 發行版,例如,Fedora、RedHat 以及 SUSE 等都在使用 YUM 作為軟件包管理工具,它可以使系統管理人員交互和自動化地更新與管理 rpm 軟件包,能夠從指定的服務器自動下載 rpm 包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
YUM 在 RPM 系統中增加了自動更新和包管理,包括依賴關系管理。與 Debian Advanced Packaging Tool (APT) 一樣,除了了解系統上安裝的包之外,YUM 還使用存儲庫。存儲庫是包的集合,通常可以通過網絡連接訪問它們。
YUM 提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。
二、選項參數
選項
| -y | 對所有的提問都回答 yes |
| -c | 指定配置文件 |
| -q | 安靜模式 |
| -v | 顯示命令執行過程中的詳細信息 |
| -h 或 --hash | 軟件包安裝的時候列出哈希標記 (和 -v 一起使用效果更好),顯示程序執行進度 |
| -t | 檢查外部錯誤 |
| -d | 設置調試等級(0-10) |
| -e | 設置錯誤等級(0-10) |
| -R | 設置 yum 處理一個命令的最大等待時間 |
| -C | 完全從緩存中運行,而不去下載或者更新任何頭文件 |
| -? 或 -h 或 --help 或 --help-cmd | 顯示命令幫助 |
參數
| install | 安裝rpm軟件包 |
| update | 更新rpm軟件包 |
| check-update | 檢查是否有可用的更新rpm軟件包 |
| remove | 刪除指定的rpm軟件包 |
| list | 顯示軟件包的信息 |
| search | 檢查軟件包的信息 |
| info | 顯示指定的rpm軟件包的描述信息和概要信息 |
| clean | 清理yum過期的緩存 |
| shell | 進入yum的shell提示符 |
| resolvedep | 顯示rpm軟件包的依賴關系 |
| localinstall | 安裝本地的rpm軟件包 |
| localupdate | 顯示本地rpm軟件包進行更新 |
| deplist | 顯示rpm軟件包的所有依賴關系 |
| provides | 查看哪個軟件包提供了指定的文件 |
三、配置文件
YUM 的配置方式是基于分段配置的。
-
主配置文件:/etc/yum.conf
-
YUM 的片段配置:/etc/yum.repos.d/*.repo
主配置文件配置了一個特殊的倉庫,名稱為 main。main 是為其他倉庫提供默認的全局配置的。
了解配置文件的解讀請猛戳這里:https://www.cnblogs.com/zhoading/p/9388604.html
四、參考示例
(一)安裝、升級和刪除包
安裝指定的軟件包
[root@linuxcool ~]# yum install package強制重新安裝
[root@echidna ~]# yum reinstall vim-common注:一般用在軟件包被破壞的情況
本地安裝指定軟件包
安裝指定的 rpm 軟件包時使用本地的軟件倉庫。
[root@linuxcool ~]# yum localinstall 包的完整路徑yum 安裝 rpm 默認會查詢軟件包來源合法性,但有時沒提供密鑰,無法安裝。使用 --nogpgcheck 選項,可以避免yum作校驗。
[root@linuxcool ~]# yum localinstall --nogpgcheck 包的完整路徑本地更新指定軟件包
[root@linuxcool ~]# yum localupdate 包的完整路徑安裝 yum 服務器中的所有可安裝的軟件
[root@linuxcool ~]# yum install安裝程序組(軟件組)
[root@linuxcool ~]# yum groupinsall group注:GNOME、KDE、X Window 等就是軟件組,例如,GNOME 是一個非常直觀且用戶友好的桌面環境。所以軟件組通常在我們全新安裝 Linux 系統時會用到
例如,安裝桌面環境 GNOME:
[root@linuxcool ~]# yum groupstall GNOME安裝 yum 圖形窗口插件
[root@linuxcool ~]# yum install yumex安裝自動搜索最快鏡像的插件
[root@linuxcool ~]# yum install yum-fastestmirror更新系統中所有的軟件
[root@linuxcool ~]# yum update大規模的升級
[root@linuxcool ~]# yum upgrade更新所有名稱以 “gr” 開頭的包
[root@echidna ~]# yum update 'gr*' Loaded plugins: presto, refresh-packagekit Setting up Update Process Resolving Dependencies --> Running transaction check ---> Package grep.x86_64 0:2.6.3-1.fc12 set to be updated ---> Package groff.x86_64 0:1.18.1.4-20.fc12 set to be updated --> Finished Dependency ResolutionDependencies Resolved=====================================================================================Package Arch Version Repository Size ===================================================================================== Updating:grep x86_64 2.6.3-1.fc12 updates 228 kgroff x86_64 1.18.1.4-20.fc12 updates 1.5 MTransaction Summary ===================================================================================== Install 0 Package(s) Upgrade 2 Package(s)Total download size: 1.7 M Is this ok [y/N]: y Downloading Packages: Setting up and reading Presto delta metadata Processing delta metadata Download delta size: 854 k http://fedora.fastsoft.net/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3- 6.fc12_2.6.3-1.fc12.x86_64.drpm: [Errno 14] HTTP Error 404 : http://fedora.fastsoft.n et/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_ 64.drpm Trying other mirror. (1/2): grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm | 214 kB 00:00 (2/2): groff-1.18.1.4-18.fc12_1.18.1.4-20.fc12.x86_64.drpm | 640 kB 00:00 Finishing rebuild of rpms, from deltarpms <delta rebuild> | 1.7 MB 00:02 Presto reduced the update size by 52% (from 1.7 M to 854 k). Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running TransactionUpdating : grep-2.6.3-1.fc12.x86_64 1/4 Updating : groff-1.18.1.4-20.fc12.x86_64 2/4 Cleanup : grep-2.5.3-6.fc12.x86_64 3/4 Cleanup : groff-1.18.1.4-18.fc12.x86_64 4/4 Updated:grep.x86_64 0:2.6.3-1.fc12 groff.x86_64 0:1.18.1.4-20.fc12 Complete!注意:這里使用撇號防止 shell 展開 *。
更新指定的軟件包
[root@linuxcool ~]# yum update package更新指定的軟件包到指定的版本
yum update-to升級指定程序包
[root@linuxcool ~]# yum upgrade package升級程序組
[root@linuxcool ~]# yum groupupdate group刪除/卸載軟件包
[root@linuxcool ~]# yum remove package_name如果試圖刪除的包是其他已安裝包的依賴包,YUM 會提議刪除這些包和依賴包,見以下清單:
[root@echidna ~]# yum remove gcl-selinux Loaded plugins: presto, refresh-packagekit Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased --> Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64 --> Running transaction check ---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased --> Finished Dependency ResolutionDependencies Resolved=====================================================================================Package Arch Version Repository Size ===================================================================================== Removing:gcl-selinux x86_64 2.6.8-0.7.20100201cvs.fc12 @updates 90 k Removing for dependencies:gcl x86_64 2.6.8-0.7.20100201cvs.fc12 @updates 40 MTransaction Summary ===================================================================================== Remove 2 Package(s) Reinstall 0 Package(s) Downgrade 0 Package(s)Is this ok [y/N]: n Exiting on user Command Complete!刪除程序組
[root@linuxcool ~]# yum groupremove group_name(二)查詢和檢查包
查看目前 yum 服務器上可用的軟件組
rpm 包可以組合成軟件組,安裝卸載可以共同進行。
[root@linuxcool ~]# yum grouplist查看指定程序組的詳細信息
查看程序組 Xfce 的信息:
[root@htlwk0001host ~]# yum groupinfo xfce 上次元數據過期檢查:1:06:45 前,執行于 2021年07月20日 星期二 08時42分34秒。組:Xfce描述:一個能在低端機器上良好運行的輕便桌面環境。必要的軟件包:Thunarxfce4-panelxfce4-sessionxfce4-settingsxfconfxfdesktopxfwm4默認的軟件包:NetworkManager-gnomegdmmousepadopenssh-askpassthunar-archive-pluginthunar-volmantumblerxfce-polkitxfce4-appfinderxfce4-power-managerxfce4-pulseaudio-pluginxfce4-screensaverxfce4-terminal可能的軟件包:pinentry-gtk還支持使用中文名稱查詢:
[root@htlwk0001host ~]# yum groupinfo 科學記數法支持 上次元數據過期檢查:1:10:16 前,執行于 2021年07月20日 星期二 08時42分34秒。組:科學記數法支持描述:用于數學和科學計算以及平行計算的工具。可選的軟件包:atlasfftwfftw-develfftw-staticgnuplotgsl-devellapackmpich-developenmpiopenmpi-develpython3-numpypython3-scipyunits檢查可更新的程序
[root@linuxcool ~]# yum check-update [root@linuxcool ~]# yum list updates查看在 yum 服務器中的可以安裝但本地系統尚未安裝的包
yum list available查看被廢棄的包
yum list obsoletes查看新添加進 yum 倉庫的包
yum list recent查看當前能夠使用的yum倉庫
yun repo list顯示所有倉庫
yum repo list all顯示禁用的倉庫
yum repo list enabled顯示啟用的倉庫
yum repo list disabled檢查 MySQL 是否已安裝
[root@linuxcool ~]# yum list installed | grep mysql [root@linuxcool ~]# yum list installed mysql*注:命令 list 的執行結果輸出到管道作為命令 grep 的輸入,grep 讀取管道的數據,從中搜索 mysql 相關的內容。
查看指定軟件包的安裝信息
執行命令 yum list package_name,例如:
[root@htlwk0001host ~]# yum list mysql-community-client.x86_64 上次元數據過期檢查:1:44:13 前,執行于 2021年07月19日 星期一 14時40分41秒。 已安裝的軟件包 mysql-community-client.x86_64 5.7.31-1.el7 @System查看軟件包的詳細信息
執行命令 yum info package_name,例如:
[root@htlwk0001host ~]# yum info mysql-community-client.x86_64 上次元數據過期檢查:1:45:23 前,執行于 2021年07月19日 星期一 14時40分41秒。 已安裝的軟件包 名稱 : mysql-community-client 版本 : 5.7.31 發布 : 1.el7 架構 : x86_64 大小 : 101 M 源 : mysql-community-5.7.31-1.el7.src.rpm 倉庫 : @System 概況 : MySQL database client applications and tools URL : http://www.mysql.com/ 協議 : Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Under GPLv2 license as shown in the Description field. 描述 : This package contains the standard MySQL clients and administration: tools.列出資源庫中特定的軟件包信息
yum info firefox*列出資源庫中所有可以更新的軟件包信息
yum info updates列出已經所有已安裝的軟件包信息
yum info installed列出已經安裝的但是不包含在資源庫中的軟件包信息
yum info extras注:如通過其它網站下載安裝的 rpm 包
列出 yum 服務器上所有可安裝的軟件
[root@linuxcool ~]# yum list列出 yum 服務器上所有可以安裝的軟件包的信息
[root@linuxcool ~]# yum info查看所有已經安裝的軟件包
--installed
Limit the resulting set to installed packages only. The exclude option in the configuration file might influence the result, but if the command line option --disableexcludes is used, it ensures that all installed packages will be listed.
列出已經安裝的但是不包含在資源庫中的rpm包
[root@linuxcool ~]# yum list extras列出目前 yum 服務器上可供本機進行升級的軟件有哪些
[root@linuxcool ~]# yum list updates根據關鍵字查找軟件包
[root@htlwk0001host ~]# yum search mysql 上次元數據過期檢查:1:56:01 前,執行于 2021年07月19日 星期一 14時40分41秒。 ======================================================================================== 名稱 和 概況 匹配:mysql ======================================================================================== mysql.x86_64 : MySQL client programs and shared libraries mysql-router.x86_64 : MySQL Router MySQL-zrm.noarch : MySQL backup manager libnss-mysql.x86_64 : NSS library for MySQL查看軟件包的依賴關系
使用命令 yum deplist package_name 來獲得已安裝的 gcl 版本的依賴列表:
[ian@echidna ~]$ yum deplist $(rpm -q gcl) Loaded plugins: presto, refresh-packagekit Finding dependencies: package: gcl.x86_64 2.6.8-0.7.20100201cvs.fc12dependency: libc.so.6(GLIBC_2.3.4)(64bit)provider: glibc.x86_64 2.11-2provider: glibc.x86_64 2.11.1-6dependency: /bin/shprovider: bash.x86_64 4.0.33-1.fc12provider: bash.x86_64 4.0.35-3.fc12dependency: gcl-selinuxprovider: gcl-selinux.x86_64 2.6.8-0.6.20090701cvs.fc12provider: gcl-selinux.x86_64 2.6.8-0.7.20100201cvs.fc12dependency: libgmp.so.3()(64bit)provider: gmp.x86_64 4.3.1-5.fc12dependency: libc.so.6(GLIBC_2.8)(64bit)provider: glibc.x86_64 2.11-2provider: glibc.x86_64 2.11.1-6dependency: libc.so.6(GLIBC_2.4)(64bit)provider: glibc.x86_64 2.11-2provider: glibc.x86_64 2.11.1-6dependency: libc.so.6()(64bit)provider: glibc.x86_64 2.11-2provider: glibc.x86_64 2.11.1-6dependency: /sbin/install-infoprovider: info.x86_64 4.13a-7.fc12注:
通過使用創造性的篩選,可以把輸出縮減為下面所示的包名列表:
[ian@echidna ~]$ yum deplist $(rpm -q gcl) | grep "provider:" | \ > awk '{ print $2 }'|sort|uniq bash.x86_64 gcl-selinux.x86_64 glibc.i686 glibc.x86_64 gmp.x86_64 info.x86_64 libX11.x86_64 readline.x86_64 tcl.x86_64 tk.x86_64 zlib.x86_64如果只想知道需要安裝哪些包,可以運行 yum install,查看在提示接受安裝提議之前顯示的列表。
注:
列出所有名稱以 foo 開頭的可用的軟件包
[root@linuxcool ~]# yum list available 'foo*'查看指定的功能是由哪個軟件包提供的
[ian@echidna ~]$ yum whatprovides 'gcl-selinux(x86-64)' # provides 也行 Loaded plugins: presto, refresh-packagekit gcl-selinux-2.6.8-0.6.20090701cvs.fc12.x86_64 : SELinux policy for GCL images Repo : fedora Matched from: Other : gcl-selinux(x86-64)gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 : SELinux policy for GCL images Repo : updates Matched from: Other : gcl-selinux(x86-64)gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 : SELinux policy for GCL images Repo : installed Matched from: Other : Provides-match: gcl-selinux(x86-64)從上述查詢結果可以看到,除了顯示提供此功能的已安裝包的信息之外,YUM 還顯示存儲庫中可用的包或版本。可以看到,原來的 2.6.8-0.6 版來自 fedora 存儲庫,而 updates 存儲庫中有更新的 2.6.8-0.7 版。
(三)執行其它功能
清除緩存目錄下的軟件包
yum clean packages清除緩存目錄下的headers
yum clean headers清除緩存目錄下舊的headers
yum clean oldheaders刪除所有緩存的包和頭文件
yum clean all從存儲庫下載 RPM
盡管 yum 會自動地從存儲庫獲取包,但是您可能希望下載并保存 RPM,比如為了在不連網的系統上安裝它們、為了檢查它們的內容或有其他原因。可以使用下面例子中所示的 yumdownloader 命令。對于我們的示例,這個包已經安裝了,所以沒有要下載的包。如果有這樣的包,可以使用 --resolve 選項再次下載它們。
[ian@echidna ~]$ yumdownloader --resolve gcl Loaded plugins: presto, refresh-packagekit adobe-linux-i386 17/17 --> Running transaction check ---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated --> Finished Dependency Resolution gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm | 6.3 MB 00:01需要檢查一個軟件包的內容但不安裝它
如果下載一個 RPM,需要檢查它的內容而不是安裝它,可以使用 rpm2cpio 命令把內容轉換為 cpio 存檔,然后通過 cpio 命令提取出包中的某些或所有文件。下面例子中對 gcl-selinux 包執行轉換,然后顯示提取出的文件(和目錄)。關于 rpm2cpio 和 cpio 命令的更多信息參見它們的手冊頁。
[ian@echidna ~]$ yumdownloader gcl-selinux Loaded plugins: presto, refresh-packagekit gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm | 17 kB 00:00 [ian@echidna ~]$ mkdir gcl-selinux [ian@echidna ~]$ cd gcl-selinux [ian@echidna gcl-selinux]$ rpm2cpio ../gcl-selinux*.rpm | cpio -idv ./usr/share/selinux/packages/gcl ./usr/share/selinux/packages/gcl/gcl.pp 182 blocks [ian@echidna gcl-selinux]$ find . . ./usr ./usr/share ./usr/share/selinux ./usr/share/selinux/packages ./usr/share/selinux/packages/gcl ./usr/share/selinux/packages/gcl/gcl.pp尋找 RPM
我們在前面看到 YUM 提供了搜索功能,可以搜索包描述和包名。如果需要查明哪個包包含某個還沒有安裝的程序,還有幾種方法:
- 可以猜測可能包含它的包,下載這個包,但是不安裝。得到這個包之后,就可以查詢它。
- 可以搜索 Internet。
- 可以試試下面介紹的 command-not-found 功能。
- 如果通過系統工具無法找到某個 RPM,可以通過 Rpmfind.Net 服務器尋找 RPM
命令未找到
如果 Bash shell 搜索一個命令,但是沒有找到,那么 shell 就搜索 shell 函數 command_not_found_handle。如果command_not_found_handle 函數存在,shell 以原來的命令和參數作為參數調用它,函數的退出狀態成為 shell 的退出狀態。如果沒有定義此函數,shell 輸出錯誤消息并返回退出狀態 127。常常在系統 /etc/bash.bashrc 文件中設置此函數。下面例子說明如何搜索 command-not-found 功能并安裝它。
尋找并安裝 command-not-found 功能:
[root@echidna ~]# yum search command-not-found Loaded plugins: presto, refresh-packagekit ========================== Matched: command-not-found ========================== PackageKit-command-not-found.x86_64 : Ask the user to install command line: programs automatically You have new mail in /var/spool/mail/root [root@echidna ~]# yum install PackageKit-command-not-found.x86_64 Loaded plugins: presto, refresh-packagekit Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package PackageKit-command-not-found.x86_64 0:0.5.7-2.fc12 set to be updated --> Finished Dependency ResolutionDependencies Resolved================================================================================Package Arch Version Repository Size ================================================================================ Installing:PackageKit-command-not-found x86_64 0.5.7-2.fc12 updates 102 kTransaction Summary ================================================================================ Install 1 Package(s) Upgrade 0 Package(s)Total download size: 102 k Installed size: 262 k Is this ok [y/N]: y Downloading Packages: Setting up and reading Presto delta metadata Processing delta metadata Package(s) data still to download: 102 k PackageKit-command-not-found-0.5.7-2.fc12.x86_64.rpm | 102 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running TransactionInstalling : PackageKit-command-not-found-0.5.7-2.fc12.x86_64 1/1 Installed:PackageKit-command-not-found.x86_64 0:0.5.7-2.fc12 Complete!下面例子說明在安裝 PackageKit-command-not-found 之后如何定義這個函數。如果函數無法執行搜索,那么它模擬標準的系統行為,返回 127。
[ian@echidna ~]$ type command_not_found_handle command_not_found_handle is a function command_not_found_handle () { runcnf=1;retval=127;[ ! -S /var/run/dbus/system_bus_socket ] && runcnf=0;[ ! -x /usr/sbin/packagekitd ] && runcnf=0;if [ $runcnf -eq 1 ]; then/usr/libexec/pk-command-not-found $1;retval=$?;elseecho "bash: $1: command not found";fi;return $retval }如果 gcl 沒有安裝,安裝 command_not_found_handle 之后嘗試運行 gcl,會看到下面的輸出內容:
[ian@echidna ~]$ gcl Command not found. Install package 'gcl' to provide command 'gcl'? [N/y]五、其他工具
除了 yum 和 rpm 之外,發行商可能提供了用于從存儲庫安裝包或更新整個系統的其他工具。這些工具可能是圖形化工具或命令行工具,或者同時提供這兩種界面。例如:
- YaST (SUSE)
- up2date (Red Hat)
- Mandrake Software Management (Mandriva)
通常,這些工具以自動或半自動方式處理多個包更新。它們還可能提供顯示存儲庫內容或搜索包的功能。更多信息參見發行版的文檔。
總結
以上是生活随笔為你收集整理的Linux 命令之 yum -- 基于 RPM 的软件包管理器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买回的鲜银耳怎么保存 鲜银耳的保存方法介
- 下一篇: H264格式具体说明