什么是 Linux 中的包管理器?它是如何工作的?

什么是 Linux 中的包管理器?

简单来说,包管理器是一种允许用户在操作系统上安装、删除、升级、配置和管理软件包的工具。包管理器可以是图形应用程序,如软件中心,也可以是命令行工具,如 apt-get 或 pacman。

你可能经常会发现 Linux 中使用的术语 “包”。要了解包管理器,您必须了解什么是包。

先来了解一下什么是包

“包” 也可以称之 “软件包”,通常是指应用程序,它可以是 GUI 应用程序、命令行工具或软件库(其他软件程序需要)。包本质上是一个存档文件,其中包含二进制可执行文件、配置文件,有时还包括有关依赖项的信息。

在过去,软件习惯于从其源代码安装。您将引用一个文件(通常称为自述文件)并查看它需要哪些软件组件,二进制文件的位置。通常包含配置脚本或生成文件。您必须自行编译软件或自行处理所有依赖项。

为了摆脱这种复杂性,各个 Linux 发行版创建了自己的打包格式,为最终用户提供用于安装软件的即用型二进制文件(预编译软件)以及一些元数据(版本号、描述)和依赖项。

这就像自己买材料烤蛋糕与去超市买成品蛋糕一样。把一些繁琐的工作简化成一步完成。

什么是 Linux 中的包管理器?它是如何工作的?插图

大约在90年代中期,Debian 创建了 .deb 或 DEB 打包格式,Red Hat Linux 创建了 .rpm 或 RPM(Red Hat Package Manager)打包系统。要与这些打包系统交互或使用打包系统,您需要一个包管理器。

包管理器如何工作?

请记住,包管理器是一个通用概念,它不是 Linux 独有的。您经常会找到适用于不同软件或编程语言的包管理器。有专门用于 Python 包的 PIP 包管理器。甚至 Atom 编辑器也有自己的包管理器。

由于本文的重点是 Linux,我将从 Linux 的角度出发。这个图让您轻松了解包管理器的工作原理。

什么是 Linux 中的包管理器?它是如何工作的?插图1

几乎所有的 Linux 发行版都有自己的软件存储库,基本上是软件包的集合。也可能有多个存储库。存储库包含不同类型的软件包。

存储库还具有元数据文件,其中包含有关包的信息,例如包的名称、版本号、包的描述和存储库名称等。这就是你在 Ubuntu/Debian 中使用 apt show 命令时看到的。

系统的包管理器首先与元数据交互。包管理器会在系统上创建元数据的本地缓存。当您运行包管理器的更新选项(例如 apt update)时,它会通过引用存储库中的元数据来更新此元数据的本地缓存。

当您运行包管理器的安装命令(例如 apt install package_name)时,包管理器会引用此缓存。如果它在缓存中找到软件包信息,它将使用 Internet 连接连接到相应的存储库,并在系统上安装之前先下载软件包。

包可能具有依赖项。这意味着它可能需要安装其他软件包。包管理器通常会处理依赖项,并将其与要安装的包一起自动安装。

同样,当您使用软件包管理器删除软件包时,它会自动删除或通知您系统具有可以清理的未使用软件包。

除了安装、删除的明显任务外,您还可以使用包管理器来配置包并根据需要管理它们。例如,您可以阻止从常规系统更新升级软件包版本。您的包管理器可能还具有更多功能。

不同类型的包管理器

包管理器因打包系统而异,但同一包系统也可能有多个包管理器。

例如,RPM 有 Yum 和 DNF 包管理器。对于 DEB,您有基于 apt-get、aptitude 命令行的包管理器。

包管理器不一定基于命令行。也有图形包管理工具,例如 Synaptic。您的发行版的软件中心也是一个包管理器,即使它运行 apt-get 或 DNF。

结论

我不想在这个话题上进一步详细介绍,因为我可以继续说下去。但它会偏离本主题的目标,即让您对 Linux 中的包管理器有一个基本的了解。所以我暂时省略了像 Snap 和 Flatpak 这样的新的通用打包格式。

标签

发表评论