在计算机系统上安装应用程序非常简单。您只需将文件从存档文件(例如 .zip 文件)复制到目标计算机上操作系统期望应用程序存在的位置即可。因为我们很多人都习惯于使用花哨的安装“向导”来帮助我们在计算机上安装软件,所以这个过程看起来似乎在技术上应该比实际情况更复杂。
然而,真正复杂的是构成应用程序的要素问题。用户认为的单个应用程序实际上包含了从软件库(即 Linux 上的 .so
文件、Windows 上的 .dll
文件和 macOS 上的 .dylib
文件)借用的代码,这些代码分散在整个操作系统中。
为了让用户不必担心这种相互依赖的代码矩阵,Linux 使用软件包管理系统来跟踪哪个应用程序需要哪个库,哪个库或应用程序有安全更新或功能更新,以及每个软件包安装了哪些额外的数据文件。软件包管理器本质上就是一个安装向导。它们易于使用,既提供图形界面,也提供基于终端的界面,并且使您的生活更轻松。您越了解您的发行版的软件包管理器,您的生活就越轻松。
在 Linux 上安装应用程序
如果您是希望在 Linux 上安装应用程序的普通桌面用户,那么您可能正在寻找 GNOME 软件,这是一个桌面应用程序浏览器。

它的工作方式正如您所期望的那样:您在其界面中点击,直到找到一个看起来有用的应用程序,然后点击安装按钮。
或者,您可以打开从 Web 下载的 .rpm
或 .flatpakref
软件包,在 GNOME 软件中安装它们。
如果您倾向于使用键入的命令控制计算机,请继续阅读!
使用 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
子命令。
软件包元数据
如果您觉得您的搜索已经很接近您想要的软件包,但您还不确定,那么查看软件包的元数据(例如项目的 URL 和描述)通常很有帮助。要获取此信息,请使用令人愉悦且直观的 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 : https://github.com/gnome-terminator
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
。有时,我已经确认应用程序已安装在我的系统上;但我只是想不出我是如何安装它的。有时,我知道我安装了特定的软件包,但我不清楚该软件包到底在我的系统上安装了什么。
如果您需要“逆向工程”软件包的有效负载,可以使用 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
命令。虽然我不喜欢它的所有子命令,但我发现它是目前最强大的软件包管理系统之一。 下载我们的 dnf
速查表 以习惯该命令,并且不要害怕尝试一些新技巧。一旦您熟悉它,您可能会发现很难使用其他任何东西。
5 条评论