news 2026/9/25 10:05:51

DNF命令详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DNF命令详解

1、概述

DNF(Dandified YUM)是一个在基于 Red Hat 的 Linux 发行版(如 Fedora、CentOS、RHEL)上用于管理软件包的包管理器。它是 YUM 的下一代版本,提供了更多功能和改进。

RHEL8中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf,原有的yum命令仅为dnf的软链接,当然依旧可以使用的。
dnf源文件所在目录依旧为/etc/yum.repos.d/下,但官方在发布Beta版本时并没有为此系统自带源文件,需要我们自行下载准备。

[root@kwephis47629719 bin]# cat /etc/dnf/dnf.conf [main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True best=True skip_if_unavailable=False sslverify=False [root@kwephis47629719 bin]# cd /etc/yum.repos.d/ [root@kwephis47629719 yum.repos.d]# ll total 4.0K -rw-r--r--. 1 root root 1.7K Jan 29 2022 openEuler.repo [root@kwephis47629719 yum.repos.d]# vi openEuler.repo [root@kwephis47629719 yum.repos.d]# echo "" > openEuler.repo [root@kwephis47629719 yum.repos.d]# uname -a Linux kwephis47629719 5.10.0-60.18.0.50.oe2203.x86_64 #1 SMP Wed Mar 30 03:12:24 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux [root@kwephis47629719 yum.repos.d]# cat /etc/os-release NAME="openEuler" VERSION="22.03 LTS" ID="openEuler" VERSION_ID="22.03" PRETTY_NAME="openEuler 22.03 LTS" ANSI_COLOR="0;31" [root@kwephis47629719 yum.repos.d]# vi openEuler.repo [root@kwephis47629719 yum.repos.d]# dnf clean all 0 files removed [root@kwephis47629719 yum.repos.d]# dnf makecache openEuler-everything 13 MB/s | 16 MB 00:01 openEuler-epol 4.9 MB/s | 2.6 MB 00:00 openEuler-update 14 MB/s | 85 MB 00:06 Metadata cache created. [root@kwephis47629719 yum.repos.d]#

2、dnf常用命令介绍

语法基本和之前的yum命令没啥区别。一般情况下,操作系统中会存在两个dnf命令,分别是dnf和dnf-3。

[root@kwephis47629719 etc]# dnf dnf dnf-3

但是本质上来说都是用的dnf-3,因为在执行文件中,dnf命令创建了软连接指向dnf-3

[root@kwephis47629719 bin]# ll | grep dnf lrwxrwxrwx. 1 root root 22 Jan 22 2022 debuginfo-install -> /usr/libexec/dnf-utils lrwxrwxrwx. 1 root root 5 Mar 21 2022 dnf -> dnf-3 -rwxr-xr-x. 1 root root 1.9K Mar 21 2022 dnf-3

因此,平常使用dnf进行软件包管理的时候,只需要使用dnf命令即可,简化命令。

2.1、安装命令

# 安装软件包

[root@kwephis47629719 ~]# dnf install bash-completion.noarch Last metadata expiration check: 1:35:49 ago on Sun 17 Aug 2025 12:11:52 PM CST. Package bash-completion-1:2.11-3.oe2203.noarch is already installed. Dependencies resolved. Nothing to do. Complete!

# 重新安装

[root@kwephis47629719 ~]# dnf reinstall -y bash-completion.noarch Last metadata expiration check: 1:36:29 ago on Sun 17 Aug 2025 12:11:52 PM CST. Dependencies resolved. ========================================================================================================================================================================================== Package Architecture Version Repository Size ========================================================================================================================================================================================== Reinstalling: bash-completion noarch 1:2.11-3.oe2203 openEuler-update 259 k Transaction Summary ========================================================================================================================================================================================== Total download size: 259 k Installed size: 874 k Downloading Packages: bash-completion-2.11-3.oe2203.noarch.rpm 914 kB/s | 259 kB 00:00 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Total 909 kB/s | 259 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Reinstalling : bash-completion-1:2.11-3.oe2203.noarch 1/2 Cleanup : bash-completion-1:2.11-3.oe2203.noarch 2/2 Verifying : bash-completion-1:2.11-3.oe2203.noarch 1/2 Verifying : bash-completion-1:2.11-3.oe2203.noarch 2/2 Reinstalled: bash-completion-1:2.11-3.oe2203.noarch Complete!

