DNF包管理命令在CentOS 8和RHEL 8上的使用

DNF包管理命令在CentOS 8和RHEL 8上的使用

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

1. 如何在RHEL7/CentOS7上安装DNF

默认情况下,DNF已安装在RHEL 8和CentOS 8系统上。 运行以下命令以在CentOS 7和RHEL 8系统上安装。
DNF软件包可以通过yum命令安装在CentOS 7系统上,因为它是Extras Repo的一部分。 为RHEL 7系统启用“ rhel-7-server-extras-rpms”存储库。

# yum install dnf

DNF命令的常规语法

DNF命令的语法类似于YUM,你会发现它们之间有很多相似之处。

dnf [Option] [Command] [Package_Name]

DNF配置文件的位置

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

常用DNF命令如下

+---------------------+-------------------------------------------------------------------------------------------+
|      Command        |                                         Description                                       |
+---------------------+-------------------------------------------------------------------------------------------+
|repolist             | Display the configured software repositories                                              |
|install              | Install a single or multiple packages on your system                                      |
|upgrade              | Upgrade a package or packages on your system                                              |
|upgrade-minimal      | Upgrade, but only 'newest' package match which fixes a problem that affects your system   |
|list                 | List a package or groups of packages                                                      |
|info                 | Display details about a package or group of packages                                      |
|updateinfo           | Display advisories about packages                                                         |
|search               | Search package details for the given string                                               |
|check-update         | Check for available package upgrades                                                      |
|remove               | Remove a package or packages from your system                                             |
|reinstall            | Reinstall a package                                                                       |
|downgrade            | Downgrade a package                                                                       |
|autoremove           | Remove all unneeded packages that were originally installed as dependencies               |
|distro-sync          | Synchronize installed packages to the latest available versions                           |
|makecache            | Generate the metadata cache                                                               |
|repository-packages  | Run commands on top of all packages in given repository                                   |
|provides             | Find what package provides the given value                                                |
|group                | Display, or use, the groups information                                                   |
|history              | Display, or use, the transaction history                                                  |
|clean                | Remove cached data                                                                        |
|help                 | Display a helpful usage message                                                           |
+---------------------+-------------------------------------------------------------------------------------------+

2. 如何使用dnf列出系统中的仓库

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

  • 列出系统上启用的存储库的标准命令:
# dnf repolist
Last metadata expiration check: 0:01:18 ago on Tue 10 Dec 2019 02:05:20 PM IST.
repo id                       repo name                                                           status
AppStream                     CentOS-8 - AppStream                                                5,089
BaseOS                        CentOS-8 - Base                                                     2,843
*epel                         Extra Packages for Enterprise Linux 8 - x86_64                      3,625
extras                        CentOS-8 - Extras                                                       3
  • 或者,你可以运行以下命令以列出系统上已启用的仓库:
# dnf repolist enabled
or
# dnf repolist --enabled
  • 运行以下命令以列出系统上禁用的仓库:
# dnf repolist disabled
or
# dnf repolist --disabled
  • 运行以下命令以列出系统上的所有仓库(已启用和已禁用):
# dnf repolist all
or
# dnf repolist --all
  • 要查看有关每个存储库的详细信息,使用dnf命令添加-v开关。 它显示repo-id,repo-name等。
# dnf repolist -v
.
.
Repo-id      : BaseOS
Repo-name    : CentOS-8 - Base
Repo-revision: 8.0.1905
Repo-distro-tags: [cpe:/o:centos:centos:8]:  , 8, C, O, S, e, n, t
Repo-updated : Fri 01 Nov 2019 01:44:36 AM IST
Repo-pkgs    : 2,843
Repo-size    : 3.8 G
Repo-mirrors : http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=BaseOS&infra=stock
Repo-baseurl : http://mirrors.piconets.webwerks.in/centos-mirror/8.0.1905/BaseOS/x86_64/os/ (9 more)
Repo-expire  : 172,800 second(s) (last: Tue 10 Dec 2019 02:05:01 PM IST)
Repo-filename: /etc/yum.repos.d/CentOS-Base.repo
.
.

3. 如何使用dnf命令安装一个或多个软件包

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

  • 安装单个软件包:
# dnf install nano
  • 安装多个软件包:
# dnf install MariaDB-server MariaDB-client
  • 在dnf中添加-y选项以安装软件包,无需确认直接安装:
# dnf install nano -y
  • 指定仓库安装软件包:
# dnf --disablerepo="*" --enablerepo=epel install htop
  • 安装rpm包文件
# dnf install /path/to/file.rpm
  • 从url安装rpm包
# dnf install https://xyz.com/file.rpm

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

# dnf install /usr/bin/sar
  • 安装跟修复建议相关的包
# dnf install --advisory=FEDORA-2018-b7b99fe852 \*

–advisory ADVISORY : Include packages needed to fix the given advisory, in updates

4. 如何使用删除软件包

  • 删除一个名为nano的软件包
# dnf remove nano -y
  • 删除重复软件包的旧版本
# dnf remove --duplicates

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

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

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

  • 将所有已安装的软件包更新为最新的可用版本
