人人都会AI编程

YUM/DNF 仓库配置、软件安装、升级、卸载

更新时间:2026-07-12

在 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:人类可读的描述。
  • baseurlmirrorlist:指定软件包的位置,可以用变量如 $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 系下软件生命周期管理的完整工具集。简单的语法和强大的依赖解析,使系统维护高效且可预测。