DNF 包管理器快速指南

已发表: 2020-06-06

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

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

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

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

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

为什么是地下城?

DNF 或 Dandified YUM 是下一代 YUM。 与 YUM 相比,DNF 具有更好的内存利用率、改进的依赖管理以及使用 Python 2 和 Python 3 运行的能力。

使用 DNF 进行包管理

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

搜索包裹

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

$ sudo dnf search <em>package_name</em>

例如搜索包 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
 Last metadata expiration check: 1:15:10 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Available Packages 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*"
 Last metadata expiration check: 1:17:04 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Available Packages 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 <em>package_name </em>

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

 $ sudo dnf info httpd
 Last metadata expiration check: 0:15:04 ago on Mon 01 Jun 2020 11:23:11 PM UTC. Available Packages 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
 Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: 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 Installing dependencies: gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k jbigkit-libs x86_64 2.1-14.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 55 k ..

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

安装多个包

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

 $ sudo dnf install nginx php mysql-server
 Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: 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 Installing dependencies: 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
 Last metadata expiration check: 1:21:25 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Dependencies resolved. ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Installing: bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M Transaction Summary ===================================================================================================== Install 1 Package Total download size: 2.1 M Installed size: 4.5 M Is this ok [y/N]:

DNF搜索找到提供/usr/sbin/命名的包,提示安装。

查找哪个包拥有文件

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

 $ sudo dnf provides <em>file_name</em>

例如,要查找哪个包提供 named,DNS 服务器使用的二进制文件:

 $ sudo dnf provides named
 Last metadata expiration check: 1:27:30 ago on Mon 01 Jun 2020 11:23:11 PM 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 <em>package_name</em>

但要小心,DNF 无法在不删除依赖于它的包的情况下删除包。 要删除包 nmap 使用:

 $ sudo dnf remove nmap Dependencies resolved. ===================================================================================================== Package Architecture Version Repository Size ===================================================================================================== Removing: nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M Transaction Summary ===================================================================================================== Remove 1 Package Freed space: 24 M Is this ok [y/N]:

管理包组

包组是密切相关并服务于共同目的的包的集合。 安装一个包组就是安装一组包,节省很多时间。

列出所有包组

列出所有包组:

 $ sudo dnf group list
 Available Environment Groups: Server with GUI Server Workstation Custom Operating System Virtualization Host Installed Environment Groups: Minimal Install Installed Groups: Security Tools Container Management Available Groups: 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 <em>package_name</em>

例如,要查看安全工具组中的包:

 $ sudo dnf group info “security tools”
Group: Security Tools Description: Security tools for integrity and trust verification. Default Packages: scap-security-guide Optional Packages: 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 <em>package_group_name</em>

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

 $ sudo dnf group install “Network Servers”
 Last metadata expiration check: 1:40:14 ago on Wed 03 Jun 2020 05:53:11 PM UTC. Dependencies resolved. =========================================================================================== Package Architecture Version Repository Size =========================================================================================== Installing Groups: Network Servers Transaction Summary =========================================================================================== Is this ok [y/N]:

删除软件包组

要删除软件包组:

 sudo dnf remove <em>package_name</em>

因此,要删除“安全工具”包组:

 $ sudo dnf group remove "security tools"
 Dependencies resolved. ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Removing: scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M Removing unused dependencies: 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 Removing Groups: Security Tools Transaction Summary ===================================================================================================== Remove 6 Packages Freed space: 247 M Is this ok [y/N]: 

更新包

更新所有包

要更新所有包及其依赖项,您可以使用:

 $ sudo dnf upgrade
 Last metadata expiration check: 1:09:31 ago on Tue 02 Jun 2020 08:38:09 PM UTC. Dependencies resolved. Nothing to do. Complete!

这将安装所有可以安装的更新。 dnf upgrade和 dnf update 的效果是一样的,但是首选dnf upgrade。

更新单个包

要更新单个包,请运行:

 $ sudo dnf upgrade package_name

例如,要更新 python 包:

 $ sudo dnf upgrade python

结论

学习 DNF 可能会有所收获,因为它通常是执行系统管理任务的最快方式。 如果有兴趣学习 RHEL 8,那么您可以查看此 Udemy 课程。