2.2、更新软件包

# 更新单个软件包 dnf update -y packagename # 更新所有软件包 dnf update

2.3、删除软件包

# 删除软件包 dnf remove # 删除不需要的依赖项 dnf autoremove

2.4、查询操作

# 查询软件包 dnf search 关键字 [root@kwephis47629719 ~]# dnf search bash
# 查询所有已经安装的软件包 dnf list installed 或者 dnf list installed | grep bash [root@kwephis47629719 ~]# dnf list installed | grep bash bash.x86_64 5.1.8-6.oe2203 @openEuler-update bash-completion.noarch 1:2.11-3.oe2203 @openEuler-update libvirt-bash-completion.x86_64 6.2.0-64.oe2203 @openEuler-update

另外还有一些常用的查询操作,可以根据需要灵活选择。

# 列出所有可用软件包 dnf list available # 显示软件包信息 dnf info # 查看软件包提供的文件 dnf provides

2.4、dnf 常用选项

选项说明
-y自动回答"yes"
-q安静模式,减少输出
-v详细输出
--refresh在操作前刷新仓库元数据
--nogpgcheck禁用 GPG 签名检查
--skip-broken跳过有问题的软件包
--best尝试安装最佳可用版本

3、dnf配置文件

dnf 的主要配置文件位于/etc/dnf/dnf.conf,常见的配置项包括:

[main] gpgcheck=1 # 是否检查GPG签名 installonly_limit=3 # 保留的内核版本数量 clean_requirements_on_remove=True # 删除时清理依赖 best=True # 总是尝试安装最佳版本

dnf的配置文件跟yum的配置文件配置内容相同,一般修改了yum.conf配置文件,dnf.conf文件就自动修改了,因为yum.conf文件是一个软链接文件

[root@kwephis47629719 ~]# ll /etc/yum.conf lrwxrwxrwx 1 root root 12 Sep 6 2023 /etc/yum.conf -> dnf/dnf.conf [root@kwephis47629719 ~]#

DNF下载离线安装包

下面以下载docker离线安装包为例进行操作演示,我们的目标是为 Docker CE 下载所有必要的 RPM 包,以便在没有网络连接的服务器上进行离线安装。这些包包括:

docker-ce
docker-ce-cli
containerd.io

准备工作

确保在线环境:执行下载操作的机器必须能够访问互联网,并且可以连接到你配置好的 DNF 软件源。
安装 DNF 插件:虽然 dnf core 已包含下载功能,但一些高级特性(如仓库管理)需要安装插件集。

dnf install -y dnf-plugins-core


创建下载目录:创建一个专门的目录用于存放下载下来的 RPM 包,保持文件系统整洁。

# 在用户主目录下创建一个名为 offline_pkgs 的文件夹 mkdir -p ~/offline_pkgs

执行离线包下载命令

这是最关键的一步。我们将使用 dnf install 命令,并配合几个关键参数来实现离线下载。

# 切换到我们刚才创建的下载目录 cd ~/offline_pkgs # 执行核心下载命令 dnf install --downloadonly --downloadir=./ docker-ce docker-ce-cli containerd.io

命令参数解释

  • dnf install ...: dnf 的标准安装命令。
  • --downloadonly: 这是魔法参数。它告诉 DNF 不要执行实际的安装过程,而是将所有需要下载的 RPM 包下载到指定的目录中。
  • --downloadir=./: 指定下载 RPM 包的目标目录。./ 表示当前目录(也就是我们刚刚进入的 ~/offline_pkgs)。
  • docker-ce docker-ce-cli containerd.io: 你想要下载的软件包列表。也可以指定版本号

