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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章