如何在 Linux 上使用 dnf 命令安裝軟體包?

roc_guo發表於2022-05-14

如何在 Linux 上使用 dnf 命令安裝軟體包?如何在 Linux 上使用 dnf 命令安裝軟體包?

在計算機系統上安裝應用程式非常簡單:就是將檔案(如  .zip 檔案)中的檔案複製到目標計算機上,放在作業系統預期放應用程式的位置。因為我們中的許多人習慣於使用花哨的安裝“嚮導”來幫助我們在計算機上安裝軟體,所以這個過程似乎在技術上應該比實際更復雜。

然而,複雜的是,是什麼構成了一個程式?使用者認為的單個應用程式實際上包含了分散在作業系統中的軟體庫的各種依賴程式碼(例如:Linux 上的 .so 檔案、Windows 上的 .dll 檔案和 macOS 上的 .dylib 檔案)。

為了讓使用者不必擔心這些程式程式碼之間的複雜的互相依賴關係, Linux 使用 包管理系統package management system 來跟蹤哪些應用程式需要哪些庫,哪些庫或應用程式有安全或功能更新,以及每個軟體會附帶安裝哪些額外的資料檔案。包管理器本質上是一個安裝嚮導。它們易於使用,提供了圖形介面和基於終端的介面,讓你的生活更輕鬆。你越瞭解你的發行版的包管理器,你的生活就會越輕鬆。

在 Linux 上安裝應用程式

如果你在使用 Linux 桌面時,偶爾想要安裝一個應用程式,那麼你可能正在尋找 GNOME “軟體”,它是一個桌面應用程式瀏覽器。

如何在 Linux 上使用 dnf 命令安裝軟體包?如何在 Linux 上使用 dnf 命令安裝軟體包?

GNOME “軟體” 程式

它會按你的預期工作:點選它的介面,直到你找到一個看起來有用的應用程式,然後單擊 “安裝” 按鈕。

或者,你可以在 GNOME “軟體” 中開啟從網路下載的 .rpm 或 .flatpakref 軟體包,以便它進行安裝。

但如果你更傾向於使用命令列,請繼續閱讀。

用 dnf 搜尋軟體

在安裝應用程式之前,你可能需要確認它是否存在於你的發行版的伺服器上。通常,使用 dnf 搜尋應用程式的通用名稱就足夠了。例如,假設你最近閱讀了 一篇關於 Cockpit 的文章,並決定嘗試一下。你可以搜尋 cockpit 驗證該發行版是否包含它:

$ dnf search cockpit
Last metadata expiration check: 0:01:46 ago on Tue 18 May 2021 19:18:15 NZST.
==== Name Exactly Matched: cockpit ====
cockpit.x86_64 : Web Console for Linux servers
==== Name & Summary Matched: cockpit ==
cockpit-bridge.x86_64 : Cockpit bridge server-side component
cockpit-composer.noarch : Composer GUI for use with Cockpit
[...]

有一個精確的匹配。上面列出的匹配的軟體包名為 cockpit.x86_64,但名稱中的 .x86_64 部分僅表示它相容該 CPU 架構。預設情況下,你的系統會安裝適配當前 CPU 架構的軟體包,因此你可以忽略該副檔名。所以你確認你要查詢的軟體包確實簡稱為 cockpit。

現在你可以放心地使用 dnf install 安裝它。 此步驟需要管理員許可權:

$ sudo dnf install cockpit

一般來說,這就是典型的 dnf 工作流:搜尋並安裝。

然而,有時 dnf search 的結果並不清晰,或者你想要關於一個軟體包的更多資訊,而不僅僅是它的通用名稱。有一些相關的 dnf 子命令,具體取決於你想要的資訊。

軟體包的後設資料

如果你覺得你的搜尋已  接近 想要的結果,但還不確定,檢視軟體包的後設資料通常會有所幫助,例如專案的網址和描述。要獲取此資訊,請使用顧名思義的 dnf info 命令:

