DNF软件包管理器简明指南

DNF是现在大多数基于RPM的Linux发行版上的默认包管理系统。

DNF从存储库下载软件包,安装、卸载和更新软件包。它为您要安装、更新或删除的软件包执行自动依赖关系解析,并安装满足依赖性要求的所有软件包。

在Fedora上,DNF自Fedora 22以来一直是默认的软件包管理器。在RHEL 8.x上,它现在是默认的软件包管理器。

DNF通过在GPG签名的软件包上启用GPG签名验证,提供安全的软件包管理。DNF不会安装未使用正确密钥签名的软件包。

为了向后兼容,RHEL 8.x也有一个YUM命令,但它是指向DNF的链接。

为什么选择DNF?

DNF或Dandified YUM是下一代YUM。与YUM相比,DNF具有更好的内存利用率,改进的依赖关系管理能力,并且可以在Python 2和Python 3上运行。

使用DNF进行软件包管理

您必须具有超级用户权限才能使用DNF命令来安装、更新或删除软件包。以下是系统管理员经常使用的一组DNF命令。

搜索软件包

要搜索已安装或在所有存储库中可用的软件包,请使用

$ sudo dnf search package_name

例如,要搜索软件包Nmap

$ sudo dnf search nmap
Last metadata expiration check: 0:05:14 ago on Tue 02 Jun 2020 08:38:09 PM UTC.
==================================== Name Exactly Matched: nmap =====================================
nmap.x86_64 : Network exploration tool and security scanner
=================================== Name & Summary Matched: nmap ====================================
nmap-ncat.x86_64 : Nmap's Netcat replacement

列出软件包

要查看所有已安装和可用的软件包列表:

$ sudo dnf list all
Installed Packages
GConf2.x86_64                                        3.2.6-22.el8                                      @rhui-rhel-8-for-x86_64-appstream-rhui-rpms
NetworkManager.x86_64                                1:1.22.8-4.el8                                    @anaconda
NetworkManager-libnm.x86_64                          1:1.22.8-4.el8                                    @anaconda
NetworkManager-team.x86_64                           1:1.22.8-4.el8                                    @anaconda
NetworkManager-tui.x86_64                            1:1.22.8-4.el8 
...

要列出所有已安装的软件包:

$ sudo dnf list installed

Installed Packages
NetworkManager.x86_64             1:1.22.8-4.el8          @anaconda                                  
NetworkManager-libnm.x86_64       1:1.22.8-4.el8          @anaconda                                  
NetworkManager-team.x86_64        1:1.22.8-4.el8          @anaconda                                  
NetworkManager-tui.x86_64         1:1.22.8-4.el8          @anaconda                                  
PackageKit.x86_64                 1.1.12-4.el8            @AppStream                                 
PackageKit-glib.x86_64            1.1.12-4.el8            @AppStream                                 
WALinuxAgent.noarch               2.2.38-1.el8            @rhui-rhel-8-for-x86_64-appstream-rhui-rpms
abattis-cantarell-fonts.noarch    0.0.25-4.el8            @AppStream                                 
acl.x86_64                        2.2.53-1.el8            @anaconda 
...                                                                      

要列出所有可用的软件包:

$ sudo dnf list available

最后的元数据过期检查:1:15:10前于2020年6月2日下午05:37:11 UTC。
可用的软件包
CUnit.i686 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms
CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms
CUnit-devel.i686 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms
CUnit-devel.x86_64 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms

例如,要列出所有可用的MySQL软件包:

$ sudo dnf list available “mysql*”

最后的元数据过期检查:1:17:04前于2020年6月2日下午05:37:11 UTC。
可用的软件包
mysql.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-common.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-devel.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-errmsg.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-libs.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-server.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-test.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms

显示软件包信息

要显示有关软件包的信息:

$ sudo dnf info package_name

例如,要显示有关httpd服务器的信息:

$ sudo dnf info httpd

最后的元数据过期检查:0:15:04前于2020年6月1日晚上11:23:11 UTC。
可用的软件包
Name : httpd
Version : 2.4.37
Release : 21.module+el8.2.0+5008+cca404a3
Architecture : x86_64
Size : 1.4 M
Source : httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.src.rpm
Repository : rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Summary : Apache HTTP Server
URL : https://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.

安装软件包

安装单个软件包

要安装单个软件包及其所有未安装的依赖项:

$ sudo dnf install package_name

例如,要安装Nginx,请运行:

$ sudo dnf install nginx

这将安装Nginx及其所有未安装的依赖项要求。

安装多个软件包

您还可以通过将软件包名称添加到此命令中来安装多个软件包。例如,要安装Nginx、PHP和MySQL服务器,请输入:

$ sudo dnf install nginx php mysql-server
已解决的依赖关系。
===========================================================================================
 软件包          架构   版本             仓库                                  大小
===========================================================================================
正在安装:
 mysql-server     x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms  22 M
 nginx            x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k
 php              x86_64 7.2.24-1.module+el8.2.0+4601+7c76a223
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.5 M
正在安装依赖关系:
 apr              x86_64 1.6.3-9.el8      rhui-rhel-8-for-x86_64-appstream-rhui-rpms 125 k
 apr-util         x86_64 1.6.1-6.el8      rhui-rhel-8-for-x86_64-appstream-rhui-rpms 105 k
 gd               x86_64 2.2.5-6.el8      rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k
 httpd            x86_64 2.4.37-21.module+el8.2.0+5008+cca404a3
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.4 M
 httpd-filesystem noarch 2.4.37-21.module+el8.2.0+5008+cca404a3
