dnf命令详解
DNF(Dandified YUM)命令详解
DNF 是 Rocky Linux、Fedora、CentOS 8+ 等系统的默认包管理工具,作为 YUM 的升级版,提供更快的依赖解析和更友好的交互。以下是 DNF 的核心用法及常见场景:
一、基础语法
dnf [选项] <子命令> [软件包/参数]
二、常用子命令与功能
1. 软件包管理
命令 | 说明 |
---|---|
dnf install <包名> | 安装指定软件包(支持通配符,如 nginx* ) |
dnf remove <包名> | 卸载软件包(同时删除依赖) |
dnf reinstall <包名> | 重新安装软件包 |
dnf update | 更新所有可升级的软件包 |
dnf update <包名> | 更新指定软件包 |
dnf check-update | 检查可更新的软件包(不执行更新) |
2. 查询与搜索
命令 | 说明 |
---|---|
dnf search <关键词> | 按名称或描述搜索软件包 |
dnf list [installed|all] | 列出仓库中所有/已安装的软件包 |
dnf info <包名> | 显示软件包详细信息(版本、依赖、仓库来源等) |
dnf provides <文件路径> | 查找提供指定文件或命令的软件包 |
dnf repoquery <选项> | 高级查询(如列出软件包文件:repoquery -l nginx ) |
3. 仓库管理
命令 | 说明 |
---|---|
dnf repolist [all] | 列出已启用的仓库(加 all 显示全部) |
dnf config-manager --add-repo <URL> | 添加新仓库(如 Docker 官方源) |
dnf config-manager --disable <仓库ID> | 禁用指定仓库 |
dnf config-manager --enable <仓库ID> | 启用指定仓库 |
4. 系统维护
命令 | 说明 |
---|---|
dnf clean all | 清理下载的软件包和元数据缓存 |
dnf autoremove | 删除不再需要的依赖包 |
dnf history [undo <事务ID>] | 查看操作历史或回滚指定事务(如 dnf history undo 5 ) |
dnf group list | 列出软件包组 |
dnf group install "开发工具" | 安装软件包组(如开发环境) |
5. 高级功能
命令 | 说明 |
---|---|
dnf module list | 列出可用模块(如 PHP、MySQL 的不同版本) |
dnf module enable <模块> | 启用模块(如 dnf module enable mysql:8.0 ) |
dnf downgrade <包名> | 降级软件包到旧版本 |
dnf --enablerepo=<仓库ID> | 临时启用某个仓库执行操作(如 dnf --enablerepo=epel install htop ) |
三、配置优化
1. 国内镜像加速
修改仓库配置文件(如 /etc/yum.repos.d/Rocky-*.repo
)替换为阿里云或清华源:
sudo sed -i 's|baseurl=.*rocky|baseurl=https://mirrors.aliyun.com/rocky|g' /etc/yum.repos.d/Rocky-*.repo
sudo dnf clean all && sudo dnf makecache
2. 配置文件路径
主配置:/etc/dnf/dnf.conf
可调整并行下载数、超时时间等参数,例如:
[main]
max_parallel_downloads=10
timeout=30
四、常见问题与解决
1. 依赖冲突
-
现象:安装时提示依赖不兼容。
-
解决:
# 查看冲突详情 dnf deplist <包名> # 手动安装指定版本依赖 dnf install <依赖包名>-<版本>
2. GPG 密钥验证失败
-
现象:
GPG key retrieval failed
。 -
解决:手动导入密钥或跳过验证(不推荐):
sudo rpm --import <密钥URL> # 例如:https://nginx.org/keys/nginx_signing.key # 或临时跳过 dnf install --nogpgcheck <包名>
3. 网络问题
-
现象:无法连接仓库。
-
解决:
-
检查网络配置:
ping mirrors.aliyun.com
-
禁用防火墙或 SELinux(临时):
sudo systemctl stop firewalld sudo setenforce 0
-
五、实用示例
1. 安装 Nginx 并启用服务
sudo dnf install nginx
sudo systemctl enable --now nginx
2. 查询文件所属包
dnf provides /usr/sbin/nginx
3. 回滚操作
# 查看历史记录
dnf history
# 回滚事务 ID 为 10 的操作
dnf history undo 10
六、总结
场景 | 推荐命令 |
---|---|
快速安装软件 | dnf install <包名> |
清理系统垃圾 | dnf autoremove && dnf clean all |
安全更新系统 | dnf update --security |
调试依赖问题 | dnf repoquery --requires <包名> |
掌握 DNF 命令可高效管理系统软件,建议结合 man dnf
查阅完整手册。