$ dnf info terminator
Available Packages
Name : terminator
Version : 1.92
Release : 2.el8
Architecture : noarch
Size : 526 k
Source : terminator-1.92-2.el8.src.rpm
Repository : epel
Summary : Store and run multiple GNOME terminals in one window
URL : 
License : GPLv2
Description : Multiple GNOME terminals in one window. This is a project to produce
: an efficient way of filling a large area of screen space with
: terminals. This is done by splitting the window into a resizeable
: grid of terminals. As such, you can produce a very flexible
: arrangements of terminals for different tasks.

這個資訊告訴你可用軟體包的版本、在你係統中註冊的哪一個儲存庫提供了它、該專案的網站以及詳細的功能描述。

哪個軟體包提供的這個檔案?

軟體包名稱並不總是與你要查詢的內容相匹配。例如,假設你正在閱讀的文件告訴你必須安裝名為 qmake-qt5 的東西:

$ dnf search qmake-qt5
No matches found.

dnf 資料庫非常廣泛,因此你不要侷限於搜尋完全匹配的內容。你可以使用 dnf provides 命令來了解你正在尋找的東西是否作為某個更大的軟體包的一部分而提供:

$ dnf provides qmake-qt5
qt5-qtbase-devel-5.12.5-8.el8.i686 : Development files for qt5-qtbase
Repo : appstream
Matched from:
Filename : /usr/bin/qmake-qt5
qt5-qtbase-devel-5.15.2-3.el8.x86_64 : Development files for qt5-qtbase
Repo : appstream
Matched from:
Filename : /usr/bin/qmake-qt5

可以確認應用程式 qmake-qt5 是名為 qt5-qtbase-devel 的軟體包的一部分。它還告訴你,該應用程式會安裝到 /usr/bin,因此你知道了安裝後它的確切位置。

軟體包中包含哪些檔案?

有時我發現自己會從完全不同的角度來對待 dnf。有時,我已經確認我的系統上安裝了一個應用程式;我只是不知道我是怎麼得到它的。還有一些時候,我知道我安裝了一個特定的軟體包,但我不清楚這個軟體包到底在我的系統上安裝了什麼。 如果你需要對包的有效負載payload進行 “逆向工程reverse engineer”,可以使用 dnf repoquery 命令和 --list 選項。這將檢視儲存庫中有關軟體包的後設資料,並列出該軟體包提供的所有檔案:

$ dnf repoquery --list qt5-qtbase-devel
/usr/bin/fixqt4headers.pl
/usr/bin/moc-qt5
/usr/bin/qdbuscpp2xml-qt5
/usr/bin/qdbusxml2cpp-qt5
/usr/bin/qlalr
/usr/bin/qmake-qt5
/usr/bin/qvkgen
/usr/bin/rcc-qt5
[...]

能很長,使用 less 或你喜歡的分頁命令配合管道操作會有所幫助。

移除應用程式

如果你決定系統中不再需要某個應用程式,可以使用 dnf remove 解除安裝它,該軟體包本身安裝的檔案以及不再需要的任何依賴項都會被移除:

$ dnf remove bigapp

有時,你發現隨著一個應用程式一起安裝的依賴項對後來安裝的其他應用程式也有用。如果兩個包需要相同的依賴項,dnf remove 不會 刪除依賴項。在安裝和解除安裝大量應用程式之後,孤兒軟體包散落各處的現象並不少見。大約每年我都要執行一次 dnf autoremove 來清除所有未使用的軟體包:

$ dnf autoremove

這不是必需的,但這是一個讓我的電腦感覺更好的大掃除步驟。

瞭解 dnf

你對包管理器的工作方式瞭解得越多,在必要時安裝和查詢應用程式就越容易。即便你不是 dnf 的重度使用者,當你發現自己與基於 RPM 的發行版互動時,瞭解它也會很有用。

告別 yum 後,我最喜歡的包管理器之一是 dnf 命令。雖然我不喜歡它的所有子命令,但我發現它是目前最健壯的 包管理系統package management system 之一。 下載我們的 dnf 速查表 習慣該命令,不要害怕嘗試一些新技巧。一旦熟悉了它,你可能會發現很難使用其他任何東西替代它。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2894067/,如需轉載,請註明出處,否則將追究法律責任。

相關文章