dnf命令

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 相似的命令行接口,但有一些重要的区别:

  1. 性能改进:DNF 使用 libsolv 库进行依赖解析,提供更快的性能和更低的内存使用
  2. API:DNF 提供了一个稳定的 API,便于扩展
  3. 模块化支持:DNF 原生支持模块化内容
  4. 更严格的包规范:DNF 对包规范的要求更严格
  5. 默认行为:某些命令的默认行为有所不同,例如clean命令
  6. 插件架构:DNF 使用不同的插件架构
  7. 依赖处理:DNF 在处理依赖关系时更加严格和一致

提示 #

  • 在 RHEL 8/CentOS 8 及更高版本中,yum命令实际上是指向dnf的符号链接
  • 使用dnf-automatic可以配置自动更新
  • dnf history命令可以帮助跟踪系统更改并在需要时回滚
  • 使用dnf config-manager可以轻松管理仓库而无需手动编辑配置文件
  • 模块化内容允许在同一系统上安装不同版本的软件,这对开发环境特别有用
  • 使用dnf versionlock插件可以锁定特定包的版本,防止意外更新
  • dnf repoquery命令提供了强大的查询功能,可以替代旧的repoquery工具
  • 在生产环境中执行重大更改前,先在测试系统上验证
  • 使用dnf updateinfo可以查看安全更新和 bug 修复的详细信息
  • 定期运行dnf clean alldnf makecache可以保持仓库元数据的最新状态