文章目录
- 一、命令介绍
- 二、选项参数
- 选项
- 参数
- 三、配置文件
- 四、参考示例
- (一)安装、升级和删除包
- 安装指定的软件包
- 强制重新安装
- 本地安装指定软件包
- 本地更新指定软件包
- 安装 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.
[root@linuxcool ~]# yum list installed
[root@linuxcool ~]# yum list --installed
列出已经安装的但是不包含在资源库中的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
注:
- 如果只指定包名,没有版本号,
rpm -q gcl
可能会得到其他已知版本的列表,使用$()
可以获取括号内命令执行的结果 - 从上述列表可知,
dependency
后面显示依赖的功能,provider
功能可能的提供者。例如,/bin/sh
可以来自bash
的两个级别之一。
通过使用创造性的筛选,可以把输出缩减为下面所示的包名列表:
[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,查看在提示接受安装提议之前显示的列表。
注:
awk
是一种编程语言,awk '{ print $2 }'
这段代码表示打印每行的第2
个字段,然后把结果输出给后面的命令sort
会根据每行首个字符的 ASCII 码大小排序uniq
去除重复的行
列出所有名称以 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)
通常,这些工具以自动或半自动方式处理多个包更新。它们还可能提供显示存储库内容或搜索包的功能。更多信息参见发行版的文档。