# dnf upgrade
  • 将给定的一个或多个软件包更新为最新的可用版本
# dnf upgrade [Package_Name]
# dnf upgrade nano
  • 将给定的一个或多个软件包升级到指定的版本
# dnf upgrade [Package_Version]
# dnf upgrade nano-2.9.8-1

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

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

  • 显示咨询类型的数量
# dnf updateinfo list

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

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

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

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

  • 将每个软件包更新为提供错误修正,增强功能或安全修复程序的最新版本。
# dnf upgrade-minimal
  • 将给定的一个或多个软件包更新为提供错误修正,增强或安全修复的最新版本。
# dnf upgrade-minimal [Package_Name]

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

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

  • 检查系统是否有任何更新。
# dnf check-update
  • 或者,使用下面的命令检查可用更新。
# dnf list updates
  • 以下命令检查对指定软件包的更新。
# dnf check-update [Package_Name]
# dnf check-update nano

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

此命令检查本地包装,并生成有关已检测到的任何问题的信息。你可以通过选项限制“packagedb”检查–dependencies,–duplicates,–obsoleted或–provides。

# dnf check

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

dnf list命令将打印我们知道的所有软件包,无论是在RPMDB中,在存储库中还是在两者中。您可以根据需要控制输出。

  • 运行以下命令以列出RPMDB中,repo中或同时存在于两者中的所有软件包。
# dnf list
or
# dnf list all
  • 仅列出RPMDB中已安装的软件包。
# dnf list installed
  • 列出可用的软件包,但不包括已安装的软件包。
# dnf list available
  • 以下命令查看是否安装了给定的软件包。如果是,它将显示类似下面的输出。否则,它将显示以下错误消息“Error: No matching packages to list”
# dnf list installed httpd
Installed Packages
httpd.x86_64 2.4.37-12.module_el8.0.0 + 185 + 5908b0db @AppStream
  • 列出系统上已安装的已废弃的软件包。
# dnf list obsoletes
  • 列出最近添加到仓库中的软件包。
# dnf list recent
  • 列出可用于已安装软件包的升级包。
# dnf list upgrades
  • 列出将被dnf autoremove命令删除的软件包。
# dnf list autoremove

12. 搜索软件包

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

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

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

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

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

以下命令用于列出有关已安装和可用软件包的描述和摘要信息。
此命令使您可以检查有关回购中可用软件包的详细信息。它显示了有关软件包的各种信息,例如名称,Arch,版本,发行版,大小,存储库名称等。

# dnf info httpd
Last metadata expiration check: 23:44:19 ago on Wed 11 Dec 2019 11:35:25 AM IST.
Installed Packages
Name         : httpd
Version      : 2.4.37
Release      : 12.module_el8.0.0+185+5908b0db
Arch         : x86_64
Size         : 4.9 M
Source       : httpd-2.4.37-12.module_el8.0.0+185+5908b0db.src.rpm
Repo         : @System
From repo    : AppStream
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.

14. 如何使用“ dnf provides”命令

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

  • 例如,我们都知道sar的使用,而我们大多数人都不知道哪个软件包提供了此文件。使用以下命令找到它。
# dnf provides sar
Last metadata expiration check: 0:27:57 ago on Thu 12 Dec 2019 11:23:07 AM IST.
sysstat-11.7.3-2.el8.x86_64 : Collection of performance monitoring tools for Linux
Repo        : AppStream
Matched from:
Filename    : /usr/bin/sar

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

  • makecache用于下载和启用系统上当前启用的仓库的所有数据。
# dnf makecache
CentOS-8 - AppStream                                                1.6 kB/s | 4.3 kB     00:02    
CentOS-8 - Base                                                     1.4 kB/s | 3.9 kB     00:02    
CentOS-8 - Extras                                                   503  B/s | 1.5 kB     00:03    
Extra Packages for Enterprise Linux 8 - x86_64                      5.6 kB/s |  10 kB     00:01    
Extra Packages for Enterprise Linux 8 - x86_64                      710 kB/s | 4.2 MB     00:06    
Metadata cache created.

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

  • 此命令检查系统是否有可用的更新。如果有可用更新,它将打印可用更新列表。
# dnf check-update
  • 如果要检查更新是否可用于给定的软件包,请运行以下命令。
# dnf check-update [Package_Name]
# 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

17. 降级软件包

dnf downgrade命令用于将指定的软件包降级到较低(先前)的版本。如果提供已安装软件包的任何特定版本,则它将降级为目标版本。

# dnf downgrade nano

18. 重新安装软件包

如果他们的软件包已经安装,则此命令用于重新安装。如果尚未安装,则会收到以下消息。

Package nano available, but not installed.
No match for argument: nano
Error: No packages marked for reinstall.
  • 运行以下命令以重新安装给定的软件包。
# dnf reinstall nano

19. 列出可用的软件包组

  • 相互关联的软件包列表被分组在一起。运行以下命令以列出系统上可用的软件包组。
# dnf group list
or
# dnf grouplist

