自 Red Hat Enterprise Linux (RHEL) 8 发布以来,DNF(Dandified YUM)已正式取代 YUM(Yellowdog Updater, Modified)成为默认的包管理器,RHEL 9 继续并深化了这一变革。对于系统管理员和开发人员来说,熟练掌握 DNF 是有效管理 RHEL 9 系统的关键。
DNF 的历史:从 YUM 到 DNF 的演变DNF 的诞生并非一蹴而就,而是对 YUM 的一次重大革新,旨在解决其长期存在的一些核心问题。
YUM 的辉煌与瓶颈: YUM 作为 RHEL 及其衍生发行版(如 CentOS)长期以来的默认包管理器,为无数用户提供了稳定可靠的软件安装和管理体验。然而,随着软件仓库的日益庞大和依赖关系的日趋复杂,YUM 的一些缺点也逐渐暴露,主要包括:性能问题: 尤其是元数据处理和依赖关系解析方面,速度较慢。高内存消耗: 在处理大型事务时,内存占用显著。固化的 API: 其内部 API 不够清晰和强大,限制了工具和插件的进一步发展。DNF 的登场: 为了克服这些挑战,Fedora 项目(RHEL 的上游社区)于 2013 年在 Fedora 18 中引入了 DNF 作为一个测试性的替代品。DNF 的核心目标是:提升性能: 采用全新的依赖解析器 libsolv,这是一个由 SUSE 开发的高效库,能够更快、更准确地解决复杂的依赖关系。降低内存占用: 优化了内存管理机制。提供现代化的 API: 为开发者提供稳定、文档齐全的 Python 和 C++ API,便于构建更强大的工具。经过几年的发展和完善,DNF 在 Fedora 22 中正式成为默认包管理器。由于其出色的表现,Red Hat 决定在 RHEL 8 中用 DNF 全面取代 YUM。在 RHEL 8 及更高版本中,yum 命令实际上是一个指向 dnf 的符号链接,以确保向后兼容性,让老用户能够平滑过渡。
简单来说,DNF 是 YUM 的正统继承者,它更快、更高效,并为未来的发展奠定了坚实的基础。
时代
主角
光环
槽点
YUM 时代
老牌英雄
稳定可靠
慢、吃内存、API 僵化
DNF 时代
天选之子
• ⚡ libsolv 极速解析• 低内存• 现代 API
“真香”
DNF 核心概念与优势事务性操作: DNF 的所有操作(安装、更新、删除)都是事务性的。这意味着要么所有操作都成功完成,要么系统将回滚到操作开始之前的状态,保证了系统的完整性。模块化 (Modularity): 这是 RHEL 8 引入的一个重要特性,DNF 提供了强大的支持。模块化允许在同一个操作系统上提供和管理不同版本的应用程序(例如,同时提供 Python 3.6 和 3.9 的支持),而不会产生依赖冲突。增强的依赖解析: 得益于 libsolv,DNF 在处理复杂的依赖场景时表现得更加智能和可靠。与 YUM 的兼容性: DNF 保持了与 YUM 在命令行选项上的高度兼容性,大多数常用的 yum 命令可以直接替换为 dnf。DNF 实用命令详解以下是 DNF 最常用和最重要的命令,涵盖了从软件搜索到系统更新的方方面面。
1. 软件包管理场景
Emoji 速记
命令示例
搜索软件
dnf search
dnf search nginx
安装软件
dnf install
sudo dnf install nginx
️ 删除软件
dnf remove
sudo dnf remove nginx
⬆️ 全面升级
dnf upgrade
sudo dnf upgrade
重装修复
dnf reinstall ️
sudo dnf reinstall nginx
查看详情
dnf info
dnf info nginx
文件反向查询
dnf provides
dnf provides /usr/bin/htpasswd
列出已装
dnf list installed ✅
dnf list installed
列出仓库
dnf repolist
dnf repolist
清理缓存
dnf clean all
sudo dnf clean all
️ 历史记录
dnf history ️
dnf history
⏪ 撤销事务
dnf history undo ↩️
sudo dnf history undo 42
安装组
dnf group install
sudo dnf group install "Development Tools"
DNF 高级用法模块化 (Modularity)假设您需要安装 nodejs,但 RHEL 9 官方仓库可能同时提供了版本 16 和 18。您可以使用模块化功能来选择和管理特定版本。
列出可用模块及其流 (stream):dnf module list查看特定模块的详细信息:dnf module info nodejs启用并安装特定模块流:sudo dnf module enable nodejs:18 sudo dnf install nodejs切换模块流:如果需要从 nodejs:18 切换到 nodejs:16,首先需要重置当前模块。sudo dnf module reset nodejs sudo dnf module enable nodejs:16 sudo dnf distro-syncDNF 配置文件DNF 的主配置文件位于 /etc/dnf/dnf.conf。您可以在此文件中进行全局设置,例如默认安装行为、代理设置等。
仓库的配置文件通常位于 /etc/yum.repos.d/ 目录下,以 .repo 结尾。
在命令中临时禁用或启用仓库在执行单个命令时,您可以通过 --enablerepo 或 --disablerepo 选项临时启用或禁用某个仓库。
sudo dnf --enablerepo=epel install some-packagesudo dnf --disablerepo=epel upgrade结论DNF 不仅仅是 YUM 的一个新名字,它代表了 RHEL 包管理技术的巨大进步。凭借其卓越的性能、强大的功能集(尤其是历史记录和模块化)以及对现代软件生态的更好支持,DNF 已成为 RHEL 9 系统管理员不可或缺的工具。通过掌握本教程中介绍的命令和概念,您将能够更高效、更安全地管理您的 RHEL 9 系统。
转载请注明来自Sjyct,本文标题:《dnf保持游戏在线(💡 从零到专家RHEL 9 DNF 包管理器一站式通关指南)》
还没有评论,来说两句吧...