dnf 命令 #
dnf
(Dandified YUM)是 Fedora、RHEL 8/CentOS 8 及更高版本中的下一代包管理工具,它是 YUM 的替代品,提供了更好的性能、内存利用率和依赖解析。DNF 保持了与 YUM 相似的命令行接口,同时解决了 YUM 的一些技术问题。
语法 #
dnf [选项] 命令 [包...]
常用命令 #
命令 | 描述 |
---|---|
install |
安装包 |
upgrade |
升级包 |
check-update |
检查可用更新 |
upgrade-minimal |
仅升级安全更新和 bug 修复 |
remove |
移除包 |
autoremove |
移除不再需要的依赖包 |
list |
列出包 |
search |
搜索包 |
info |
显示包信息 |
provides |
查找提供特定文件的包 |
clean |
清理缓存 |
makecache |
下载并缓存元数据 |
group |
显示、安装或移除包组 |
repolist |
列出配置的仓库 |
history |
查看或操作事务历史 |
reinstall |
重新安装包 |
downgrade |
降级包 |
module |
管理模块化内容 |
config-manager |
管理 DNF 配置选项和仓库 |
builddep |
安装构建依赖 |
system-upgrade |
系统版本升级 |
repoquery |
查询包和仓库信息 |
updateinfo |
显示更新通知 |
常用选项 #
选项 | 描述 |
---|---|
-y, --assumeyes |
自动回答是,不提示确认 |
-q, --quiet |
静默输出 |
-v, --verbose |
详细输出 |
--enablerepo=仓库 |
启用指定的仓库 |
--disablerepo=仓库 |
禁用指定的仓库 |
--exclude=包 |
排除指定的包 |
--disableexcludes |
禁用排除 |
--nogpgcheck |
禁用 GPG 签名检查 |
--downloadonly |
仅下载不安装 |
--downloaddir=目录 |
指定下载目录 |
--noplugins |
禁用所有插件 |
--skip-broken |
跳过有问题的包 |
--showduplicates |
显示所有版本的包 |
--setopt=选项=值 |
设置任意配置选项 |
--refresh |
刷新过期的元数据 |
--best |
尝试安装最佳匹配的包版本 |
--allowerasing |
允许移除已安装的包以解决依赖关系 |
--nobest |
不限制为最佳匹配的包版本 |
--releasever=版本 |
设置发行版本 |
--security |
包含安全更新 |
--bugfix |
包含 bug 修复更新 |
--cacheonly |
仅使用缓存,不下载 |
常见用法 #
1. 安装包 #
dnf install package_name
例如:
dnf install httpd
2. 安装多个包 #
dnf install package1 package2 package3
3. 升级特定包 #
dnf upgrade package_name
4. 升级所有包 #
dnf upgrade
5. 检查可用更新 #
dnf check-update
6. 移除包 #
dnf remove package_name
7. 移除不再需要的依赖包 #
dnf autoremove
8. 搜索包 #
dnf search keyword
例如:
dnf search "web server"
9. 显示包信息 #
dnf info package_name
10. 列出所有已安装的包 #
dnf list installed
11. 列出所有可用的包 #
dnf list available
12. 列出可更新的包 #
dnf list updates
13. 查找提供特定文件的包 #
dnf provides /path/to/file
例如:
dnf provides /usr/bin/htpasswd
14. 清理缓存 #
dnf clean all
这将清理所有缓存的包和元数据。
15. 重建缓存 #
dnf makecache
16. 列出包组 #
dnf group list
17. 安装包组 #
dnf group install "Group Name"
例如:
dnf group install "Development Tools"
18. 列出已启用的仓库 #
dnf repolist
19. 列出所有仓库(包括禁用的) #
dnf repolist all
20. 查看事务历史 #
dnf history
高级用法 #
1. 模块化内容管理 #
DNF 引入了模块化内容的概念,允许安装不同版本的软件栈。
# 列出可用模块
dnf module list
# 启用模块流
dnf module enable module_name:stream
# 安装模块
dnf module install module_name:stream/profile
# 禁用模块
dnf module disable module_name
# 重置模块
dnf module reset module_name
例如:
# 列出可用的PHP模块
dnf module list php
# 启用PHP 7.4模块流
dnf module enable php:7.4
# 安装PHP 7.4及其开发配置文件
dnf module install php:7.4/development
2. 系统升级 #
DNF 可以用于升级整个系统到新版本:
# 安装系统升级插件
dnf install dnf-plugin-system-upgrade
# 下载新版本的包
dnf system-upgrade download --releasever=35
# 重启并应用升级
dnf system-upgrade reboot
3. 从特定仓库安装包 #
dnf --enablerepo=epel install package_name
这将从 EPEL 仓库安装包。
4. 排除特定包更新 #
dnf --exclude=package_name upgrade
5. 仅下载包不安装 #
dnf download package_name
或者:
dnf install --downloadonly --downloaddir=/path/to/directory package_name
6. 降级包到早期版本 #
dnf downgrade package_name
7. 列出包的依赖关系 #
dnf repoquery --requires package_name
8. 查看特定事务的详细信息 #
dnf history info transaction_id
9. 撤销特定事务 #
dnf history undo transaction_id
10. 重做特定事务 #
dnf history redo transaction_id
11. 安装特定版本的包 #
dnf install package_name-version
例如:
dnf install httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1
12. 显示包的所有可用版本 #
dnf list --showduplicates package_name
13. 只安装安全更新 #
dnf upgrade --security
14. 查看包的更新信息 #
dnf updateinfo
15. 管理仓库 #
# 添加仓库
dnf config-manager --add-repo=repository_url
# 启用仓库
dnf config-manager --enable repository
# 禁用仓库
dnf config-manager --disable repository
16. 安装构建依赖 #
dnf builddep package_name
或者:
dnf builddep package.spec
17. 使用重新安装 #
dnf reinstall package_name
18. 允许移除已安装的包以解决依赖关系 #
dnf install package_name --allowerasing
配置文件 #
DNF 的主要配置文件和目录:
/etc/dnf/dnf.conf
:主配置文件/etc/yum.repos.d/
:仓库配置文件目录(为了兼容性保留了 yum 的目录名)/var/cache/dnf/
:缓存目录/var/log/dnf.log
:日志文件
与 YUM 的区别 #
虽然 DNF 保持了与 YUM 相似的命令行接口,但有一些重要的区别:
- 性能改进:DNF 使用 libsolv 库进行依赖解析,提供更快的性能和更低的内存使用
- API:DNF 提供了一个稳定的 API,便于扩展
- 模块化支持:DNF 原生支持模块化内容
- 更严格的包规范:DNF 对包规范的要求更严格
- 默认行为:某些命令的默认行为有所不同,例如
clean
命令 - 插件架构:DNF 使用不同的插件架构
- 依赖处理:DNF 在处理依赖关系时更加严格和一致
提示 #
- 在 RHEL 8/CentOS 8 及更高版本中,
yum
命令实际上是指向dnf
的符号链接 - 使用
dnf-automatic
可以配置自动更新 dnf history
命令可以帮助跟踪系统更改并在需要时回滚- 使用
dnf config-manager
可以轻松管理仓库而无需手动编辑配置文件 - 模块化内容允许在同一系统上安装不同版本的软件,这对开发环境特别有用
- 使用
dnf versionlock
插件可以锁定特定包的版本,防止意外更新 dnf repoquery
命令提供了强大的查询功能,可以替代旧的repoquery
工具- 在生产环境中执行重大更改前,先在测试系统上验证
- 使用
dnf updateinfo
可以查看安全更新和 bug 修复的详细信息 - 定期运行
dnf clean all
和dnf makecache
可以保持仓库元数据的最新状态