DNF是新一代的rpm軟體包管理器。它首先出現在 Fedora 18 這個發行版中。而目前,它取代了yum,正式成為從 Fedora 22 起 Fedora 版本的包管理器。
DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括使用者體驗,記憶體占用,依賴分析,運作速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 庫進行包管理操作。盡管它沒有預裝在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同時使用 DNF。它們之間的差別可以參考軟體包管理基礎:apt,yum,dnf,pkg。
DNF 的最新穩定發行版版本号是 1.0,發行日期是2015年5月11日。 這一版本的額 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 編寫,發行許可為GPL v2。
安裝 DNF 包管理器
DNF 并未預設安裝在 RHEL 或 CentOS 7系統中,但是 Fedora 22 已經預設使用 DNF。
1、為了安裝 DNF ,您必須先安裝并啟用 epel-release 依賴。
在系統中執行以下指令:
# yum install epel-release
或者
# yum install epel-release -y
其實這裡并沒有強制使用”-y”的理由,相反的,在不使用”-y”的情況下,使用者可以在安裝過程中檢視到底有哪些東西被安裝進了系統。但對于沒有這個需求的使用者,您可以在 YUM 中使用”-y”參數來自動安裝所有東西。
2、使用 epel-release 依賴中的 YUM 指令來安裝 DNF 包。在系統中執行以下指令:
# yum install dnf
然後, DNF 包管理器就被成功的安裝到你的系統中了。
DNF常用指令
檢查并更新可用軟體包:
$ dnf update
删除緩存:
$dnf clean all
列出可用的軟體源:
$ dnf repolist
搜尋軟體:
$ dnf search $package
安裝軟體:
$ dnf install $package
更新軟體包:
$ dnf update $package
删除軟體包:
$ dnf remove $package
檢視更多指令:
$ dnf help
遇到不懂的地方運作 man dnf 指令就會用啦。
接下來,是時候開始我們的教程了!在這個教程中,您将會學到27個用于 DNF 包管理器的指令。使用這些指令,你可以友善有效的管理您系統中的 RPM 軟體包。現在,讓我們開始學習 DNF 包管理器的27條常用指令吧!
1.檢視 DNF 包管理器版本
用處:該指令用于檢視安裝在您系統中的 DNF 包管理器的版本
# dnf –version