...

按二进制文件名安装软件包

如果您知道要安装的二进制文件的名称,但不知道软件包的名称,甚至只知道二进制文件名也足以安装相关的软件包。

例如,如果您输入:

$ sudo dnf install /usr/sbin/named
上次元数据到期检查:1小时21分钟25秒前,于2020年6月2日星期二下午05:37:11 UTC。
已解决依赖关系。
=====================================================================================================
 软件包      架构        版本                    仓库                                      大小
=====================================================================================================
安装中:
 bind        x86_64      32:9.11.13-5.el8_2      rhui-rhel-8-for-x86_64-appstream-rhui-rpms      2.1 M

事务总结
=====================================================================================================
安装  1 Package

总下载大小:2.1 M
已安装大小:4.5 M
是否确定 [y/N]:

DNF会搜索并找到提供/usr/sbin/named的软件包,并提示您安装它。

查找文件所属的软件包

如果您知道文件名并想找到提供它的软件包(已安装或未安装),请使用:

$ sudo dnf provides file_name

例如,要找到提供DNS服务器二进制文件named的软件包,请使用:

$ sudo dnf provides named
上次元数据到期检查:1小时27分钟30秒前,于2020年6月1日星期一晚上11:23:11 UTC。
bind-32:9.11.4-16.P2.el8.x86_64 : 
The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) : 
server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Matched from: Filename : 
/usr/sbin/named

卸载软件包

要卸载软件包:

sudo dnf remove package_name

但是请注意,DNF无法在不删除依赖于它的软件包的情况下删除软件包。要删除软件包nmap,请使用:

$ sudo dnf remove nmap
依赖关系已解决。
=====================================================================================================
 软件包                  架构        版本                    软件源                              大小
=====================================================================================================
Removing:
 nmap                x86_64         2:7.70-5.el8       @rhui-rhel-8-for-x86_64-appstream-rhui-rpms         24 M

事务摘要
=====================================================================================================
Remove  1 Package

已释放空间: 24 M
是否确定 [y/N]:

管理软件包组

软件包组是一组密切相关且具有共同目的的软件包。安装软件包组可以节省大量时间。

列出所有软件包组

要列出所有软件包组,请执行以下操作:

$ sudo dnf group list
可用的环境组:
   Server with GUI
   Server
   Workstation
   Custom Operating System
   Virtualization Host
已安装的环境组:
   Minimal Install
已安装的组:
   Security Tools
   Container Management
可用的组:
   Legacy UNIX Compatibility
   Development Tools
   Scientific Support
   .NET Core Development
   Graphical Administration Tools
   Headless Management
   RPM Development Tools
   Network Servers
   System Tools
   Smart Card Support

列出组中的所有软件包

要列出组中的所有软件包,请执行以下操作:

$ sudo dnf group info package_name

例如,要查看 Security Tools 组中的软件包:

$ sudo dnf group info “security tools”
组: Security Tools
描述: 完整性和信任验证的安全工具。
默认软件包:
   scap-security-guide
可选软件包:
   aide
   hmaccalc
   openscap
   openscap-engine-sce
   openscap-utils
   scap-security-guide-doc
   scap-workbench
   tpm-quote-tools
   tpm-tools
   tpm2-tools
   trousers

安装一个软件包组

安装一个软件包组将安装组中的所有软件包。使用以下命令安装软件包组:

sudo dnf group install package_group_name

例如,要安装 “网络服务器” 组:

$ sudo dnf group install “Network Servers”
上次元数据过期检查: 1小时40分钟14秒前,于 2020年6月3日星期三下午05:53:11 UTC。
依赖关系已解决。
===========================================================================================
 软件包                  架构        版本                    软件源                              大小
===========================================================================================
正在安装组:
 Network Servers                                                                          

事务摘要
===========================================================================================

是否确定 [y/N]:

删除一个软件包组

要删除一个软件包组,请执行以下操作:

sudo dnf remove package_name

因此,要删除 “Security Tools” 软件包组:

$ sudo dnf group remove "security tools"

依赖已解决。
=====================================================================================================
包 架构 版本 仓库 大小
=====================================================================================================
移除:
scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M
移除未使用的依赖关系:
GConf2 x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 6.3 M
libxslt x86_64 1.1.32-4.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 734 k
openscap x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 58 M
openscap-scanner x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 137 k
xml-common noarch 0.6.3-50.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 78 k
移除组:
Security Tools

事务摘要
=====================================================================================================
移除 6 个软件包

释放空间: 247 M
确定要继续吗 [y/N]: 

更新软件包

更新所有软件包

要更新所有软件包及其依赖关系,可以使用以下命令:

$ sudo dnf upgrade
上次元数据到期检查: 1:09:31 前,于 2020 年 6 月 2 日星期二 20:38:09 UTC。
依赖关系已解决。
无可用更新。
完成!

这将安装所有可用的更新。dnf upgrade 和 dnf update 具有相同的效果,但推荐使用 dnf upgrade。

更新单个软件包

要更新单个软件包,请运行以下命令:

$ sudo dnf upgrade package_name

例如,要更新 python 软件包:

$ sudo dnf upgrade python

结论

学习 DNF 可能会令人 rewarding,因为它通常是执行系统管理任务的最快方式。如果有兴趣学习 RHEL 8,则可以查看此链接_4。

类似文章