Linux 包管理工具 dnf

了解如何使用 dnf 命令在 Linux 上安装软件包,然后下载我们的速查表,以便随时掌握正确的命令。
48 位读者喜欢这篇文章。

在计算机系统上安装应用程序非常简单。您只需将文件从存档文件(例如 .zip 文件)复制到目标计算机上操作系统期望应用程序存在的位置即可。因为我们很多人都习惯于使用花哨的安装“向导”来帮助我们在计算机上安装软件,所以这个过程看起来似乎在技术上应该比实际情况更复杂。

然而,真正复杂的是构成应用程序的要素问题。用户认为的单个应用程序实际上包含了从软件库(即 Linux 上的 .so 文件、Windows 上的 .dll 文件和 macOS 上的 .dylib 文件)借用的代码,这些代码分散在整个操作系统中。

为了让用户不必担心这种相互依赖的代码矩阵,Linux 使用软件包管理系统来跟踪哪个应用程序需要哪个库,哪个库或应用程序有安全更新或功能更新,以及每个软件包安装了哪些额外的数据文件。软件包管理器本质上就是一个安装向导。它们易于使用,既提供图形界面,也提供基于终端的界面,并且使您的生活更轻松。您越了解您的发行版的软件包管理器,您的生活就越轻松。

在 Linux 上安装应用程序

如果您是希望在 Linux 上安装应用程序的普通桌面用户,那么您可能正在寻找 GNOME 软件,这是一个桌面应用程序浏览器。

Image of the GNOME Software application

它的工作方式正如您所期望的那样:您在其界面中点击,直到找到一个看起来有用的应用程序,然后点击安装按钮。

或者,您可以打开从 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 速查表 以习惯该命令,并且不要害怕尝试一些新技巧。一旦您熟悉它,您可能会发现很难使用其他任何东西。

接下来阅读什么
Seth Kenlon
Seth Kenlon 是一位 UNIX 爱好者、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,并且经常同时从事这两个行业。

5 条评论

使用 dnf groups 比看起来更棘手。我更喜欢使用
dnf grouplist
来显示已安装和可用的组。棘手之处在于您尝试安装其中一个组。例如,假设您要安装
Development Tools
语法是
dnf group install "Development Tools"
这比尝试执行
dnf install @development-tools
更简单。这样对吗?还是
dnf install @DevelopmentTools
或其他什么?
手册页对此有点粗略。

我使用 -v 标志执行 grouplist,它在括号中列出了确切的组昵称。

$ dnf grouplist -v
RPM 开发工具 (rpm-development-tools)
开发工具 (development)
图形管理工具 (graphical-admin-tools)
$ sudo dnf install @development

可能还有其他方法可以做到这一点,但这就是我多年来一直这样做的方式,而且到目前为止还没有让我失望。

回复 作者 Greg P

dnf 是简化任务的强大命令吗?

有三个程序在运行:rpm、yum 和 dnf。为什么需要 3 个?

我不明白这个问题,因为不需要 3 个命令。我相信这篇文章有效地证明了这一点。

您列出的 3 个命令确实存在。我可以提供一些背景信息

* Yum 是历史遗留的,并且已经被重构为基于 libdnf。对于多年来一直喜欢 Yum 并且不想迁移的用户来说,它现在是 dnf 的可选界面。如果它最终被弃用或符号链接到 `dnf` 可执行文件,我不会感到惊讶。

* `rpm` 命令是 RPM 数据库的直接界面,用于跟踪系统上的软件包。它的存在是因为 Linux 为用户提供了许多工具,并且在用户的系统上放置数据库而无法与之通信将是一种遗憾。通常,您不应期望使用 `rpm` 命令,因为 dnf 是一种更友好、统一且强大的与 RPM 系统交互的方式。

回复 作者 paul

© . All rights reserved.