在某些情况下,你可能需要添加以下参数来确保下载过程更稳定、更完整。会用到一些可选的但是推荐的参数

  • --skip-brupted: 在复杂的依赖树中,有些包可能无法解析(比如测试包或不维护的旧包)。这个参数会跳过这些有问题的依赖,让 DNF 继续下载其他可以解析的包,避免整个过程因一个坏依赖而失败。对于离线安装,这通常很有用。
dnf install --downloadonly --downloaddir=./ --skip-brupted docker-ce docker-ce-cli containerd.io
  • --setopt=tsflags=test,dontinstall: 这个参数组合非常强大。

tsflags=test: DNF 的 ts (transaction script) 机制会给 RPM 包打上标记,如 test、``(空,代表正常)、dontinstall 等。tsflags=test 强制 DNF 将所有下载的包标记为 test 包,这样可以防止它们在后续导入后被意外执行 dnf update 更新。
tsflags=dontinstall: 这个标记会阻止 DNF 在导入这些 RPM 后,认为它们是“已安装”的。
综合效果:这两个标记可以确保你导入的离线 RPM 包包池干净,并被 DNF 识别为“外部安装”的,而不是由 DNF 管理的。这是进行离线安装时的最佳实践。

dnf install --downloadonly --downloadir=./ --setopt=tsflags=test,dontinstall docker-ce docker-ce-cli containerd.io

命令执行后,你会看到一个熟悉的 DNF 依赖解析过程,所有需要的 RPM 文件(以及它们的依赖)都会被下载到 ~/offline_pkgs 目录中。

验证结果

下载完成后,检查一下目录里有什么。

# 列出下载目录中的内容 ls -F ~/offline_pkgs

你应该能看到一堆 .rpm 文件,可能还会看到一个 repodata 目录。这个 repodata 目录非常重要,它包含了 RPM 包的元数据和索引,使得离线环境中的 DNF 能够知道这些包是什么,以及它们之间的依赖关系。

离线服务器安装

现在,你的离线 RPM 包已经准备好了。下一步就是将它们传输到目标(离线)服务器上。

# 假设目标服务器是 192.168.1.100,用户名是 root # 将整个下载目录打包,方便传输 cd ~ tar -czvf offline_docker_packages.tar.gz offline_pkgs/ # 使用 scp (安全拷贝) 命令传输打包文件 scp offline_docker_packages.tar.gz root@192.168.1.100:/root/ 在目标服务器上,解压这个包即可: # 在目标离线服务器上执行 cd /root tar -xzvf offline_docker_packages.tar.gz # 解压后,你将得到一个 /root/offline_pkgs 目录,里面就是所有需要的 RPM 文件

最后一步,在目标(离线)服务器上,使用 DNF 的本地安装功能来安装这些包。

# 切换到解压后的 RPM 包目录 cd /root/offline_pkgs # 使用 DNF 从本地目录安装 # dnf 会自动解析 repodata 中的依赖关系并按正确顺序安装所有包 dnf localinstall ./*.rpm -y

localinstall 命令非常智能,它会:

  1. 查看当前目录下的 repodata。
  2. 分析要安装的包及其依赖。
  3. 在当前目录中找到所有满足依赖的 RPM 包。
  4. 按照正确的依赖顺序依次安装它们。

FAQ

1、OpenEuler操作系统搜不到yum-utils工具包

