在 RHEL、CentOS、Fedora 等发行版中,YUM(Yellowdog Updater Modified) 及其新一代替代品 DNF(Dandified YUM) 是标准的 RPM 包管理器。它们能自动解决依赖关系,从远程仓库(或本地目录)下载并安装、更新、卸载软件。现代系统(如 CentOS 8+、Fedora)推荐使用 dnf 命令,而 yum 基本被保留为兼容别名。
1. 仓库配置
所有仓库信息保存在 /etc/yum.repos.d/ 目录下,每个仓库对应一个 .repo 文件。一个典型的仓库配置如下:
[base]
name=Base Repository
baseurl=http://mirror.centos.org/centos/7/os/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[base]:仓库的唯一标识。name:人类可读的描述。baseurl或mirrorlist:指定软件包的位置,可以用变量如$basearch(架构)和$releasever(系统版本)。gpgcheck=1:启用 GPG 签名校验,确保包来源可信。enabled=1:是否启用该仓库(1启用,0禁用)。gpgkey:GPG 公钥地址,用于验证包签名。
添加第三方仓库的常见做法是直接安装其发布的 -release 包,例如:
dnf install epel-release # 安装 EPEL(Extra Packages for Enterprise Linux)仓库
该命令会自动将对应的 .repo 文件放入 /etc/yum.repos.d/。
要查看当前所有已启用的仓库:
dnf repolist
要列出所有仓库(包括禁用的):
dnf repolist all
2. 软件安装
基本格式:
dnf install 包名
例如安装 nginx:
dnf install nginx
DNF 会自动计算并提示需要安装的依赖包,确认后一次性完成所有安装。
- 安装指定版本:
dnf install 包名-版本号 - 从本地 RPM 文件安装(会自动尝试从仓库解决依赖):
dnf install ./package.rpm - 重新安装(覆盖所有文件):
dnf reinstall 包名
安装前可以使用 dnf check-update 查看哪些包有可用的更新,但并不会实际执行安装。
3. 软件升级
更新所有已安装的包到最新版本:
dnf upgrade # 或 dnf update(两者在 DNF 中作用相同)
更新指定的包:
dnf upgrade 包名
仅检查而不安装更新:
dnf check-update
在升级操作中,DNF 会保留旧的包缓存(通常在 /var/cache/dnf 下),以便必要时的回退。可以定期使用 dnf clean packages 清除这些缓存,释放磁盘空间。
对于系统大版本升级(如从 CentOS 7 到 8),需要通过专门的工具(如 dnf system-upgrade)或重装,普通的 dnf upgrade 不会改变发行版的主版本号。
4. 软件卸载
移除已安装的软件包:
dnf remove 包名
例如 dnf remove nginx。DNF 会在删除前展示将被移除的包及因依赖关系而不再需要的包(可自动清理)。
卸载软件包及其不再被其他包依赖的依赖:
dnf autoremove 包名
或者直接清理所有孤立的依赖:
dnf autoremove
这个命令能有效保持系统整洁,避免积累无用的库。
5. 常用辅助操作
- 搜索软件包:
dnf search 关键字
例如:dnf search web server
- 查看包详细信息:
dnf info 包名 - 列出包的安装内容和依赖:
dnf repoquery --list 包名(或较老的repoquery命令) - 查看一个文件由哪个包提供:
dnf provides 文件路径
例如:dnf provides /etc/passwd 会显示它属于 setup 包,这对解决“缺少某个文件”的问题非常实用。
- 历史操作与回滚:
dnf history # 列出安装/卸载历史
dnf history undo 事务ID # 回滚某次操作
这让你可以撤销一次误操作,而无需手动逐一还原。
这些命令共同构成了 RHEL/CentOS/Fedora 系下软件生命周期管理的完整工具集。简单的语法和强大的依赖解析,使系统维护高效且可预测。