Last metadata expiration check: 1:38:20 ago on Fri 13 Dec 2019 11:25:15 AM IST.
Available Environment Groups:
   Server with GUI
   Server
   Minimal Install
   KDE Plasma Workspaces
   Virtualization Host
   Custom Operating System
Installed Environment Groups:
   Workstation
Available Groups:
   Container Management
   .NET Core Development
   RPM Development Tools
   Smart Card Support
   Development Tools
   Graphical Administration Tools
   Headless Management
   Legacy UNIX Compatibility
   Network Servers
   Scientific Support
   Security Tools
   System Tools
   Fedora Packager

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

  • 此显示概述了系统上已安装并可用的组数量。
# dnf group summary
Last metadata expiration check: 1:48:35 ago on Fri 13 Dec 2019 11:25:15 AM IST.
Available Groups: 13

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

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

  • Mandatory Packages强制包
  • Default Packages默认包
  • Optional Packages可选包
# dnf group info 'Development Tools'
Last metadata expiration check: 1:54:38 ago on Fri 13 Dec 2019 11:25:15 AM IST.

Group: Development Tools
 Description: A basic development environment.
 Mandatory Packages:
   autoconf
   automake
   binutils
   bison
   flex
   gcc
   gcc-c++
   gdb
   glibc-devel
   libtool
   make
   pkgconf
   pkgconf-m4
   pkgconf-pkg-config
   redhat-rpm-config
   rpm-build
   rpm-sign
   strace
 Default Packages:
   asciidoc
   byacc
   ctags
   diffstat
   git
   intltool
   ltrace
   patchutils
   perl-Fedora-VSP
   perl-generators
   pesign
   source-highlight
   systemtap
   valgrind
   valgrind-devel
 Optional Packages:
   cmake
   expect
   rpmdevtools
   rpmlint

22. 安装软件包组

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

# dnf group install 'Development Tools' -y
or
# dnf groupinstall 'Development Tools' -y

23. 更新软件包组

  • 类似地,运行以下命令将软件包组更新为可用的最新版本。
# dnf group update 'Development Tools' -y
or
# dnf groupupdate 'Development Tools' -y

24. 删除软件包组

  • 使用以下命令删除给定的已安装软件包组。
# dnf group remove 'Development Tools'
or
# dnf group erase 'Development Tools'

25. 清除系统上的缓存数据

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

  • 运行以下命令以删除从仓库数据生成的缓存文件。
# dnf clean dbcache
  • 运行以下命令以删除仓库数据。
# dnf clean metadata
  • 运行以下命令从系统中删除所有缓存的软件包。
# dnf clean packages
  • 此命令可一次性完成所有上述操作。
dnf clean all

26. 打印dnf历史记录

  • dnf history命令允许用户查看在过去的事务中发生了什么操作。所有交易均显示在表格中。
# dnf history

ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     9 | install nano             | 2019-12-12 12:49 | Install        |    1   
     8 | erase nano -y            | 2019-12-11 08:09 | Removed        |    1   
     7 | install nano -y          | 2019-12-11 08:09 | Install        |    1   
     6 | remove nano              | 2019-12-11 08:09 | Removed        |    1   
     5 | install httpd -y         | 2019-12-11 08:08 | Install        |    9   
     4 |                          | 2019-11-10 21:27 | Install        |    4   
     3 | install fping            | 2019-11-09 10:09 | Install        |    1   
     2 | install epel-release     | 2019-11-09 10:04 | Install        |    1   
     1 |                          | 2019-11-09 09:10 | Install        | 1441 EE
  • 或者,您可以使用以下命令获得相同的结果。
# dnf history list
  • 显示有关历史的详细信息。如果未指定,则显示最近一次历史信息 。
# 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
  • 运行以下命令以查看有关给定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
  • 对指定的ID历史操作重复执行。
# dnf history redo 3
  • 执行与指定历史ID执行的所有操作相反的操作。
# dnf history undo 3
  • 撤消在历史ID之后执行的所有操作。
# dnf history rollback 7

27. 启用DNF自动更新

  • 你可以通过安装dnf-automatic软件包来启用自动软件包更新。为此,运行以下命令。
# dnf install dnf-automatic
  • 安装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
  • 最后启动服务。
# systemctl start dnf-automatic.timer

28. 标记/取消标记软件包

dnf mark命令允许你始终将指定的程序包保留在系统上,并且在运行自动删除命令时不从系统中删除此程序包。

  • 运行以下命令,将指定的软件包标记为由用户安装。
# dnf mark install nano
nano-2.9.8-1.el8.x86_64 marked as user installed.
  • 运行以下命令以取消将指定的软件包标记为由用户安装。
# dnf mark remove nano
nano-2.9.8-1.el8.x86_64 unmarked as user installed.

29. 从已启用的存储库中查询软件包

  • 它在启用的存储库中搜索给定的程序包并显示信息。这等效于“rpm -q”命令。
# 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

30. 访问dnf手册页

我们在本文中添加了所有可能的选项,但是如果您正在寻找其他任何未在本文中列出的选项,请访问手册页。

# dnf -help
or
# man dnf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章