你在 OpenEuler 操作系统的镜像源中搜索不到 yum-utils 工具包,最核心、最主要的原因是:OpenEuler 默认的包管理器和核心工具集是 DNF,而不是 YUM。
yum-utils 是 YUM 包管理器的工具集。它的命名已经清晰地表明了它的归属和定位。当你的操作系统从一个生态迁移到另一个生态时,底层的工具链往往会发生根本性的变化。

  • 生态系统的变化:OpenEuler 是一个独立的、基于 Linux 内核的操作系统发行版,它由华为主导并捐赠给了开放原子开源基金会。它有自己的软件生态系统和构建标准,与 CentOS/RHEL 的生态系统虽然同源(都源于 Fedora/RPM),但已经分道扬镳。
  • 默认包管理器:OpenEuler 及其衍生版本(如 AnolisOS)已经全面拥抱 DNF 作为下一代包管理器。DNF 是 YUM 的一个分支和现代化改进版,解决了 YUM 的一些性能、依赖解析和插件架构上的问题,是目前 Fedora、RHEL 8+ 及后续版本的默认选择。
  • 包名的演变:由于默认管理器变成了 DNF,与之配套的工具集也相应地被 dnf-plugins-core 所取代。你试图在 OpenEuler 的源里找一个来自“竞争对手”(YUM 生态)的核心工具包,自然是找不到的。

解决方案就非常明确了:**放弃寻找 yum-utils,转而安装和使用 DNF 的对应工具 dnf-plugins-core

openEuler上面基本都是可以直接使用yumdownloader命令的,当然也可以使用dnf下载离线包的命令

dnf install -y dnf-plugins-core 或者 yum install -y dnf-plugins-core

安装成功后,你会看到一系列 DNF 插件被安装,例如:

  • config-manager: 用于管理仓库的启用和禁用。这对应于 yum-utils 里的 yum-config-manager。
  • download-only: 用于只下载不安装。这对应于 yum-utils 里的yumdownloader。
  • leaves: 用于查找系统中孤立的、没有被其他包依赖的包。
  • 等等...

问题

原因

解决方案

在 OpenEuler 中找不到yum-utils

OpenEuler 默认使用dnf作为包管理器,yum-utils是yum生态的工具,已被dnf-plugins-core取代。

安装并使用 OpenEuler 生態中的对应工具:**dnf-plugins-core**。

核心命令

yum-utils

dnf-plugins-core

下载工具

yumdownloader

dnf install --downloadonly --downloadir=...

源管理工具

yum-config-manager

dnf config-manager --add-repo ...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 20:01:14

响应式滚动动画设计:tri/trigger在移动设备上的最佳实践

响应式滚动动画设计:tri/trigger在移动设备上的最佳实践 【免费下载链接】trigger A library for creating scroll-based animation with HTML attributes and CSS variables. 项目地址: https://gitcode.com/gh_mirrors/tri/trigger tri/trigger是一款强大的…

作者头像 李华
网站建设 2026/9/24 19:32:09

终极Gobbledegook开发手册:BlueZ D-Bus接口与GATT特性实现

终极Gobbledegook开发手册:BlueZ D-Bus接口与GATT特性实现 【免费下载链接】gobbledegook Im a firm believer that a maintainer should be, at least in some part, a consumer of the thing theyre maintaining. I built GGK for a personal project. That proje…

作者头像 李华
网站建设 2026/9/24 19:33:40

吉他音色推荐系统开发报告

吉他音色推荐系统开发报告 目录 系统概述 技术架构设计 数据准备与处理 关键词提取与关联分析 推荐算法实现 系统接口设计 示例报告 可扩展性说明 系统测试与验证 总结与展望 附录 1. 系统概述 1.1 项目背景 吉他音色塑造是吉他演奏中至关重要的环节,传统上依赖经验丰富的音…

作者头像 李华
网站建设 2026/9/24 19:45:07

科研智能体平台设计与实现:社科类研究支持系统

科研智能体平台设计与实现:社科类研究支持系统 1. 引言 1.1 研究背景与意义 在社会科学研究领域,特别是德语教学论、继续教育和中德文化交流方向,研究人员面临着日益增长的工作压力和研究复杂性。传统的科研工作流程通常涉及大量重复性任务,如文献收集与整理、数据清洗与…

作者头像 李华