pacman 软件包管理器是 Arch Linux 的一大亮点。它将一个简单的二进制包格式和易用的构建系统结合了起来。Pacman的目标是简化对软件包的管理,无论软件包是来自官方软件仓库还是用户自己创建的软件包。

Pacman 通过和主服务器同步软件包列表来保持系统是最新的。这种服务器/客户端模式可使得用户使用简单的命令,就能下载或安装软件包,并包含其所有必需的依赖包。

Pacman 用 C 语言编写,并使用 bsdtar(1) tar 作为打包格式。


安装

  • 安装单个或者一系列软件包(包含软件包的依赖),
pacman -S package_name1 package_name2 ...
  • 通过正则表达式安装一系列软件包(见 论坛帖子
pacman -S $(pacman -Ssq package_regex)
  • 安装 extra 仓库的版本,需要在包名称前定义仓库名,
pacman -S extra/package_name
  • 查看哪些包属于 gnome 组,
pacman -Sg gnome

注意: 如果列表中的包已经安装在系统中,它会被重新安装,即使它已经是最新的。可以用 --needed 选项覆盖这种行为。

  • 下载包而不安装它,
pacman -Sw package_name
  • 安装一个本地包(不从源里下载),
pacman -U /path/to/package/package_name-version.pkg.tar.xz
  • 将本地包保存至缓存,
pacman -U file:///path/to/package/package_name-version.pkg.tar.xz
  • 安装一个远程包(不在 pacman 配置的源里面),
pacman -U http://www.example.com/repo/example.pkg.tar.xz

删除

  • 删除单个软件包,保留其全部已经安装的依赖关系,
pacman -R package_name
  • 删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系,
pacman -Rs package_name
  • 上面这条命令在移除包含其他所需包的组时有时候会拒绝运行。这种情况下可以尝试,
pacman -Rsu package_name
  • 要删除软件包和所有依赖这个软件包的程序,
pacman -Rsc package_name
  • 删除一个被其他软件包依赖的软件包,但是不删除依赖这个软件包的其他软件包,
pacman -Rdd package_name

警告: 此操作有破坏系统的能力,应该尽量避免使用。

  • 删除某些程序时会备份重要配置文件,在其后面加上*.pacsave扩展名。-n 选项可以避免备份这些文件,
pacman -Rn package_name

升级

  • 同步非本地(local)软件仓库并升级系统的软件包,
pacman -Syu

查询

  • -Q: 参数查询本地软件包数据库
  • -S: 查询同步数据库
  • -F: 查询文件数据库
  • 在包数据库中查询软件包,查询位置包含了软件包的名字和描述,
pacman -Ss string1 string2 ...
  • 有时,-s 的内置正则会匹配很多不需要的结果,所以应当指定仅搜索包名,而非描述或其他子段
pacman -Ss '^vim-'
  • 查询已安装的软件包,
pacman -Qs string1 string2 ...
  • 按文件名查找软件库,
pacman -F string1 string2 ...
  • 显示软件包的详尽的信息,
pacman -Si package_name
  • 查询本地安装包的详细信息,
pacman -Qi package_name
  • 使用两个 -i 将同时显示备份文件和修改状态,
pacman -Qii package_name
  • 罗列所有不再作为依赖的软件包(孤立orphans),
pacman -Qdt

注意:通常这些是可以妥妥的删除的。
sudo pacman -Qqdt | sudo pacman -Rns - 或者
sudo pacman -Rns $(pacman -Qdtq)

  • 罗列所有明确安装而且不被其它包依赖的软件包,
pacman -Qet

pacman -Q -h 更多参数:

|:-|:-|
-c, --changelog | 查看包的更改日志
-d --deps | 列出作为依赖项安装的软件包[filter]
-e --explicit | 列出显式安装[filter]
-g --groups | 查看包组的所有成员
-i --info | 查看包信息(-ii表示备份文件)
-k --check | 检查包文件是否存在(-kk用于文件属性)
-l --list | 列出查询包所拥有的文件
-n --native | 列出已安装的软件包只能在同步数据库中找到[过滤器]
-p --file <package> | 查询包文件而不是数据库
-q --quiet | 显示查询和搜索的信息较少
-t --unrequired | 列出所有包都不需要(可选)的包(-tt忽略optdepends)[filter]...


清理缓存

pacman 将下载的软件包保存在 /var/cache/pacman/pkg/ 并且不会自动移除旧的和未安装版本的软件包。这样做有一些好处:

  • 这样允许降级软件包而不需要通过其他方式提取旧版本,例如 Arch Linux Archive.
  • 被卸载的软件包可以轻易地直接从缓存文件夹重新安装,不需要重新从软件仓库下载。

然而,需要定期手动清理缓存来避免该文件夹无限制增大。

  • 删除目前没有安装的所有缓存的包,和没有被使用的同步数据库,
pacman -Sc
  • 删除缓存中的全部文件,使用两次-c开关。这是最为激进的方式,将会清空缓存文件夹,
pacman -Scc

其它命令

安装原因

pacman 数据库将软件包按照安装的原因分为两类:

  • 显式安装:那些真正地被传递给通用 pacman -S-U 命令的包;
  • 依赖:那些虽然(一般)从未被传递给 pacman 安装命令,但由于被其它显式安装的包需要从而被隐式安装的包

当安装软件包时,可以把安装原因强制设为依赖

pacman -S --asdeps package_name
  • 该命令使用的原因通常是显式安装的包可能会提供可选安装包,这些包提供了非必须功能,可供用户自由选择。
  • 重新安装该软件包,当前安装原因默认会被保留。
  • 显式安装的软件包列表可用 pacman -Qe 获取, 设置为依赖的软件包可用 pacman -Qd 获取。

配置

pacman 的配置文件位于 /etc/pacman.confman pacman.conf 可以查看配置文件的进一步信息。

并行下载

Pacman 6.0 增加了并行下载选项,将 /etc/pacman.conf[options] 选项 ParallelDownloads 设置成正整数,例如 5,将会同时下载 5 个软件包,如果未设置此选项,软件包将会被依次下载。

安全

pacman 支持软件包签名,会为软件包提供额外的安全性。默认配置,SigLevel = Required DatabaseOptional 将启用全局签名验证,但会被每个软件仓库的 SigLevel 行所覆盖。有关软件包签名和签名验证的更多细节,参见 pacman-key

文章目录