DNF命令详解

📅 发布时间:2026/7/12 22:17:29 👁️ 浏览次数:
DNF命令详解
1、概述DNFDandified YUM是一个在基于 Red Hat 的 Linux 发行版如 Fedora、CentOS、RHEL上用于管理软件包的包管理器。它是 YUM 的下一代版本提供了更多功能和改进。RHEL8中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf原有的yum命令仅为dnf的软链接当然依旧可以使用的。dnf源文件所在目录依旧为/etc/yum.repos.d/下但官方在发布Beta版本时并没有为此系统自带源文件需要我们自行下载准备。[rootkwephis47629719 bin]# cat /etc/dnf/dnf.conf [main] gpgcheck1 installonly_limit3 clean_requirements_on_removeTrue bestTrue skip_if_unavailableFalse sslverifyFalse [rootkwephis47629719 bin]# cd /etc/yum.repos.d/ [rootkwephis47629719 yum.repos.d]# ll total 4.0K -rw-r--r--. 1 root root 1.7K Jan 29 2022 openEuler.repo [rootkwephis47629719 yum.repos.d]# vi openEuler.repo [rootkwephis47629719 yum.repos.d]# echo openEuler.repo [rootkwephis47629719 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 [rootkwephis47629719 yum.repos.d]# cat /etc/os-release NAMEopenEuler VERSION22.03 LTS IDopenEuler VERSION_ID22.03 PRETTY_NAMEopenEuler 22.03 LTS ANSI_COLOR0;31 [rootkwephis47629719 yum.repos.d]# vi openEuler.repo [rootkwephis47629719 yum.repos.d]# dnf clean all 0 files removed [rootkwephis47629719 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. [rootkwephis47629719 yum.repos.d]#2、dnf常用命令介绍语法基本和之前的yum命令没啥区别。一般情况下操作系统中会存在两个dnf命令分别是dnf和dnf-3。[rootkwephis47629719 etc]# dnf dnf dnf-3但是本质上来说都是用的dnf-3因为在执行文件中dnf命令创建了软连接指向dnf-3[rootkwephis47629719 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、安装命令# 安装软件包[rootkwephis47629719 ~]# 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!# 重新安装[rootkwephis47629719 ~]# 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 update2.3、删除软件包# 删除软件包 dnf remove # 删除不需要的依赖项 dnf autoremove2.4、查询操作# 查询软件包 dnf search 关键字 [rootkwephis47629719 ~]# dnf search bash# 查询所有已经安装的软件包 dnf list installed 或者 dnf list installed | grep bash [rootkwephis47629719 ~]# 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 provides2.4、dnf 常用选项选项说明-y自动回答yes-q安静模式减少输出-v详细输出--refresh在操作前刷新仓库元数据--nogpgcheck禁用 GPG 签名检查--skip-broken跳过有问题的软件包--best尝试安装最佳可用版本3、dnf配置文件dnf 的主要配置文件位于/etc/dnf/dnf.conf常见的配置项包括[main] gpgcheck1 # 是否检查GPG签名 installonly_limit3 # 保留的内核版本数量 clean_requirements_on_removeTrue # 删除时清理依赖 bestTrue # 总是尝试安装最佳版本dnf的配置文件跟yum的配置文件配置内容相同一般修改了yum.conf配置文件dnf.conf文件就自动修改了因为yum.conf文件是一个软链接文件[rootkwephis47629719 ~]# ll /etc/yum.conf lrwxrwxrwx 1 root root 12 Sep 6 2023 /etc/yum.conf - dnf/dnf.conf [rootkwephis47629719 ~]#DNF下载离线安装包下面以下载docker离线安装包为例进行操作演示我们的目标是为 Docker CE 下载所有必要的 RPM 包以便在没有网络连接的服务器上进行离线安装。这些包包括docker-cedocker-ce-clicontainerd.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--setopttsflagstest,dontinstall: 这个参数组合非常强大。tsflagstest: DNF 的 ts (transaction script) 机制会给 RPM 包打上标记如 test、空代表正常、dontinstall 等。tsflagstest 强制 DNF 将所有下载的包标记为 test 包这样可以防止它们在后续导入后被意外执行 dnf update 更新。tsflagsdontinstall: 这个标记会阻止 DNF 在导入这些 RPM 后认为它们是“已安装”的。综合效果这两个标记可以确保你导入的离线 RPM 包包池干净并被 DNF 识别为“外部安装”的而不是由 DNF 管理的。这是进行离线安装时的最佳实践。dnf install --downloadonly --downloadir./ --setopttsflagstest,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 root192.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 -ylocalinstall 命令非常智能它会查看当前目录下的 repodata。分析要安装的包及其依赖。在当前目录中找到所有满足依赖的 RPM 包。按照正确的依赖顺序依次安装它们。FAQ1、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-coreopenEuler上面基本都是可以直接使用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-utilsOpenEuler 默认使用dnf作为包管理器yum-utils是yum生态的工具已被dnf-plugins-core取代。安装并使用 OpenEuler 生態中的对应工具**dnf-plugins-core**。核心命令yum-utilsdnf-plugins-core下载工具yumdownloaderdnf install --downloadonly --downloadir...源管理工具yum-config-managerdnf config-manager --add-repo ...