Linux 黑话解释:什么是包管理器?它是如何工作的?


Linux 黑话解释:什么是包管理器?它是如何工作的?文章插图
Linux 发行版之间有什么不同的要点之一是包管理 。
? 来源:linux.cn ? 作者:Abhishek Prakash ? 译者:Xingyu.Wang ?
(本文字数:2364 , 阅读时长大约:3 分钟)
【Linux 黑话解释:什么是包管理器?它是如何工作的?】Linux 发行版之间有什么不同 的要点之一是包管理 。 在这篇 Linux 黑话解释中 , 你将了解 Linux 中的打包和包管理器 。 你将了解什么是包 , 什么是包管理器 , 它们是如何工作的 , 以及有什么包管理器 。
什么是包管理器?简单来说 , “ 包管理器(package manager)”(或“软件包管理器”)是一种工具 , 它允许用户在操作系统上安装、删除、升级、配置和管理软件包 。 软件包管理器可以是像“软件中心”这样的图形化应用 , 也可以是像 apt-get 或 pacman 这样的命令行工具 。
你会发现我经常在教程和文章中使用“包”这个词 。 要了解包管理器 , 你必须了解什么是包 。
什么是包?一个“ 包(package)”(或“软件包”)通常指的是一个应用程序 , 它可以是一个 GUI 应用程序、命令行工具或(其他软件程序需要的)软件库 。 包本质上是一个存档文件 , 包含二进制可执行文件、配置文件 , 有时还包含依赖关系的信息 。
在旧时代 ,软件曾经是从它的源代码安装的。 你会参考一个文件(通常命名为 README) , 看看它需要什么软件组件、二进制文件的位置 。 它通常包括一个配置脚本或 Makefile 。 你必须自己编译该软件或自己处理所有的依赖关系(有些软件需要安装其他软件) 。
为了摆脱这种复杂性 , Linux 发行版创建了自己的打包格式 , 为终端用户提供随时可用的二进制文件(预编译软件) , 以便安装软件 , 同时提供一些 元数据 (版本号、描述)和依赖关系 。
这就像烤蛋糕与买蛋糕一样 。
Linux 黑话解释:什么是包管理器?它是如何工作的?文章插图
大约在上世纪 90 年代中期 , Debian 创建了 DEB 打包格式(.deb) , Red Hat Linux 创建了 RPM(Red Hat Package Manager 的缩写)打包系统(.rpm) 。 编译源代码的方式仍然存在 , 但现在是可选的 。
要与打包系统交互或使用打包系统 , 你需要一个包管理器 。
包管理器是如何工作的?请记住 , 包管理器是一个通用的概念 , 它并不是 Linux 独有的 。 你会经常发现各种软件或编程语言的包管理器 。 有 只是针对 Python 包的 PIP 包管理器。 甚至 Atom 编辑器也有自己的包管理器。
由于本文的重点是 Linux , 所以我会从 Linux 的角度出发 。 不过 , 这里的大部分解释也可以应用于一般的包管理器 。
我创建了这个图(基于 SUSE Wiki) , 这样你就可以很容易理解包管理器是如何工作的 。
Linux 黑话解释:什么是包管理器?它是如何工作的?文章插图
几乎所有的 Linux 发行版都有“ 软件仓库(software repository)” , 它基本上是软件包的集合 。 是的 , 可以有不止一个软件库 。 软件库包含不同种类的软件包 。
软件仓库也有元数据文件 , 其中包含了软件包的信息 , 如软件包的名称、版本号、软件包的描述和软件仓库名称等 。 这就是你在 Ubuntu/Debian 中使用 apt show 命令 所看到的 。
你的系统上的包管理器首先会与元数据进行交互 。 包管理器在你的系统上创建了一个元数据的本地缓存 。 当你运行包管理器的更新选项(例如 apt update)时 , 它会通过引用仓库中的元数据来更新本地元数据缓存 。
当你运行软件包管理器的安装命令(例如 apt install package_name)时 , 软件包管理器会引用这个缓存 。 如果它在缓存中找到了包的信息 , 它就会使用互联网连接到相应的仓库 , 并在你的系统上安装之前先下载包 。