当前位置: 首页 > 科技观察

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

时间:2023-03-11 22:00:37 科技观察

Linux发行版有何不同?要点之一是包管理。在此解释的Linux术语中,您将了解Linux中的打包和包管理器。您将了解什么是包、什么是包管理器、它们如何工作以及有哪些包管理器。什么是包管理器?简单来说,“包管理器”(或“包管理器”)是一个允许用户在操作系统上安装、删除、升级、配置和管理软件的工具包。包管理器可以是软件中心等图形应用程序,也可以是apt-get或pacman等命令行工具。你会发现我在教程和文章中经常使用“包”这个词。要了解包管理器,您必须了解什么是包。什么是包裹?“包”(或“软件包”)一般是指一个应用程序,可以是GUI应用程序、命令行工具或软件库(其他软件程序需要)。包本质上是一个存档文件,其中包含二进制可执行文件、配置文件,有时还包含有关依赖项的信息。在过去,软件通常是从其源代码安装的。您参考一个文件(通常名为README)以查看它需要哪些软件组件以及二进制文件所在的位置。它通常包含配置脚本或Makefile。您必须自己编译软件或自己处理所有依赖项(某些软件需要安装其他软件)。为了摆脱这种复杂性,Linux发行版创建了自己的打包格式,为最终用户提供随时可用的二进制文件(预编译软件)来安装软件,以及一些元数据(版本号、描述)和依赖项。这就像烤蛋糕和买蛋糕一样。大约在20世纪90年代中期,Debian创建了DEB打包格式(.deb),而RedHatLinux创建了RPM(RedHatPackageManager的缩写)打包系统(.rpm)。编译源代码的方式仍然存在,但现在是可选的。要与打包系统交互或使用它,您需要一个包管理器。包管理器如何工作?请记住,包管理器是一个通用概念,并不是Linux独有的。您经常会发现各种软件或编程语言的包管理器。只有Python包的PIP包管理器。甚至Atom编辑器也有自己的包管理器。由于本文的重点是Linux,因此我将从Linux的角度出发。然而,这里的大部分解释也适用于一般的包管理器。我创建了这张图(基于SUSEWiki),以便您可以轻松了解包管理器的工作原理。几乎所有的Linux发行版都有一个“软件存储库”,它基本上是软件包的集合。是的,可以有多个存储库。软件存储库包含不同种类的软件包。软件仓库还有元数据文件,元数据文件包含软件包的信息,如软件包名称、版本号、软件包描述、软件仓库名称等。这就是您在Ubuntu/Debian中使用aptshow命令看到的内容。您系统上的包管理器首先与元数据交互。包管理器在您的系统上创建一个本地元数据缓存。当您运行包管理器的更新选项(例如aptupdate)时,它会通过引用存储库中的元数据来更新本地元数据缓存。包管理器在您运行其安装命令(例如aptinstallpackage_name)时引用此缓存。如果它在缓存中找到包的信息,它会使用Internet连接到相应的存储库并下载包,然后再将其安装到您的系统上。一个包可能有依赖关系。这意味着,它可能需要安装额外的包。包管理器通常会处理这些依赖项并自动将它们与您正在安装的包一起安装。Linux中的包管理器处理依赖关系。同样,当您使用包管理器删除包时,它会自动删除它,或者通知您系统中有未使用的包可以清理。除了安装和删除这些明显的任务之外,您还可以使用包管理器来配置包并根据需要进行管理。例如,您可以防止在常规系统更新期间更新包版本。您的包管理器可能可以做更多的事情。不同类型的包管理器包管理器因打包系统而异,但同一打包系统可能有多个包管理器。例如,RPM有Yum和DNF包管理器。对于DEB,你有基于命令行的包管理器,如apt-get、aptitude等。SynapticPackageManager包管理器不一定是基于命令行的,还有图形包管理工具,如Synaptic。您的发行版的“软件中心”也是一个包管理器,即使它在后台运行apt-get或DNF。结论我不想在这个话题上做更多的细节,虽然我可以继续下去,但这会偏离这个话题的目标——让你对Linux中的包管理器有一个基本的了解。我暂时忽略新的通用打包格式,如Snap和Flatpak。