72·包管理入门

yum/dnf 包管理(RHEL/CentOS)

yumdnfrpm

第72课:yum/dnf 包管理(RHEL/CentOS)

学习目标

完成本课学习后,你将能够:

  1. 理解 yumdnf 在 RHEL/CentOS 系统中的作用及其与 rpm 的关系。
  2. 掌握使用 yum/dnf 安装、更新、删除和查询软件包的核心命令。
  3. 学会处理软件包的依赖关系,并理解软件源的概念。
  4. 能够配置和管理软件仓库(Repository)。
  5. 学会利用 yum/dnf 基本排查常见的包管理问题。

核心概念

在 RHEL(Red Hat Enterprise Linux)和 CentOS 这样的系统中,管理软件包的工具主要有三兄弟:RPMyumdnf

  • RPM (Red Hat Package Manager):这是最底层的工具。它就像一个“安装工人”,负责具体的软件包安装、卸载、查询和验证工作。但它自己不处理依赖关系。如果一个软件包A依赖包B,你必须先手动用RPM安装B,再安装A,非常麻烦。
  • yum (Yellowdog Updater, Modified)dnf (Dandified Yum):它们是 RPM 的“智能管家”。它们建立在 RPM 之上,核心价值是自动处理依赖关系。当你用 yum/dnf 安装软件包A时,它们会自动分析出还需要哪些依赖包(如B、C、D),然后从配置好的软件源(仓库)中一次性把它们全部下载并安装好。dnf 是下一代版本,解决了 yum 的一些设计缺陷,性能更好,在较新的 RHEL/CentOS 8+ 及 Fedora 系统中是默认工具。对于初学者,两者的基本命令几乎完全兼容。

简单比喻

  • 软件源 (Repository):相当于一个大型的、可信的“应用商店”服务器,里面分门别类存放着成千上万个经过编译和测试的软件包。
  • yum/dnf:相当于你的“应用商店客户端”,它知道去哪里找这些软件包(源地址),并能帮你处理好所有复杂的安装依赖。
  • RPM:相当于具体的“安装程序”,负责把一个 .rpm 包文件解压并配置到你的系统里。

代码示例

以下命令以 dnf 为例演示,它在 CentOS 8+ 及 Fedora 中是默认且推荐使用的。如果你在 CentOS 7 或更老的系统上,请将 dnf 替换为 yum,效果几乎相同。

# 1. 更新软件包数据库和已安装的软件包
# 这是维护系统安全的第一步,类似于“应用商店”检查更新。
sudo dnf update    # 更新所有已安装的软件包到最新版本
sudo dnf check-update # 仅检查可用更新,不安装

# 2. 搜索软件包
# 不确定软件包的确切名称时使用。
dnf search nginx    # 在所有已配置的源中搜索包含“nginx”的软件包
dnf list installed  # 列出所有已安装的软件包

# 3. 安装软件包
# 这是最常用的操作。`-y` 参数表示自动回答“是”,跳过确认。
sudo dnf install -y nginx    # 安装 nginx 服务器软件包
sudo dnf install -y vim wget # 同时安装多个软件包

# 4. 删除软件包
# 卸载不再需要的软件。
sudo dnf remove -y nginx     # 删除 nginx 及其不再需要的依赖包

# 5. 查看软件包信息
# 了解软件包的详细信息,如版本、来源、依赖关系等。
dnf info nginx
dnf provides /usr/sbin/nginx # 查询某个命令/文件属于哪个软件包

# 6. 清理缓存
# yum/dnf 会将下载的软件包缓存到 `/var/cache/dnf` 或 `/var/cache/yum` 目录。
# 定期清理可以释放磁盘空间。
sudo dnf clean all

# 7. 软件源管理
# 列出所有已配置和启用的软件源。
dnf repolist all
# 安装第三方软件源(以 EPEL 为例,Extra Packages for Enterprise Linux)。
sudo dnf install -y epel-release

实践练习

练习 1:基础安装与查询

  1. 使用 dnf search 搜索名为 htop 的系统监控工具。
  2. 使用 dnf install 安装它。
  3. 使用 dnf info htop 查看它的详细信息。
  4. 最后,使用 dnf remove 删除它。

练习 2:模拟系统更新 假设你是一位系统管理员,需要为服务器执行例行维护。

  1. 首先,使用 dnf check-update 检查有哪些软件包有可用更新。
  2. (可选)为了安全,你可以先只更新一个非关键的包(如 vim-minimal),命令是 sudo dnf update vim-minimal
  3. 最后,使用 sudo dnf update 更新所有包。(注意:在生产环境的正式更新前,请确保已做好备份并计划维护窗口。)

练习 3:配置软件源

  1. 使用 dnf repolist 查看当前启用的软件源列表。
  2. 尝试安装 epel-release 包(如果尚未安装)。安装后,再次使用 dnf repolist,观察列表是否多出了 EPEL 相关的源。
  3. 使用 dnf search htop 搜索,对比安装 EPEL 前后的搜索结果是否更丰富。

常见错误

  1. 权限不足:忘记使用 sudo 前缀。

    • 错误示例dnf install nginx
    • 错误信息Error: This command has to be run with superuser privileges.
    • 解决:所有修改系统的操作(安装、删除、更新)都需要 root 权限,务必加上 sudo
  2. 包名拼写错误:输入的软件包名称不存在。

    • 错误示例sudo dnf install nginxx (多了一个x)
    • 错误信息No match for argument: nginxx
    • 解决:先使用 dnf searchdnf provides 查找正确的包名。
  3. 软件源问题:系统默认的源可能无法访问(特别是在国内),或需要安装的包在额外的源(如 EPEL)中。

    • 错误信息Failed to download metadata for repo ‘appstream’No match for argument
    • 解决
      • 检查网络连接。
      • 将默认源替换为国内镜像源(如阿里云、清华源)。这需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。
      • 安装额外的软件源,如 epel-release
  4. 依赖冲突:尽管 dnf/yum 能处理依赖,但在安装来自多个源或第三方 RPM 包时,仍可能发生冲突。

    • 错误信息package A requires B, but B is obsoleted by C 等。
    • 解决:仔细阅读错误信息,尝试使用 sudo dnf distro-sync 来同步发行版的包版本,或者手动解决冲突(可能需要移除冲突的包)。

小结

本节课我们学习了 RHEL/CentOS 系统下强大的包管理工具 yum/dnf

  • 核心关系rpm 是底层工具,yum/dnf 是构建在其上的高层管理器,能自动解决依赖
  • 基本操作:掌握 install(安装)、remove(删除)、update(更新)、search(搜索)、info(查询)等核心命令。
  • 关键概念:理解软件源是软件包的来源仓库,管理好源是系统维护的基础。
  • 实践习惯:养成定期更新(sudo dnf update)的习惯,并学会使用 dnf clean 清理缓存。
  • 排错思路:遇到问题先检查权限、包名和软件源配置。

下一课,我们将了解另一种通用的打包格式:snapflatpak,它们为 Linux 带来了跨发行版的软件分发体验。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「snap 与 flatpak 通用包」 以巩固所学知识。