第72课:yum/dnf 包管理(RHEL/CentOS)
学习目标
完成本课学习后,你将能够:
- 理解
yum和dnf在 RHEL/CentOS 系统中的作用及其与rpm的关系。 - 掌握使用
yum/dnf安装、更新、删除和查询软件包的核心命令。 - 学会处理软件包的依赖关系,并理解软件源的概念。
- 能够配置和管理软件仓库(Repository)。
- 学会利用
yum/dnf基本排查常见的包管理问题。
核心概念
在 RHEL(Red Hat Enterprise Linux)和 CentOS 这样的系统中,管理软件包的工具主要有三兄弟:RPM、yum 和 dnf。
- 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:基础安装与查询
- 使用
dnf search搜索名为htop的系统监控工具。 - 使用
dnf install安装它。 - 使用
dnf info htop查看它的详细信息。 - 最后,使用
dnf remove删除它。
练习 2:模拟系统更新 假设你是一位系统管理员,需要为服务器执行例行维护。
- 首先,使用
dnf check-update检查有哪些软件包有可用更新。 - (可选)为了安全,你可以先只更新一个非关键的包(如
vim-minimal),命令是sudo dnf update vim-minimal。 - 最后,使用
sudo dnf update更新所有包。(注意:在生产环境的正式更新前,请确保已做好备份并计划维护窗口。)
练习 3:配置软件源
- 使用
dnf repolist查看当前启用的软件源列表。 - 尝试安装
epel-release包(如果尚未安装)。安装后,再次使用dnf repolist,观察列表是否多出了 EPEL 相关的源。 - 使用
dnf search htop搜索,对比安装 EPEL 前后的搜索结果是否更丰富。
常见错误
-
权限不足:忘记使用
sudo前缀。- 错误示例:
dnf install nginx - 错误信息:
Error: This command has to be run with superuser privileges. - 解决:所有修改系统的操作(安装、删除、更新)都需要 root 权限,务必加上
sudo。
- 错误示例:
-
包名拼写错误:输入的软件包名称不存在。
- 错误示例:
sudo dnf install nginxx(多了一个x) - 错误信息:
No match for argument: nginxx。 - 解决:先使用
dnf search或dnf provides查找正确的包名。
- 错误示例:
-
软件源问题:系统默认的源可能无法访问(特别是在国内),或需要安装的包在额外的源(如 EPEL)中。
- 错误信息:
Failed to download metadata for repo ‘appstream’或No match for argument。 - 解决:
- 检查网络连接。
- 将默认源替换为国内镜像源(如阿里云、清华源)。这需要编辑
/etc/yum.repos.d/目录下的.repo文件。 - 安装额外的软件源,如
epel-release。
- 错误信息:
-
依赖冲突:尽管 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清理缓存。 - 排错思路:遇到问题先检查权限、包名和软件源配置。
下一课,我们将了解另一种通用的打包格式:snap 和 flatpak,它们为 Linux 带来了跨发行版的软件分发体验。
练习编辑器
rust
Loading...