原文地址: https://www.twblogs.net/a/5eedcdc2264079afec950ab1

DNF的英文是 “Dandified Yum”。 是原生的yum软件包管理器(Yum的派生)。DNF命令使用libsolv,hawkey,ibrepo和libcomps等C语言库写。它是在Fedora 18中引入的,自Fedora 22 以来一直是默认的软件包管理器。DNF 是一个软件包管理器,可以在基于 RPM 的 Linux 发行版上,更新删除软件包。它会自动安装计算并确定安装软件包所需要的操作。由于一些问题长期尚未在yum中解决,如性能差,内存使用率高,依赖关系解析速度慢等,yum已被DNF个别解决。这解决了yum中待解决的问题。此外, DNF添加了许多功能,以实现基于RPM的系统中软件包的无缝管理。

基础说明

默认情况下,DNF 已经安装在 RHEL 8 和 CentOS 8 系统上。运行以下命令以在 CentOS 7 和 RHEL 8 系统上安装。
DNF 软件包可以通过 yum 命令安装在 CentOS 7 系统上,因为它是Extras Repo 的部分

  1. # yum install dnf

DNF 命令的语法

  1. dnf [Option] [Command] [Package_Name]

配置文件的位置

  1. Main Configuration: /etc/dnf/dnf.conf
  2. Repository: /etc/yum.repos.d/
  3. Cache Files: /var/cache/dnf

常用命令

  1. alias List or create command aliases
  2. autoremove 删除所有原先因为依赖关系安装的不需要的软件包
  3. check 在包数据库中寻找问题
  4. check-update 检查是否有软件包升级
  5. clean 删除已缓存的数据
  6. deplist 列出软件包的依赖关系和提供这些软件包的源
  7. distro-sync 同步已经安装的软件包到最新可用版本
  8. downgrade 降级包
  9. group 显示或使用组信息
  10. help 显示一个有帮助的用法信息
  11. history 显示或使用事务历史
  12. info 显示关于软件包或软件包组的详细信息
  13. install 向系统中安装一个或多个软件包
  14. list 列出一个或一组软件包
  15. makecache 创建元数据缓存
  16. mark 在已安装的软件包中标记或者取消标记由用户安装的软件包。
  17. module 与模块交互。
  18. provides 查找提供指定内容的软件包
  19. reinstall 重装一个包
  20. remove 从系统中移除一个或多个软件包
  21. repolist 显示已配置的软件仓库
  22. repoquery 搜索匹配关键字的软件包
  23. repository-packages 对指定仓库中的所有软件包运行命令
  24. search 在软件包详细信息中搜索指定字符串
  25. shell 运行交互式的DNF终端
  26. swap 运行交互式的 DNF 终端以删除或者安装 spec 描述文件
  27. updateinfo 显示软件包的参考建议
  28. upgrade 升级系统中的一个或多个软件包
  29. upgrade-minimal 升级,但只有“最新”的软件包已修复可能影响你的系统的问题

dnf repolist 仓库

