[Arch][Linux] Pacman 软件包管理器
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.conf
。 man pacman.conf
可以查看配置文件的进一步信息。
并行下载
Pacman 6.0 增加了并行下载选项,将 /etc/pacman.conf
中 [options]
选项 ParallelDownloads
设置成正整数,例如 5,将会同时下载 5 个软件包,如果未设置此选项,软件包将会被依次下载。
安全
pacman 支持软件包签名,会为软件包提供额外的安全性。默认配置,SigLevel = Required DatabaseOptional
将启用全局签名验证,但会被每个软件仓库的 SigLevel
行所覆盖。有关软件包签名和签名验证的更多细节,参见 pacman-key。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