Skip to content

包管理工具

包管理器(package manager)是一个允许用户在操作系统上安装、删除、升级以及管理软件包的工具。

包(package)通俗讲就是一个应用程序,它可以是 GUI、CLI 或者仅仅是一个依赖库(其他应用程序需要的)。

在原始时代,软件都是从源码安装的。为了摆脱这种复杂性,Linux 发行版创建了自己的打包格式,为用户提供了编译好了的二进制文件,并且提供了一些元数据(版本号、描述)和依赖关系。这其中最为著名的就是 Debian 创建的 .deb 以及 RedHat 创建的 .rpm

二进制包安装本质上就是从根目录中解压文件,当然这牵扯到权限管理、依赖管理等其他额外功能

包管理器

package manager

上图涵盖了包管理器的主要组件,几乎所有的 Linux 发行版都提供了软件仓库(software repository),他是软件包的集合。软件仓库中也包含元数据文件(package metadata)以及软件包(package)和软件包依赖(package dependencies)。

软件仓库元数据

Linux 系统上的软件包管理器(package manager)首先与软件仓库的元数据进行交互,元数据中包含了软件包的名称、版本号、描述等等信息:

Bash
apt show <package-name>

dnf info <package-name>

pacman -Si <package-name>

之后会在系统上创建元数据的本地缓存,我们所说的更新系统的第一步就是使用软件仓库来更新本地的缓存:

Bash
apt update

dnf makecache # dnf check-update

pacman -Sy

搜索软件包

本地元数据缓存是以数据库的形式存在的,搜索实际上就是对他的搜索:

Bash
apt search <package-name>

dnf search <package-name>

pacman -Ss <package-name>

安装软件

当我们想要安装软件时,软件包管理器会首先引用缓存从中获取软件包信息,之后从软件仓库的对应位置下载软件包然后安装到系统中:

Bash
apt install <pacakge-name>

dnf install <package-name>

pacman -S <package-name>

在安装前会自动检查软件包的依赖,来构建依赖树最终他们会被一起安装。

狭义的包管理器

我们打交道的通常都是 apt、dnf 这样的命令,他们实际上线上前端工具,旨在解决包依赖的。而狭义上的包管理器是 rpm、dpkg 这样的命令。

大多数时候我们只需要使用 apt、dnf 就可以了。

arch 不太一样,pacman -Q是管理本地的,而pacman -S是对仓库的操作

各种软件包管理器

不同 Linux 发行版最大的区别可能就是软件包管理器的不同,不过在不断的进化中提供的功能也都趋于相同: