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

它的工作方式正如您所期望的那样:您在其界面中单击,直到找到一个看起来有用的应用程序,然后单击安装按钮。
或者,您可以打开从网络下载的 .rpm
或 .flatpakref
软件包,在 GNOME Software 中安装它们。
如果您倾向于使用键入的命令来控制您的计算机,请继续阅读!
使用 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 条评论