精通 Linux 包管理:yum 命令详解

在 Red Hat Enterprise Linux (RHEL)、CentOS、Fedora (22 版之前) 等基于 RPM 的 Linux 发行版中,软件包管理是系统管理员和开发者的核心技能之一。yum(全称为 Yellowdog Updater Modified)作为一个强大且历史悠久的命令行包管理工具,极大地简化了系统上软件的安装、更新、删除和查询过程。它能够自动处理依赖关系,从配置的软件仓库(Repository)中获取软件包,是维护系统健康和安全的关键。

本文将深入探讨 yum 命令的方方面面,从基本概念到高级用法,并辅以实例和最佳实践,旨在帮助您全面掌握这一不可或缺的工具。

目录#

  1. yum 的工作原理
  2. yum 的基本语法
  3. 常用 yum 命令详解
  4. 最佳实践与常见用法
  5. yum 与 dnf 的关系
  6. 总结
  7. 参考

yum 的工作原理#

理解 yum 的工作方式有助于更好地使用它。其核心流程可以概括为:

  1. 读取配置yum 首先读取其主配置文件 /etc/yum.conf 以及 /etc/yum.repos.d/ 目录下所有以 .repo 结尾的仓库配置文件。
  2. 更新元数据: 根据配置,yum 会连接到远程(或本地)的软件仓库,下载元数据(metadata)并缓存到本地(/var/cache/yum)。这些元数据包含了仓库中所有可用软件包的列表、版本、依赖关系等信息。
  3. 依赖解析: 当您执行一个操作(如安装)时,yum 会分析该操作涉及的软件包及其依赖关系,计算出一个完整的事务(Transaction)。
  4. 用户确认yum 会将需要安装、更新或删除的软件包列表呈现给用户,并请求确认。
  5. 执行事务: 用户确认后,yum 开始下载所需的软件包(RPM 文件),然后按照正确的顺序执行安装、更新等操作,确保依赖关系得到满足。

yum 的基本语法#

yum 命令的基本语法格式如下:

yum [选项] <命令> [参数...]
  • 选项: 用于修改 yum 的默认行为,例如 -y(自动确认)、--nogpgcheck(不进行GPG验证)等。
  • 命令: 指定要执行的操作,如 install, update, search 等。
  • 参数: 命令作用的对象,通常是软件包名或搜索关键词。

常用 yum 命令详解#

查询软件包#

在安装软件之前,查询是必不可少的步骤。

  • 搜索软件包: 在仓库中根据关键词搜索软件包。

    yum search nginx
  • 列出所有可用软件包: 显示所有可安装的软件包(列表很长,通常与 grep 结合使用)。

    yum list available
    yum list available | grep python3
  • 列出已安装的软件包

    yum list installed
  • 查看软件包详细信息: 显示软件包的版本、发布、大小、描述等详细信息。

    yum info nginx
  • 查看某个文件由哪个软件包提供: 当您知道一个文件名,但不确定它属于哪个包时非常有用。

    yum provides /etc/nginx/nginx.conf
    # 或者使用通配符
    yum provides "*bin/nginx"

安装软件包#

安装软件包是 yum 最常用的功能。

  • 基本安装

    yum install nginx
  • 安装多个软件包

    yum install git wget vim
  • 重新安装软件包: 如果软件包文件损坏,可以尝试重新安装。

    yum reinstall nginx
  • 自动确认安装: 在脚本中使用时,避免交互式确认。

    yum -y install nginx

更新软件包#

保持系统更新是安全运维的重要一环。

  • 检查可用更新: 列出所有可更新的软件包。

    yum check-update
  • 更新单个软件包

    yum update nginx
  • 更新所有软件包(操作需谨慎,建议在测试环境先进行)

    yum update
  • 内核更新yum update 也会更新内核,但会保留旧内核以备回滚。如果只想更新内核,可以使用:

    yum update kernel

删除软件包#

  • 删除软件包: 这会删除软件包本身,但不会删除其依赖项。

    yum remove nginx
  • 删除软件包及其无用依赖: 这是更推荐的删除方式,可以清理不再被任何软件包依赖的“孤儿”包。

    yum autoremove nginx

管理软件仓库#

  • 列出已启用的仓库

    yum repolist
  • 列出所有仓库(包括禁用的)

    yum repolist all
  • 启用特定仓库

    yum-config-manager --enable epel
  • 禁用特定仓库

    yum-config-manager --disable epel

    注意:yum-config-manager 命令可能由 yum-utils 包提供,需要单独安装。

清理缓存#

随着时间的推移,yum 缓存可能会占用大量磁盘空间。

  • 清理所有缓存: 删除所有缓存的软件包和元数据。

    yum clean all
  • 清理旧缓存: 更安全的选择,只清理过时的缓存。

    yum clean packages
    yum clean metadata

事务历史#

yum 会记录所有成功的事务(安装、更新、删除),便于审计和回滚。

  • 查看历史

    yum history
  • 查看特定事务的详细信息

    yum history info 10  # 查看ID为10的事务详情
  • 撤销一个事务: 非常强大的功能,可以回滚一次安装或更新操作。

    yum history undo 10  # 撤销ID为10的事务

最佳实践与常见用法#

  1. 在生产环境操作前,先在测试环境验证: 尤其是 yum update 这类全系统更新操作。
  2. 使用 -y 选项要谨慎: 在脚本中自动化操作时使用,但在手动执行时,务必先查看 yum 将要进行的操作列表,确认无误后再执行。
  3. 定期更新系统: 建立定期更新机制,以获取安全补丁和错误修复。但避免在业务高峰时段进行。
  4. 利用 EPEL 仓库: Extra Packages for Enterprise Linux (EPEL) 提供了大量高质量且与 RHEL/CentOS 兼容的额外软件包,是必不可少的补充仓库。
  5. 卸载时优先使用 autoremove: 避免系统残留无用的依赖包。
  6. 善用 provides 命令: 当遇到“命令未找到”时,可以用此命令查找提供该命令的软件包。
  7. 保持缓存清洁: 定期执行 yum clean all 或配置 /etc/yum.conf 中的 keepcache 选项。
  8. 了解 yumrpm 的区别yum 在高层解决依赖问题,而 rpm 是底层工具。尽量避免直接使用 rpm 安装软件,以免造成依赖地狱。

yum 与 dnf 的关系#

dnf(Dandified Yum)是 yum 的下一代版本,从 Fedora 22 开始成为默认包管理器,并在 RHEL 8/CentOS 8 及以后版本中取代了 yumdnf 在性能、依赖解析和API稳定性方面都有显著提升。

在 RHEL 8/CentOS 8 及以后版本中,yum 命令实际上只是 dnf 的一个符号链接(symlink),以确保对旧脚本的兼容性。因此,您在这些系统上输入 yum 实际上是在调用 dnf。两者的命令用法基本一致,但建议在新系统和脚本中逐渐过渡到使用 dnf 命令。

总结#

yum 是 RHEL/CentOS 系统生态中一个极其强大且成熟的包管理工具。通过熟练掌握其查询、安装、更新、删除以及仓库管理等功能,并结合文中提到的最佳实践,您可以高效、安全地管理系统上的软件,为系统稳定性和安全性打下坚实基础。虽然新一代的 dnf 正在成为主流,但理解 yum 的核心概念对于管理新旧系统都至关重要。

参考#

  1. Red Hat Enterprise Linux Documentation: Working with Yum
  2. yum Man Page: man yum
  3. Fedora Wiki: DNF
  4. EPEL Wiki: Home