Linux YUM 命令详解:从入门到精通
在 Linux 系统管理中,包管理工具是日常操作的核心。对于基于 RPM(Red Hat Package Manager)的发行版(如 RHEL、CentOS、Fedora 等),yum(Yellowdog Updater Modified)是最常用的包管理工具之一。它不仅能简化软件包的安装、更新和卸载流程,还能自动解决依赖关系,极大降低了系统管理的复杂度。
本文将从基础概念到高级实践,全面讲解 yum 命令的使用方法、配置技巧、最佳实践及故障排查,帮助读者轻松掌握 RPM 系 Linux 的包管理精髓。
目录#
- 什么是 YUM?
- YUM 核心概念
- 2.1 软件仓库(Repositories)
- 2.2 RPM 包与依赖关系
- YUM 常用命令全解析
- 3.1 安装软件包
- 3.2 更新软件包
- 3.3 卸载软件包
- 3.4 搜索与查询软件包
- 3.5 仓库与缓存管理
- 3.6 事务历史与回滚
- YUM 配置文件详解
- 4.1 主配置文件
/etc/yum.conf - 4.2 仓库配置文件(
.repo)
- 4.1 主配置文件
- 软件仓库管理实战
- 5.1 添加/删除仓库
- 5.2 启用/禁用仓库
- 5.3 常用第三方仓库(EPEL、Remi 等)
- YUM 最佳实践
- 常见故障排查
- 7.1 仓库无法访问
- 7.2 依赖冲突
- 7.3 GPG 密钥验证失败
- 实战案例:典型 YUM 工作流
- 总结
- 参考资料
1. 什么是 YUM?#
yum(Yellowdog Updater Modified)是一个基于 RPM 的包管理工具,最初由杜克大学为 Yellow Dog Linux 开发,后被 Red Hat 等发行版广泛采用。它的核心功能是:
- 自动解决依赖关系:安装软件时自动下载并安装所需的依赖包。
- 集中管理软件仓库:从预配置的仓库(Repositories)中获取软件包,无需手动下载 RPM 文件。
- 支持事务管理:记录操作历史,支持回滚(如卸载误安装的包)。
注意:在 RHEL 8/CentOS 8 及以上版本中,
yum已成为dnf(Dandified YUM)的符号链接,但命令用法基本兼容。本文以传统yum(适用于 CentOS 7 及以下)为例,多数命令也适用于dnf。
2. YUM 核心概念#
2.1 软件仓库(Repositories)#
仓库是存放 RPM 包及元数据的服务器或本地目录,YUM 通过仓库获取软件包。仓库分为:
- 官方仓库:由发行版厂商维护(如 CentOS-Base、RHEL-AppStream),稳定性和安全性最高。
- 第三方仓库:由社区或企业提供(如 EPEL、Remi),补充官方仓库未包含的软件(如最新版 Nginx、Python)。
- 本地仓库:用户手动搭建的本地目录(如挂载 ISO 文件作为仓库)。
仓库元数据(repomd.xml、primary.xml.gz 等)记录了包列表、依赖关系等信息,YUM 通过元数据实现包检索和依赖解析。
2.2 RPM 包与依赖关系#
- RPM 包:YUM 管理的软件包格式(
.rpm),包含二进制文件、配置文件、安装脚本等。 - 依赖关系:软件运行所需的其他包或库(如安装
httpd需要apr、apr-util等)。YUM 会自动分析依赖链并批量安装,避免手动解决依赖的繁琐。
3. YUM 常用命令全解析#
3.1 安装软件包#
基本语法:#
yum install [选项] <包名>常用选项:#
-y:自动回答 "yes",无需手动确认。--nogpgcheck:跳过 GPG 密钥验证(不推荐,仅临时用于无 GPG 密钥的仓库)。--enablerepo=<仓库ID>:临时启用指定仓库(即使仓库默认禁用)。
示例:#
# 安装 Apache(httpd),自动确认
yum install -y httpd
# 从 EPEL 仓库安装 htop(假设 EPEL 已添加但默认禁用)
yum install --enablerepo=epel htop -y3.2 更新软件包#
基本语法:#
# 更新单个包
yum update [选项] <包名>
# 更新所有包(含系统内核)
yum update [选项]
# 更新所有包但不更新内核
yum upgrade [选项]示例:#
# 更新系统所有包(谨慎操作,生产环境建议先测试)
yum update -y
# 仅更新 Nginx
yum update nginx -y
# 更新所有包但不升级内核(CentOS 7 及以下)
yum upgrade -y3.3 卸载软件包#
基本语法:#
yum remove [选项] <包名> # 卸载包及未被依赖的依赖
yum erase [选项] <包名> # 与 remove 功能相同示例:#
# 卸载 httpd,自动确认
yum remove -y httpd注意:
yum remove仅卸载指定包及“孤儿依赖”(即不再被其他包依赖的依赖),不会强制删除被其他包依赖的文件。
3.4 搜索与查询软件包#
搜索包(按名称或描述):#
yum search <关键词>示例:搜索包含“web server”的包
yum search "web server" # 结果会包含 httpd、nginx 等查看包详情:#
yum info <包名>示例:查看 Nginx 包信息
yum info nginx列出已安装/可用包:#
yum list installed # 列出所有已安装包
yum list available # 列出仓库中可用但未安装的包
yum list <包名> # 查看指定包的安装状态(如 yum list httpd)查看包依赖关系:#
yum deplist <包名>示例:查看 httpd 的依赖
yum deplist httpd3.5 仓库与缓存管理#
列出仓库:#
yum repolist # 列出已启用的仓库
yum repolist all # 列出所有仓库(含禁用的)清理缓存:#
YUM 会缓存下载的 RPM 包和元数据,缓存过大时需清理:
yum clean all # 清理所有缓存(包和元数据)
yum clean packages # 仅清理缓存的 RPM 包
yum clean metadata # 仅清理元数据重建缓存:#
清理缓存后,需重建元数据缓存以确保仓库信息最新:
yum makecache # 生成元数据缓存3.6 事务历史与回滚#
YUM 会记录所有操作(安装、更新、卸载),支持基于历史的回滚:
查看历史记录:#
yum history # 列出所有事务历史(ID、操作、日期)
yum history info <事务ID> # 查看指定事务的详细信息回滚操作:#
yum history undo <事务ID> # 撤销指定事务(如卸载误安装的包)
yum history rollback <事务ID> # 回滚到指定事务状态(慎用,可能影响依赖)示例:撤销 ID 为 10 的事务
yum history undo 10 -y4. YUM 配置文件详解#
4.1 主配置文件 /etc/yum.conf#
该文件定义 YUM 的全局行为,常用配置项:
[main]
cachedir=/var/cache/yum/$basearch/$releasever # 缓存目录
keepcache=0 # 0:安装后删除缓存包;1:保留
debuglevel=2 # 调试级别(0-10,默认2)
logfile=/var/log/yum.log # 日志文件路径
exactarch=1 # 是否只安装与系统架构匹配的包(推荐1)
obsoletes=1 # 是否处理过时包(用于 yum upgrade)
gpgcheck=1 # 全局默认 GPG 验证开关(1:启用)
plugins=1 # 是否启用插件(如 fastestmirror)
installonly_limit=5 # 保留内核的最大数量(默认5)4.2 仓库配置文件(.repo)#
仓库配置文件存放于 /etc/yum.repos.d/,文件名以 .repo 结尾(如 CentOS-Base.repo)。每个仓库对应一个 [repo-id] 段落,格式如下:
[repo-id] # 仓库唯一标识(不能重复)
name=Repository Name # 仓库名称(描述性文字)
baseurl=http://example.com/repo/$releasever/$basearch/ # 仓库地址(http/ftp/file)
enabled=1 # 是否启用仓库(1:启用;0:禁用)
gpgcheck=1 # 是否验证包的 GPG 签名(1:启用)
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # GPG 公钥路径(用于验证签名)变量说明:
$releasever(系统版本,如 7)、$basearch(系统架构,如 x86_64)会自动替换为实际值。
5. 软件仓库管理实战#
5.1 添加/删除仓库#
添加仓库:#
-
手动创建
.repo文件并放入/etc/yum.repos.d/。
示例:添加 EPEL 仓库(适用于 CentOS 7)cat > /etc/yum.repos.d/epel.repo << EOF [epel] name=Extra Packages for Enterprise Linux 7 - \$basearch baseurl=https://download.fedoraproject.org/pub/epel/7/\$basearch enabled=1 gpgcheck=1 gpgkey=https://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 EOF -
通过 RPM 包安装仓库(推荐,自动配置 repo 文件):
例如安装 EPEL 仓库:yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
删除仓库:#
直接删除 /etc/yum.repos.d/ 下对应的 .repo 文件即可:
rm -f /etc/yum.repos.d/epel.repo5.2 启用/禁用仓库#
临时启用/禁用仓库(仅本次操作生效):
yum install --enablerepo=epel htop # 临时启用 EPEL 仓库安装 htop
yum update --disablerepo=remi php # 更新 PHP 时禁用 Remi 仓库永久启用/禁用仓库(修改 repo 文件或使用 yum-config-manager):
# 安装 yum-utils(提供 yum-config-manager)
yum install -y yum-utils
# 永久启用 EPEL 仓库
yum-config-manager --enable epel
# 永久禁用 Remi 仓库
yum-config-manager --disable remi5.3 常用第三方仓库#
-
EPEL(Extra Packages for Enterprise Linux):最常用的第三方仓库,提供大量官方仓库未包含的软件(如
htop、nginx旧版本)。
安装:yum install -y epel-release(CentOS 7)。 -
Remi:专注于提供最新版 PHP、MySQL 等软件,适合需要新版本开发环境的场景。
官网:https://rpms.remirepo.net/。 -
ELRepo:提供硬件驱动和内核相关包(如
elrepo-kernel)。
6. YUM 最佳实践#
-
安装前先更新系统:
yum update -y确保依赖库为最新版本,减少依赖冲突。 -
慎用
-y选项:
自动确认可能导致误操作(如卸载关键包),生产环境建议手动确认。 -
强制启用 GPG 验证:
禁用gpgcheck可能安装恶意包,始终保持gpgcheck=1,并导入仓库的 GPG 密钥。 -
优先使用官方仓库:
第三方仓库可能导致包版本冲突(如 Remi 与官方 PHP 包),非必要不启用。 -
定期清理缓存:
yum clean all && yum makecache避免缓存元数据过期导致的安装失败。 -
使用
yum history记录操作:
重要操作后记录事务 ID,便于后续回滚(如yum history | grep "install httpd")。 -
避免手动安装 RPM 包:
手动安装.rpm文件会绕过 YUM 依赖管理,可能导致依赖链断裂,建议通过仓库安装。
7. 常见故障排查#
7.1 仓库无法访问(Could not retrieve mirrorlist)#
- 排查:检查仓库
baseurl是否正确(如ping仓库域名,curl测试 URL)。 - 解决:
- 修正
.repo文件中的baseurl(如将http改为https,或更换镜像源)。 - 清理缓存并重建:
yum clean all && yum makecache。
- 修正
7.2 依赖冲突(Error: Package: ... requires ...)#
- 排查:不同仓库提供同一包的不同版本(如官方 PHP 与 Remi PHP)。
- 解决:
- 禁用冲突仓库:
yum-config-manager --disable <冲突仓库ID>。 - 指定包版本安装:
yum install <包名>-<版本>(需仓库提供该版本)。
- 禁用冲突仓库:
7.3 GPG 密钥验证失败(GPG key retrieval failed)#
- 排查:仓库
gpgkey路径错误,或密钥未导入。 - 解决:
- 手动导入 GPG 密钥:
rpm --import <gpgkey-url>(如 EPEL 密钥:rpm --import https://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7)。 - 检查
.repo文件中gpgkey是否正确。
- 手动导入 GPG 密钥:
8. 实战案例:典型 YUM 工作流#
场景:在 CentOS 7 服务器上部署 Nginx,步骤如下:
-
安装 EPEL 仓库(Nginx 存在于 EPEL):
yum install -y epel-release -
更新系统并安装 Nginx:
yum update -y && yum install -y nginx -
查看 Nginx 安装信息:
yum info nginx -
启动 Nginx 并设置开机自启:
systemctl start nginx && systemctl enable nginx -
后续:更新 Nginx 到最新版:
yum update -y nginx -
若更新后出现问题,回滚操作:
yum history | grep "update nginx" # 找到更新事务 ID(假设为 25) yum history undo 25 -y # 回滚到更新前状态
9. 总结#
YUM 作为 RPM 系 Linux 的包管理利器,简化了软件安装、更新和维护流程。掌握其核心命令、仓库配置和最佳实践,能显著提升系统管理效率。记住:始终优先使用官方仓库,启用 GPG 验证,定期清理缓存,并通过 yum history 记录操作,以确保系统稳定与安全。