跳转到内容

DNF 包管理基础

适用于 CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x

DNF (Dandified YUM) 是 EL 9 系列的默认包管理器,取代了 EL 7 时代的 YUM。本文带你掌握日常使用中最常见的 DNF 操作。

  • 搜索、安装、更新和删除软件包
  • 查看已安装的包和包信息
  • 管理软件包缓存
  • 理解 DNF 与 YUM 的关系
  • 一台已安装 EL 9.x 的系统(物理机或虚拟机均可)
  • 拥有 sudo 权限的用户账户
  • 系统已联网

使用 dnf search 在仓库中查找软件包:

搜索包含 nginx 的软件包
$ dnf search nginx

输出示例:

Last metadata expiration check: 2:15:30 ago on Mon 24 Mar 2026.
======================== Name Exactly Matched: nginx ========================
nginx.x86_64 : A high performance web server and reverse proxy server
==================== Name & Summary Matched: nginx ====================
nginx-mod-http-perl.x86_64 : Nginx HTTP perl module
nginx-mod-stream.x86_64 : Nginx stream modules
  1. 查看包信息(可选但推荐)

    查看 nginx 包的详细信息
    $ dnf info nginx
  2. 安装软件包

    安装 nginx
    $ sudo dnf install nginx

    DNF 会显示将要安装的包和依赖列表,输入 y 确认。

  3. 验证安装

    确认 nginx 已安装
    $ rpm -q nginx
    nginx-1.24.0-1.el9.x86_64
更新单个软件包
$ sudo dnf update nginx
更新所有已安装的软件包
$ sudo dnf update
仅检查可用更新,不安装
$ dnf check-update
删除 nginx
$ sudo dnf remove nginx
列出所有已安装的包
$ dnf list installed
列出已安装的包(过滤关键词)
$ dnf list installed | grep nginx
查看某个文件属于哪个包
$ dnf provides /usr/sbin/nginx
清除所有缓存
$ sudo dnf clean all
重建元数据缓存
$ sudo dnf makecache

在 EL 9 上,yum 命令实际是 dnf 的软链接:

验证 yum 指向 dnf
$ ls -la /usr/bin/yum
lrwxrwxrwx 1 root root 5 Jan 1 00:00 /usr/bin/yum -> dnf-3

你可以继续使用 yum 命令,效果与 dnf 完全一致。但建议新用户直接习惯使用 dnf

包名可能不在已启用的仓库中。尝试:

Terminal window
$ dnf search xxx # 确认包名是否正确
$ dnf repolist # 查看已启用的仓库

如果包在 EPEL 中,请参考 EPEL 与第三方源

提示 “This command has to be run with superuser privileges”

Section titled “提示 “This command has to be run with superuser privileges””

你需要使用 sudo 或切换到 root 用户。参考sudo 配置

EL 10 仍然使用 DNF 4(当前为 4.20),而不是 DNF 5;dnf 日常命令与 EL 9 基本兼容。主要变化如下:

变化项EL 9EL 10
包管理器DNF 4DNF 4.20(命令保持兼容)
模块化(AppStream)提供模块流已弃用:不再分发 modular 内容,dnf module 会显示弃用警告
filelists 元数据默认下载默认不下载(节省磁盘空间和时间)
DNF debug 插件可用已从 dnf-plugins-core 移除
versionlockdnf-plugin-versionlock相同,仍使用 versionlock.list
确认当前 DNF 版本
dnf --version