2.檢視系統中可用的 DNF 軟體庫
用處:該指令用于顯示系統中可用的 DNF 軟體庫
# dnf repolist
3.檢視系統中可用和不可用的所有的 DNF 軟體庫
用處:該指令用于顯示系統中可用和不可用的所有的 DNF 軟體庫
# dnf repolist all4.列出所有 RPM 包
用處:該指令用于列出使用者系統上的所有來自軟體庫的可用軟體包和所有已經安裝在系統上的軟體包
# dnf list
5.列出所有安裝了的 RPM 包
用處:該指令用于列出所有安裝了的 RPM 包
# dnf list installed
6.列出所有可供安裝的 RPM 包
用處:該指令用于列出來自所有可用軟體庫的可供安裝的軟體包
# dnf list available
7.搜尋軟體庫中的 RPM 包
用處:當你不知道你想要安裝的軟體的準确名稱時,你可以用該指令來搜尋軟體包。你需要在”search”參數後面鍵入軟體的部分名稱來搜尋。(在本例中我們使用”nano”)
# dnf search nano
8.查找某一檔案的提供者
用處:當你想要檢視是哪個軟體包提供了系統中的某一檔案時,你可以使用這條指令。(在本例中,我們将查找”/bin/bash”這個檔案的提供者)
# dnf provides /bin/bash
9.檢視軟體包詳情
用處:當你想在安裝某一個軟體包之前檢視它的詳細資訊時,這條指令可以幫到你。(在本例中,我們将檢視”nano”這一軟體包的詳細資訊)
# dnf info nano
10安裝軟體包
用處:使用該指令,系統将會自動安裝對應的軟體及其所需的所有依賴(在本例中,我們将用該指令安裝nano軟體)
# dnf install nano11.更新軟體包
用處:該指令用于更新制定軟體包(在本例中,我們将用指令更新”systemd”這一軟體包)
# dnf update systemd
12.檢查系統軟體包的更新
用處:該指令用于檢查系統中所有軟體包的更新
# dnf check-update13.更新所有系統軟體包
用處:該指令用于更新系統中所有有可用更新的軟體包
# dnf update 或 # dnf upgrade14.删除軟體包
用處:删除系統中指定的軟體包(在本例中我們将使用指令删除”nano”這一軟體包)
# dnf remove nano 或 # dnf erase nano15.删除無用孤立的軟體包
用處:當沒有軟體再依賴它們時,某一些用于解決特定軟體依賴的軟體包将會變得沒有存在的意義,該指令就是用來自動移除這些沒用的孤立軟體包。
# dnf autoremove
16.删除緩存的無用軟體包
用處:在使用 DNF 的過程中,會因為各種原因在系統中殘留各種過時的檔案和未完成的編譯工程。我們可以使用該指令來删除這些沒用的垃圾檔案。
# dnf clean all
17.擷取有關某條指令的使用幫助
用處:該指令用于擷取有關某條指令的使用幫助(包括可用于該指令的參數和該指令的用途說明)(本例中我們将使用指令擷取有關指令”clean”的使用幫助)
# dnf help clean
18.檢視所有的 DNF 指令及其用途
用處:該指令用于列出所有的 DNF 指令及其用途
# dnf help
19.檢視 DNF 指令的執行曆史
用處:您可以使用該指令來檢視您系統上 DNF 指令的執行曆史。通過這個手段您可以知道在自您使用 DNF 開始有什麼軟體被安裝和解除安裝。
# dnf history
20.檢視所有的軟體包組
用處:該指令用于列出所有的軟體包組
# dnf grouplist
21.安裝一個軟體包組
用處:該指令用于安裝一個軟體包組(本例中,我們将用指令安裝”Educational Software”這個軟體包組)
# dnf groupinstall ‘Educational Software’
22.更新一個軟體包組中的軟體包
用處:該指令用于更新一個軟體包組中的軟體包(本例中,我們将用指令更新”Educational Software”這個軟體包組中的軟體)
# dnf groupupdate ‘Educational Software’
23.删除一個軟體包組
用處:該指令用于删除一個軟體包組(本例中,我們将用指令删除”Educational Software”這個軟體包組)
# dnf groupremove ‘Educational Software’
24.從特定的軟體包庫安裝特定的軟體
用處:該指令用于從特定的軟體包庫安裝特定的軟體(本例中我們将使用指令從軟體包庫 epel 中安裝 phpmyadmin 軟體包)
# dnf –enablerepo=epel install phpmyadmin25.更新軟體包到最新的穩定發行版
用處:該指令可以通過所有可用的軟體源将已經安裝的所有軟體包更新到最新的穩定發行版
# dnf distro-sync26.重新安裝特定軟體包
用處:該指令用于重新安裝特定軟體包(本例中,我們将使用指令重新安裝”nano”這個軟體包)
# dnf reinstall nano
27.復原某個特定軟體的版本
用處:該指令用于降低特定軟體包的版本(如果可能的話)(本例中,我們将使用指令降低”acpid”這個軟體包的版本)
# dnf downgrade acpid
樣例輸出:
Using metadata from Wed May 20 12:44:59 2017
No match for available package: acpid-2.0.19-5.el7.x86_64
Error: Nothing to do.
注:在執行這條指令的時候, DNF 并沒有按照我期望的那樣降級指定的軟體(“acpid”)。該問題已經上報。總結
DNF 包管理器作為 YUM 包管理器的更新替代品,它能自動完成更多的操作。但在我看來,正因如此,是以 DNF 包管理器不會太受那些經驗老道的 Linux 系統管理者的歡迎。舉例如下:
1.在 DNF 中沒有 –skip-broken 指令,并且沒有替代指令供選擇。
2.在 DNF 中沒有判斷哪個包提供了指定依賴的 resolvedep 指令。
3.在 DNF 中沒有用來列出某個軟體依賴包的 deplist 指令。
4.當你在 DNF 中排除了某個軟體庫,那麼該操作将會影響到你之後所有的操作,不像在 YUM 下那樣,你的排除操作隻會咋更新和安裝軟體時才起作用。