DNF意思是“ Dandified Yum”。 這是下一代的yum軟件包管理器(Yum的派生)。DNF命令使用libsolv,hawkey,ibrepo和libcomps等C語言庫編寫。它是在Fedora 18中引入的,自Fedora 22以來它一直是默認的軟件包管理器。
DNF是一個軟件包管理器,可以在基於RPM的Linux發行版上安裝,更新和刪除軟件包。 它會自動計算依賴性並確定安裝軟件包所需的操作。由於一些長期問題尚未在yum中解決,如性能差,內存使用率高,依賴關系解析速度慢等,yum已被DNF取代。這不僅僅是解決yum中待解決的問題。 此外,DNF添加了許多功能,以實現基於RPM的系統中軟件包的無縫管理。
Features :
- 支持多個存儲庫
- 配置簡單
- 更快,更少內存占用的操作 等等
安裝 dnf
DNF 並未默認安裝在 RHEL 或 CentOS 7系統中
-
為了安裝 dnf ,必須先安裝並啟用 epel-release 依賴
yum install epel-release
-
使用 epel-release 依賴中的 YUM 命令來安裝 dnf 包
yum install dnf
常見的 dnf 命令介紹
- 查看 dnf 版本
dnf --version
- 查看系統中可用的 dnf 軟件庫
dnf repolist
- 查看系統中可用和不可用的軟件庫
dnf repolist all
- 列出所有RPM包
dnf list
- 列出已經安裝的RPM包
dnf list installed
- 列出可供安裝的RPM包
dnf list available
- 搜索某包 (以搜索nginx為例)
dnf search nginx
- 查看某包的詳情
dnf info nginx
- 安裝包
dnf install nginx
- 升級包
dnf update nginx
- 檢查系統軟件包更新
dnf check-update
- 升級系統中所有軟件包
dnf update OR dnf upgrade
- 刪除包
dnf remove nginx OR dnf erase nginx
- 刪除無用孤立的軟件包
dnf autoremove
- 刪除緩存的無用軟件包
dnf clean all
- 獲取有關某條命令的使用幫助
dnf help clean
- 重新安裝特定軟件包
dnf reinstall nginx
- 回滾某個特定軟件的版本
dnf downgrade nginx
總結
DNF 包管理器作為 YUM 包管理器的升級替代品,它能自動完成更多的操作。但在我看來,正因如此,所以 DNF 包管理器不會太受那些經驗老道的 Linux 系統管理者的歡迎。舉例如下:
-
在 DNF 中沒有 –skip-broken 命令,並且沒有替代命令供選擇.
-
在 DNF 中沒有判斷哪個包提供了指定依賴的 resolvedep 命令。
-
在 DNF 中沒有用來列出某個軟件依賴包的 deplist 命令。
-
當你在 DNF 中排除了某個軟件庫,那么該操作將會影響到你之后所有的操作,不像在 YUM 下那樣,你的排除操作只會咋升級和安裝軟件時才起作用。
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 -y
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