学习如何使用 apt 命令在基于 Debian 的 Linux 发行版上安装软件包，然后下载我们的速查表，让正确的命令触手可及。包管理器 可帮助你处理 Linux 系统的计算机上软件的更新、卸载、故障排除等问题。Seth Kenlon 写了 使用 dnf 进行 Linux 包管理 一文，介绍了如何使用 dnf 这款命令行包管理工具，在 RHEL、CentOS、Fedora、Mageia、OpenMandriva 等 Linux 发行版中安装软件。Debian 和基于 Debian 的发行版（例如 MX Linux、Deepin、Ubuntu）以及基于 Ubuntu 的发行版（例如 Linux Mint 和 Pop!\_OS）都有 apt，这是一个“相似但不同”的工具。在本文中，我将按照 Seth 的示例（但使用 apt）向你展示如何使用它。在一开始，我想先提一下四个跟 apt 相关的软件安装工具：Synaptic 是为 apt 服务的一个基于 GTK+ 的图形用户界面（GUI）的前端工具。Aptitude 是为 apt 服务的一个基于 Ncurses 的全屏命令行前端工具。apt 的前身有 apt-get、apt-cache 等工具。Dpkg 是在 apt 包管理器背后处理繁杂事务的”幕后工作者“。还有其他的包管理系统，例如 Flatpak 和 Snap，你可能会在 Debian 和基于 Debian 的系统上遇到它们，但我不打算在这里讨论。还有一些应用程序“商店”，例如 GNOME “软件”，与 apt 和其他打包技术重叠；我也不打算在这里讨论它们。最后，还有其他 Linux 发行版，例如 Arch 和 Gentoo 既不使用 dnf 也不使用 apt，我也不打算在这里讨论它们！上面我讲了这么多我不想提及的内容，你可能怀疑 apt 到底还能处理多少软件。这么说吧，在我的 Ubuntu 20.04 上，apt 可以让我使用 69,371 个软件包，从 0ad（一款古代战争题材的即时战略游戏）到 zzuf（一个透明的应用程序模糊测试工具），一点也不差。使用 apt 搜索软件使用 apt 软件包管理器的第一步是找到感兴趣的软件包。Seth 的 dnf 文章以 Cockpit 服务器管理应用程序为例。用 apt 我会输入如下命令：$ apt search cockpit Sorting... Done Full Text Search... Done 389-ds/hirsute,hirsute 1.4.4.11-1 all 389 Directory Server suite - metapackage cockpit/hirsute,hirsute 238-1 all Web Console for Linux servers ... $ 上面的第二个包就是你要的那个（以 cockpit/hirsute 开头的那一行）。如果你决定要安装它，输入：$ sudo apt install cockpit apt 将负责安装 Cockpit 以及使其工作所需的所有部件或 依赖。有时我们不太确定这是我们所需要的。了解更多的信息可能有助于你决定是否真的要安装此应用程序。包元数据要了解有关软件包的更多信息，使用 apt show 命令：$ apt show cockpit Package: cockpit Version: 238-1 Priority: optional Section: universe/admin Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 88.1 kB Depends: cockpit-bridge (>= 238-1), cockpit-ws (>= 238-1), cockpit-system (>= 238-1) Recommends: cockpit-storaged (>= 238-1), cockpit-networkmanager (>= 238-1), cockpit-packagekit (>= 238-1) Suggests: cockpit-doc (>= 238-1), cockpit-pcp (>= 238-1), cockpit-machines (>= 238-1), xdg-utils Homepage: https://cockpit-project.org/ Download-Size: 21.3 kB APT-Sources: http://ca.archive.ubuntu.com/ubuntu hirsute/universe amd64 Packages Description: Web Console for Linux servers The Cockpit Web Console enables users to administer GNU/Linux servers using a web browser. . It offers network configuration, log inspection, diagnostic reports, SELinux troubleshooting, interactive command-line sessions, and more. $ 特别要注意的是 Description 字段，它会告诉你更多关于应用程序的信息。Depends 字段说明还必须安装什么，而 Recommends 则显示建议安装的其他（如果有的话）合作组件。Homepage 字段会提供一个网址，通过它你可以了解更多。哪个包提供的这个文件？有时你并不知道包名，但你知道包里一定包含着的某个文件。Seth 以 qmake-qt5 程序作为示例。使用 apt search 找不到它：$ apt search qmake-qt5 Sorting... Done Full Text Search... Done $ 但是，另一个有关联的命令 apt-file 可以用来探索包内部：$ apt-file search qmake-qt5 qt5-qmake-bin: /usr/share/man/man1/qmake-qt5.1.gz $ 这时会显示一个 qmake-qt5 的手册页。它是一个名为 qt5-qmake-bin 的包的一部分。注意，此包名称颠倒了字符串 qmake 和 qt5 的顺序。包里包含哪些文件？方便的 apt-file 命令会列出给定的包中包含哪些文件。例如：$ apt-file list cockpit cockpit: /usr/share/doc/cockpit/TODO.Debian cockpit: /usr/share/doc/cockpit/changelog.Debian.gz cockpit: /usr/share/doc/cockpit/copyright cockpit: /usr/share/man/man1/cockpit.1.gz cockpit: /usr/share/metainfo/cockpit.appdata.xml cockpit: /usr/share/pixmaps/cockpit.png $ 注意，这与 apt show 命令提供的信息不同，后者列出了包的依赖（其他必须安装的包）。移除一个应用程序你还可以使用 apt 移除软件包。例如，要移除apt-file 应用程序：$ sudo apt purge apt-file 注意必须由超级用户运行 apt 才能安装或移除应用程序。移除一个包并不会自动移除 apt 在此过程中安装的所有依赖项。不过，一点点的工作就很容易去除这些残留：$ sudo apt autoremove 认识一下 apt正如 Seth 所写的，“你对包管理器的工作方式了解得越多，在需要安装和查询应用程序时就会越容易。”即便你不是 apt 的重度使用者，当你需要在命令行中安装或删除软件包时（例如，在一台远程服务器上或遵循某些热心肠发布的操作指南时），掌握一些 apt 的知识也会很有用。在某些软件创作者仅提供了一个裸 .pkg 文件的情况下，可能还需要了解一些关于 dpkg 的知识（如上所述）。我发现 Synaptic 包管理器在我的桌面上是一个非常有用的工具，但出于各种目的，我也在少数维护的服务器上使用着 apt。下载我们的 apt 速查表 习惯该命令并尝试一些新技巧。一旦你这样做了，你可能会发现很难再使用其他任何东西。apt 速查表via: https://opensource.com/article/21/6/apt-linux作者：Chris Hermansen 选题：lujun9972 译者：hanszhao80 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
了解如何在 Linux 上使用 dnf 命令安装软件包，然后下载我们的速查表，让正确的命令触手可及。在计算机系统上安装应用程序非常简单：就是将档案（如 .zip 文件）中的文件复制到目标计算机上，放在操作系统预期放应用程序的位置。因为我们中的许多人习惯于使用花哨的安装“向导”来帮助我们在计算机上安装软件，所以这个过程似乎在技术上应该比实际更复杂。然而，复杂的是，是什么构成了一个程序？用户认为的单个应用程序实际上包含了分散在操作系统中的软件库的各种依赖代码（例如：Linux 上的 .so 文件、Windows 上的 .dll 文件和 macOS 上的 .dylib 文件）。为了让用户不必担心这些程序代码之间的复杂的互相依赖关系， Linux 使用 包管理系统 package management system 来跟踪哪些应用程序需要哪些库，哪些库或应用程序有安全或功能更新，以及每个软件会附带安装哪些额外的数据文件。包管理器本质上是一个安装向导。它们易于使用，提供了图形界面和基于终端的界面，让你的生活更轻松。你越了解你的发行版的包管理器，你的生活就会越轻松。在 Linux 上安装应用程序如果你在使用 Linux 桌面时，偶尔想要安装一个应用程序，那么你可能正在寻找 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 : 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。有时，我已经确认我的系统上安装了一个应用程序；我只是不知道我是怎么得到它的。还有一些时候，我知道我安装了一个特定的软件包，但我不清楚这个软件包到底在我的系统上安装了什么。如果你需要对包的 有效负载 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 速查表 习惯该命令，不要害怕尝试一些新技巧。一旦熟悉了它，你可能会发现很难使用其他任何东西替代它。dnf 速查表via: https://opensource.com/article/21/6/dnf-linux作者：Seth Kenlon 选题：lujun9972 译者：hanszhao80 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出