该命令在默认情况下启用的所有仓库,并提供了其他信息的选项。通过 dnf 命令添加-v选项时,可提供更详细的信息。
此外,不会强制同步过期的元数据。 ,并且你可以强制同步使用启用--refresh的所有存储库。

  • 启用系统上的存储库的标准命令:

    1. # dnf repolist
    2. Last metadata expiration check: 0:01:18 ago on Tue 10 Dec 2019 02:05:20 PM IST.
    3. repo id repo name status
    4. AppStream CentOS-8 - AppStream 5,089
    5. BaseOS CentOS-8 - Base 2,843
    6. *epel Extra Packages for Enterprise Linux 8 - x86_64 3,625
    7. extras CentOS-8 - Extras 3
  • 或者,你可以运行以下命令,以系统上已启用的仓库:

    1. # dnf repolist enabled
    2. or
    3. # dnf repolist --enabled
  • 运行以下命令以系统上的存储:

    1. # dnf repolist disabled
    2. or
    3. # dnf repolist --disabled
  • 运行以下命令,以系统上的所有仓库(已经可以和已经使用):

    1. # dnf repolist all
    2. or
    3. # dnf repolist --all
  • 要查看有关每个存储库的详细信息,dnf 命令添加-v开关。它显示 repo-id,repo-name 等。

    1. # dnf repolist -v
    2. .
    3. .
    4. Repo-id : BaseOS
    5. Repo-name : CentOS-8 - Base
    6. Repo-revision: 8.0.1905
    7. Repo-distro-tags: [cpe:/o:centos:centos:8]: , 8, C, O, S, e, n, t
    8. Repo-updated : Fri 01 Nov 2019 01:44:36 AM IST
    9. Repo-pkgs : 2,843
    10. Repo-size : 3.8 G
    11. Repo-mirrors : http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=BaseOS&infra=stock
    12. Repo-baseurl : http://mirrors.piconets.webwerks.in/centos-mirror/8.0.1905/BaseOS/x86_64/os/ (9 more)
    13. Repo-expire : 172,800 second(s) (last: Tue 10 Dec 2019 02:05:01 PM IST)
    14. Repo-filename: /etc/yum.repos.d/CentOS-Base.repo
    15. .
    16. .

    dnf install 安装一个或多个软件包

    下面我们安装 nano,MariaDB 服务器和 MariaDB 客户端软件包。默认情况下,每次 DNF 要求您确认安装软件包时间,都添加项目-y确认确认。

  • 安装一个软件包:

    1. # dnf install nano
  • 安装多个包装:

    1. # dnf install MariaDB-server MariaDB-client
  • 在dnf中添加-y选项以安装软件包,无需确认直接安装:

    1. # dnf install nano -y
  • 指定仓库安装软件包:

    1. # dnf --disablerepo="*" --enablerepo=epel install htop
  • 安装rpm包文件

    1. # dnf install /path/to/file.rpm
  • 从url安装rpm包

    1. # dnf install https://xyz.com/file.rpm

    要安装提供/usr/bin/[xxx]文件的软件包,请运行以下命令。
    例如,sar应用程序是“systat”软件包的附件,但我们大多数人都不知道其父软件包的名称。但是,很难找到其父程序包名称,但此命令允许您在不知道父程序包名称的情况下进行安装。

    1. # dnf install /usr/bin/sar
  • 安装修复建议相关的包

    1. # dnf install --advisory=FEDORA-2018-b7b99fe852 \*

    –advisory ADVISORY :在更新中包含修复给定建议所需的包

    dnf remove 删除软件包

  • 删除一个名为nano的软件包

    1. # dnf remove nano -y
  • 删除重复软件包的旧版本

    1. # dnf remove --duplicates

    5. 删除所有被依赖的软件包

  • 删除是因为不再需要的其他软件包最初依赖关系安装的所有软件包

    1. # dnf autoremove

    6. 更新一个或多个软件包

  • 将所有已安装的软件包更新为最新可用版本

    1. # dnf upgrade
  • 将确定的一个或更多版本更新给最新的可用版本

    1. # dnf upgrade [Package_Name]
    2. # dnf upgrade nano
  • 将指定的一个或多个版本下载到指定的版本

    1. # dnf upgrade [Package_Version]
    2. # dnf upgrade nano-2.9.8-1

    7.检查有系统上更新公告的信息

    以下命令将显示有关更新的信息。这将显示可用于安全性、错误修复和增强建议的软件包更新数量。
    这些软件包可以通过“dnf upgrade”命令进行升级。

  • 显示咨询类型的数量

    1. # dnf updateinfo list
    2. Last metadata expiration check: 0:21:23 ago on Wed 11 Dec 2019 10:36:15 AM IST.
    3. FEDORA-EPEL-2019-1897c58d3f bugfix epel-release-8-7.el8.noarch
  • 显示建议列表

    1. # dnf updateinfo info FEDORA-EPEL-2019-1897c58d3f
    2. Last metadata expiration check: 0:20:57 ago on Wed 11 Dec 2019 10:36:15 AM IST.
    3. ===============================================================================
    4. epel-release-8-7.el8
    5. ===============================================================================
    6. Update ID: FEDORA-EPEL-2019-1897c58d3f
    7. Type: bugfix
    8. Updated: 2019-12-10 07:26:18
    9. Bugs: 1760182 - Unknown confg values are set
    10. Description: Remove failovermethod from EPEL8 tree. It is no longer needed.
    11. Severity: None

    8. 仅更新系统上可用的公告

    如果需要在系统上更新错误修改,增强或安全修改包,请使用以下命令。

  • 将所有内容更新为提供错误修改、增强功能或安全修复程序的最新版本。

    1. # dnf upgrade-minimal
  • 将定的一个或多个软件包更新为提供错误修改,增强或安全修复的最新版本。

    1. # dnf upgrade-minimal [Package_Name]

    9. 检查系统上是否可用的软件包更新

    检查系统上是否有任何此命令更新。

  • 检查系统是否有任何更新。

    1. # dnf check-update
  • 或者,使用下面的命令可以更新。

    1. # dnf list updates
  • 下面命令检查对指定软件的更新。

    1. # dnf check-update [Package_Name]
    2. # dnf check-update nano

    10.检查系统中的“Packagedb”问题

    此命令检查本地包装,并生成有关已检测到的任何问题的信息。您可以通过选项限制“packagedb”检查–依赖项,–重复项,–已过时或–提供。

    1. # dnf check

    11. 已安装的系统上的软件包

    dnf list 命令将我们知道所有的包装,不管是在 RPMDB 中,在存储库中还是在燃烧中。您可以根据需要输出控制。

  • 运行以下命令,同时在RPMDB中,存在于接触中的所有软件包中。

    1. # dnf list
    2. or
    3. # dnf list all
  • 仅一个RPMDB中已安装的软件包。

    1. # dnf list installed
  • 可用的软件包,但不包括已安装的软件包。

    1. # dnf list available
  • 下面查看是否安装了给定的软件包。如果是,信息显示如下的输出。否则,可以显示以下错误消息错误:“没有与列表匹配的软件包”

    1. # dnf list installed httpd
    2. Installed Packages
    3. httpd.x86_64 2.4.37-12.module_el8.0.0 + 185 + 5908b0db @AppStream
  • 已有系统上已安装的已放弃的成本。

    1. # dnf list obsoletes
  • 最近添加到仓库中的软件包。

    1. # dnf list recent
  • 可用于已安装软件包的升级包。

    1. # dnf list upgrades
  • 将被dnf autoremove命令删除的软件包。

    1. # dnf list autoremove

    12. 搜索软件包

    DNF搜索命令使您可以根据给定的字符串查找可用软件包的列表。当你不知道要安装的确切软件包名称时,这将非常有用。
    它在包数据中搜索给定的关键字。关键字作为非关键字大小写的子字符串进行匹配,支持默认情况下,与所有请求的匹配的软件包。在软件包名称和中搜索摘要。

  • 在下面的例子中,我们将搜索ftpd字符串,看看会发生什么。

    1. # dnf search ftpd
    2. Last metadata expiration check: 0:09:00 ago on Thu 12 Dec 2019 11:23:07 AM IST.
    3. =================================== Name & Summary Matched: ftpd ====================================
    4. pure-ftpd-selinux.x86_64 : SELinux support for Pure-FTPD
    5. ======================================== Name Matched: ftpd =========================================
    6. vsftpd.x86_64 : Very Secure Ftp Daemon
    7. pure-ftpd.x86_64 : Lightweight, fast and secure FTP server
    8. nordugrid-arc-gridftpd.x86_64 : ARC gridftp server

    上面的输出显示了ftpd键的匹配字符串。

    13. 查看已安装的软件包信息

    以下命令用于相关的已安装和可用软件包的描述和概要信息。
    此命令使您可以引起大规模的应用程序的详细信息。它显示了有关软件包的各种信息,名称,Arch ,版本,发行版,大小,存储库名称等。

    1. # dnf info httpd
    2. Last metadata expiration check: 23:44:19 ago on Wed 11 Dec 2019 11:35:25 AM IST.
    3. Installed Packages
    4. Name : httpd
    5. Version : 2.4.37
    6. Release : 12.module_el8.0.0+185+5908b0db
    7. Arch : x86_64
    8. Size : 4.9 M
    9. Source : httpd-2.4.37-12.module_el8.0.0+185+5908b0db.src.rpm
    10. Repo : @System
    11. From repo : AppStream
    12. Summary : Apache HTTP Server
    13. URL : https://httpd.apache.org/
    14. License : ASL 2.0
    15. Description : The Apache HTTP Server is a powerful, efficient, and extensible
    16. : web server.

    14.如何使用“dnf提供”命令

    dnf prvides 命令将提供给定文件的软件包。如果您想找出那个软件包(已安装或未安装)提供了此文件,这将很有用。

  • 例如,我们都知道 sar 的用法,而我们大多数人都不知道那个软件包提供了这个文件。

    1. # dnf provides sar
    2. Last metadata expiration check: 0:27:57 ago on Thu 12 Dec 2019 11:23:07 AM IST.
    3. sysstat-11.7.3-2.el8.x86_64 : Collection of performance monitoring tools for Linux
    4. Repo : AppStream
    5. Matched from:
    6. Filename : /usr/bin/sar

    15.如何使用“dnf makecache”命令

  • makecache 用于下载和启用系统上当前启用的所有数据。

    1. # dnf makecache
    2. CentOS-8 - AppStream 1.6 kB/s | 4.3 kB 00:02
    3. CentOS-8 - Base 1.4 kB/s | 3.9 kB 00:02
    4. CentOS-8 - Extras 503 B/s | 1.5 kB 00:03
    5. Extra Packages for Enterprise Linux 8 - x86_64 5.6 kB/s | 10 kB 00:01
    6. Extra Packages for Enterprise Linux 8 - x86_64 710 kB/s | 4.2 MB 00:06
    7. Metadata cache created.

    16. 检查可用的软件包更新

  • 是否有可用的更新。如果有更新,此命令可以打印系统更新可用。

    1. # dnf check-update
  • 如果要检查更新是否可用于给定的软件包,请运行以下命令。

    1. # dnf check-update [Package_Name]
    2. # dnf check-update nano
  • 如果要在更新之前快速检查对给定营养保健所做的更改,请运行以下命令。 ```

    dnf check-update ghostscript.x86_64 —changelog

    Last metadata expiration check: 0:01:44 ago on Fri 13 Dec 2019 11:25:15 AM IST. ghostscript.x86_64 9.25-2.el8_0.3 AppStream Changelogs for ghostscript-9.25-2.el8_0.3.x86_64

  • Thu Aug 22 12:00:00 AM 2019 Martin Osvald - 9.25-2.3
  • Resolves: #1744010 - CVE-2019-14811 ghostscript: Safer Mode Bypass by .forceput Exposure in .pdf_hook_DSC_Creator (701445)
  • Resolves: #1744014 - CVE-2019-14812 ghostscript: Safer Mode Bypass by .forceput Exposure in setuserparams (701444)
  • Resolves: #1744005 - CVE-2019-14813 ghostscript: Safer Mode Bypass by .forceput Exposure in setsystemparams (701443)
  • Resolves: #1744230 - CVE-2019-14817 ghostscript: Safer Mode Bypass by .forceput Exposure in .pdfexectoken and other procedures (701450)
  • Mon Aug 05 12:00:00 AM 2019 Martin Osvald - 9.25-2.2
  • Resolves: #1737336 - CVE-2019-10216 ghostscript: -dSAFER escape via .buildfont1 (701394)
  • Thu Mar 28 12:00:00 AM 2019 Martin Osvald - 9.25-2.1
  • Resolves: #1692798 - CVE-2019-3839 ghostscript: missing attack vector protections for CVE-2019-6116
  • Resolves: #1678170 - CVE-2019-3835 ghostscript: superexec operator is available (700585)
  • Resolves: #1691414 - CVE-2019-3838 ghostscript: forceput in DefineResource is still accessible (700576)
  • fix included for ghostscript: Regression: double comment chars ‘%’ in gs_init.ps leading to missing metadata
  • fix for pdf2dsc regression added to allow fix for CVE-2019-3839

    1. <a name="YSxaZ"></a>
    2. ## 17.降级软件包
    3. dnf 降级命令用于将指定的软件包降级到较低(以前)的版本。如果提供了已安装软件包的任何特定版本,则驾驶降级为目标版本。

    dnf downgrade nano

    1. <a name="Z0Lz8"></a>
    2. ## 18.重装软件包
    3. 如果他们的软件包已经安装,则此命令用于安装。

    Package nano available, but not installed. No match for argument: nano Error: No packages marked for reinstall. ```

  • 运行以下命令以重新安装给定的软件包。

    1. # dnf reinstall nano

    19.可用的软件包组

  • 相互关联的软件包列表被下载了。以下命令以系统上可用的软件包组。

    1. # dnf group list
    2. or
    3. # dnf grouplist
    4. Last metadata expiration check: 1:38:20 ago on Fri 13 Dec 2019 11:25:15 AM IST.
    5. Available Environment Groups:
    6. Server with GUI
    7. Server
    8. Minimal Install
    9. KDE Plasma Workspaces
    10. Virtualization Host
    11. Custom Operating System
    12. Installed Environment Groups:
    13. Workstation
    14. Available Groups:
    15. Container Management
    16. .NET Core Development
    17. RPM Development Tools
    18. Smart Card Support
    19. Development Tools
    20. Graphical Administration Tools
    21. Headless Management
    22. Legacy UNIX Compatibility
    23. Network Servers
    24. Scientific Support
    25. Security Tools
    26. System Tools
    27. Fedora Packager

    20. 查看系统上可用的软件包组摘要

  • 此显示概述了系统上已安装并可用的组数量。

    1. # dnf group summary
    2. Last metadata expiration check: 1:48:35 ago on Fri 13 Dec 2019 11:25:15 AM IST.
    3. Available Groups: 13

    21. 查看指定的软件包组信息

    。命令此显示该组中可用软件包的列表
    每个小组分为三个部分,详细信息如下:

  • 强制包强制包

  • 默认包默认包
  • 可选包任选包

    1. # dnf group info 'Development Tools'
    2. Last metadata expiration check: 1:54:38 ago on Fri 13 Dec 2019 11:25:15 AM IST.
    3. Group: Development Tools
    4. Description: A basic development environment.
    5. Mandatory Packages:
    6. autoconf
    7. automake
    8. binutils
    9. bison
    10. flex
    11. gcc
    12. gcc-c++
    13. gdb
    14. glibc-devel
    15. libtool
    16. make
    17. pkgconf
    18. pkgconf-m4
    19. pkgconf-pkg-config
    20. redhat-rpm-config
    21. rpm-build
    22. rpm-sign
    23. strace
    24. Default Packages:
    25. asciidoc
    26. byacc
    27. ctags
    28. diffstat
    29. git
    30. intltool
    31. ltrace
    32. patchutils
    33. perl-Fedora-VSP
    34. perl-generators
    35. pesign
    36. source-highlight
    37. systemtap
    38. valgrind
    39. valgrind-devel
    40. Optional Packages:
    41. cmake
    42. expect
    43. rpmdevtools
    44. rpmlint

    22.安装软件包组

    运行以下命令以安装软件包组。
    在这种情况下,我们将安装“开发”软件包组。编辑器组工具捆绑了捆绑与编辑器的软件包。

    1. # dnf group install 'Development Tools' -y
    2. or
    3. # dnf groupinstall 'Development Tools' -y

    23. 更新软件包组

  • 类似地,运行以下命令将版本组更新为可用的最新版本。

    1. # dnf group update 'Development Tools' -y
    2. or
    3. # dnf groupupdate 'Development Tools' -y

    24.删除软件包组

  • 使用以下命令删除给定的已安装软件包组。

    1. # dnf group remove 'Development Tools'
    2. or
    3. # dnf group erase 'Development Tools'

    25.清除系统上的查看数据

    默认情况下,当您执行各种 dnf 时,dnf 包操作和存储库元数据类的数据缓存到“/var/cache/dnf”目录中。该缓存在这里面会占用大量空间。将允许您删除所有缓存的数据。

  • 运行以下命令以删除从仓库数据生成的保存文件。

    1. # dnf clean dbcache
  • 运行以下命令以删除数据。

    1. # dnf clean metadata
  • 运行以下命令从系统中删除所有下载的软件包。

    1. # dnf clean packages
  • 此命令可喜悦完成所有上述操作。

    1. dnf clean all

    26. 打印dnf历史记录

  • dnf 历史命令允许用户查看过去的事务中发生的事情。所有交易均显示在表格中。 ```

    dnf history

    ID | Command line | Date and time | Action(s) | Altered


  1. 9 | install nano | 2019-12-12 12:49 | Install | 1
  2. 8 | erase nano -y | 2019-12-11 08:09 | Removed | 1
  3. 7 | install nano -y | 2019-12-11 08:09 | Install | 1
  4. 6 | remove nano | 2019-12-11 08:09 | Removed | 1
  5. 5 | install httpd -y | 2019-12-11 08:08 | Install | 9
  6. 4 | | 2019-11-10 21:27 | Install | 4
  7. 3 | install fping | 2019-11-09 10:09 | Install | 1
  8. 2 | install epel-release | 2019-11-09 10:04 | Install | 1
  9. 1 | | 2019-11-09 09:10 | Install | 1441 EE
  1. - 或者,您可以使用以下命令获得相同的结果。

dnf history list

  1. - 显示有关历史的详细信息。如果未指定,则显示最近一次的历史信息。

dnf history info

Transaction ID : 9 Begin time : Thu 12 Dec 2019 12:49:17 PM IST Begin rpmdb : 1442:1d39bf569934f62170179ac566e748a34156008a End time : Thu 12 Dec 2019 12:49:18 PM IST (1 seconds) End rpmdb : 1443:e5cdaaca00923c394bd2533c642c175ec6ce2cf7 User : root Return-Code : Success Releasever : 8 Command Line : install nano Packages Altered: Install nano-2.9.8-1.el8.x86_64 @BaseOS

  1. - 运行以下命令即可查看有关给定ID的历史详细信息。

dnf history info 3

Transaction ID : 3 Begin time : Sat 09 Nov 2019 10:09:19 AM IST Begin rpmdb : 1429:4ea1748d2132285a5bc1929f522f97f80bc5cede End time : Sat 09 Nov 2019 10:09:20 AM IST (1 seconds) End rpmdb : 1430:7c974a655a4f3a6c0ad5c6b8ab968279e0144581 User : root Return-Code : Success Releasever : 8 Command Line : install fping Packages Altered: Install fping-4.2-2.el8.x86_64 @epel

  1. - 对指定的ID历史操作重复执行。

dnf history redo 3

  1. - 执行与指定 ID 执行的所有操作相反的操作。

dnf history undo 3

  1. - 撤消在历史ID之后执行的所有操作。

dnf history rollback 7

  1. <a name="deG27"></a>
  2. ## 27.允许DNF自动更新
  3. - 你通过安装dnf-automatic可以来启用自动软件包更新。为此,运行以下命令。

dnf install dnf-automatic

  1. - 安装pacakge之后,请确保您编辑/etc/dnf/automatic.conf文件并替换apply_updates = yes而不是apply_updates = no。在配置文件中进行更改后,启用“dnf-automatic-timer”服务。

systemctl enable dnf-automatic.timer

Created symlink from /etc/systemd/system/basic.target.wants/dnf-automatic.timer to /usr/lib/systemd/system/dnf-automatic.timer

  1. - 最后启动服务。

systemctl start dnf-automatic.timer

  1. <a name="OJnAO"></a>
  2. ## 28. 标记/取消标记软件包
  3. dnf 标记命令允许你始终将指定的程序包保留在系统上,并且在运行自动删除命令时不从系统中删除此程序包。
  4. - 运行以下命令,将指定的包装标记为由用户安装。

dnf mark install nano

nano-2.9.8-1.el8.x86_64 marked as user installed.

  1. - 运行以下命令以取消将指定的软件包标记为由用户安装。

dnf mark remove nano

nano-2.9.8-1.el8.x86_64 unmarked as user installed.

  1. <a name="xOSqQ"></a>
  2. ### `dnf repoquery {software}` 从已启用的存储库中搜索软件包
  3. - 它在启用的存储库中搜索给定的程序包并显示信息。

dnf repoquery htop

Last metadata expiration check: 0:22:18 ago on Sat 14 Dec 2019 02:44:16 PM IST. htop-0:2.2.0-6.el8.x86_64

  1. <a name="uukK3"></a>
  2. ### dnf 手册页
  3. 我们在本文中添加了所有可能的选项,但是如果您在本文中未找到其他任何选项,请访问手册。

dnf —help

or

man dnf

```