Linux dnf命令

什么是dnf命令?

dnf(Dandified YUM)是Fedora、RHEL 8、CentOS 8等现代Linux发行版中的下一代软件包管理器。它是yum的下一代替代品,使用libsolv进行依赖解析,提供更好的性能、更丰富的API和更好的用户体验。

版本支持: dnf是Fedora 18+、RHEL 8+、CentOS 8+的默认包管理器。在较早的系统上,你可能需要安装dnf来替代yum。

dnf与yum的区别

特性 dnf yum
依赖解析器 使用libsolv(C语言库),更快速、更可靠 使用内部Python解析器,较慢
内存使用 内存占用更少 内存占用较多
API支持 提供更丰富的API,便于扩展 API相对有限
历史记录 提供更详细的操作历史 历史记录较简单
自动删除 自动删除不需要的依赖包(默认开启) 需要手动清理
插件架构 更好的插件支持 插件架构较旧

安装dnf(如果需要)

在CentOS 7/RHEL 7上安装dnf:

# 首先安装EPEL仓库 yum install epel-release # 然后安装dnf yum install dnf

验证dnf是否安装成功:

dnf --version

语法格式

dnf [选项] [命令] [包名]

常用命令

命令 描述 示例
install 安装软件包 dnf install nginx
update 更新软件包 dnf update nginx
upgrade 升级系统(等同dnf update) dnf upgrade
remove 卸载软件包 dnf remove nginx
search 搜索软件包 dnf search python3
info 查看软件包信息 dnf info nginx
list 列出软件包 dnf list installed
autoremove 自动删除不需要的依赖 dnf autoremove
clean 清理缓存 dnf clean all
makecache 生成缓存 dnf makecache
history 查看操作历史 dnf history
groupinstall 安装软件包组 dnf groupinstall "Development Tools"

安装软件示例

安装Nginx Web服务器:

# 安装Nginx sudo dnf install nginx # 启动Nginx服务 sudo systemctl start nginx # 设置开机启动 sudo systemctl enable nginx

安装特定版本的软件包:

# 查看可用版本 dnf list --available nginx # 安装特定版本 sudo dnf install nginx-1.20.1

从指定仓库安装:

# 启用EPEL仓库 sudo dnf install epel-release # 从EPEL仓库安装软件 sudo dnf --enablerepo=epel install htop

更新和升级

更新所有软件包:

# 检查可用更新 sudo dnf check-update # 更新所有软件包 sudo dnf update

更新单个软件包:

sudo dnf update nginx

系统升级(版本升级):

# 注意:这可能会升级到新的主要版本 sudo dnf system-upgrade download --refresh sudo dnf system-upgrade reboot
重要: 在生产环境中执行更新前,请确保有完整的备份,并在测试环境中验证更新。

卸载软件

卸载软件包:

# 卸载软件包 sudo dnf remove nginx

自动删除不需要的依赖:

# 查看将被自动删除的包 sudo dnf autoremove --assumeno # 执行自动删除 sudo dnf autoremove

完全删除软件包及其配置文件:

# 删除软件包和配置文件 sudo dnf erase nginx

搜索软件包

搜索软件包:

# 搜索包含"python3"的包 dnf search python3 # 使用通配符搜索 dnf search "php*"

获取软件包详细信息:

# 查看软件包信息 dnf info nginx # 查看软件包的依赖关系 dnf repoquery --requires nginx

列出软件包

列出已安装的软件包:

# 列出所有已安装的包 dnf list installed # 列出特定名称的已安装包 dnf list installed *nginx*

列出可用的软件包:

# 列出所有可用包 dnf list available # 列出可更新的包 dnf list updates

列出仓库信息:

# 列出所有仓库 dnf repolist # 列出启用的仓库 dnf repolist enabled # 列出禁用的仓库 dnf repolist disabled

软件包组操作

列出软件包组:

# 列出所有包组 dnf grouplist # 列出已安装的包组 dnf grouplist installed

安装软件包组:

# 安装开发工具组 sudo dnf groupinstall "Development Tools" # 安装Web服务器组 sudo dnf groupinstall "Web Server"

查看包组信息:

# 查看包组信息 dnf groupinfo "Development Tools"

操作历史

dnf提供了强大的历史记录功能,可以查看、撤销和重做操作。

查看历史记录:

# 查看所有历史记录 dnf history # 查看特定操作的详细信息 dnf history info 5 # 查看特定时间之后的历史 dnf history --since "2023-01-01"

撤销操作:

# 撤销最近一次操作 sudo dnf history undo last # 撤销特定ID的操作 sudo dnf history undo 5

清理缓存

清理所有缓存:

sudo dnf clean all

清理特定类型的缓存:

# 清理包缓存 sudo dnf clean packages # 清理元数据缓存 sudo dnf clean metadata # 清理过期缓存 sudo dnf clean expire-cache

生成新的缓存:

sudo dnf makecache

常见问题

1. 更新仓库缓存:sudo dnf makecache
2. 检查仓库是否启用:dnf repolist
3. 启用所需仓库:sudo dnf config-manager --set-enabled repository_name
4. 安装EPEL仓库:sudo dnf install epel-release

1. 在CentOS 7/RHEL 7上安装dnf:sudo yum install dnf
2. 测试dnf命令:dnf --version
3. 可以设置别名:alias yum='dnf'alias yum='dnf'
4. 注意:某些yum插件可能需要对应的dnf插件

1. 先检查将被删除的包:sudo dnf autoremove --assumeno
2. 标记重要包为"用户安装":sudo dnf mark install package_name
3. 禁用自动删除功能:sudo vim /etc/dnf/dnf.conf 添加 clean_requirements_on_remove=false
4. 手动指定保留的包

常用选项

选项 描述
-y, --assumeyes 自动回答yes,跳过确认提示
-q, --quiet 安静模式,减少输出
-v, --verbose 详细输出
--enablerepo=repo 启用指定的仓库
--disablerepo=repo 禁用指定的仓库
--nogpgcheck 跳过GPG签名检查
--best 尝试安装最佳可用版本
--allowerasing 允许删除冲突的包

性能优化

配置dnf以提高性能:

# 编辑dnf配置文件 sudo vim /etc/dnf/dnf.conf # 添加以下优化配置 fastestmirror=true max_parallel_downloads=10 deltarpm=true