Skip to content

pacman

pacman是 archlinux 系的软件包管理器。

Bash
pacman [options] [targets]

command

他所有的操作被分为七个大类:

Bash
--database/-D: 对软件包数据库的操作
--query/-Q: 查询包数据库(本地),例如查看已安装包以及各个软件包的元信息
--remove/-R: 删除软件包
--sync/-S: 同步包,与远程仓库相关的内容都需要指定他,例如安装包、更新包、更新数据库
--deptest/-T: 检查依赖关系
--upgrade/-U: 更新软件包
--files/-F: 查询数据库文件,用于查找某些文件的属包以及包包含的文件,与 -Q 的区别在于他搜索的是同步数据库(远程)

配合这七类操作还具有一些更加细致的选项。

最常用的就是 -Q 和 -S 他们的操作源一个是本的数据库一个是远程数据库。-R 用于删除也比较常用。其他的通常不会用到或者说能够使用 -Q -S 来替代

Database Options(适用于 -D)

他操作的对象是本地的软件包数据库,它具有几个选项:

Bash
--asdeps <package> : 将软件包标记为未显式安装及将安装原因设置为依赖项
--asexplicit <package> : 将软件包标记为显式安装,如果要保持安装包,即使它最初是作为另一个包的依赖项安装的,这也很有用
--check/-k: 检查本地包数据库是否有损坏

Query Options(适用于 -Q)

操作的对象是本地的软件包数据库:

Bash
--changelog/-c: 查看包的 ChangeLog(如果存在)
--deps/-d: 将输出限制为作为依赖项安装的包, 此选项可以与 -t 结合使用,以列出真正的孤立包
--explicit/-e: 将输出限制为显式安装的包, 此选项可以与 -t 结合使用,以列出其他文件不需要的显式安装的包
--foreign/-m: 将输出限制为在同步数据库中找不到的包, 例如 aur 中安装的包就是这类情况
--native/-n: 将输出限制为同步数据库中存在的包 -m 的反义
--groups/-g <group-package>: 显示属于命名组的所有包
--info/-i <package>: 显示给定包的信息
--check/-k <package>: 检查系统上的软件包的文件,会与 mtree 文件进行比对
--list/-l <package>: 列出给定软件包的所有文件(files 文件的内容)
--owns/-o <file>: 搜索拥有指定文件的包,file 可以是相对路径或绝对路径
--search/-s <regexp>: 查询本地安装的软件包名称、说明

Query 仅仅查询,-D 会修改本地数据库的一些内容

Remove Options(适用于 -R)

删除软件包,同样的他会删除本地的软件包数据库中对应的该包的内容:

Bash
--cascade/-c: 删除指定软件包以及其依赖,这还包含依赖的依赖。此操作是递归的可能会删除大量的软件包必须谨慎使用。
--nosave/-n: 删除配置文件
--recursive/-s: 删除软件包以及不需要的依赖
--unneeded/-u: 删除不需要的软件包,这在删除软件包组时非常有用

最常使用的命令就是:

Bash
pacman -Rns package_name # 删除软件包及其配置和依赖

Sync Options(适用于 -S)

他操作的是远程数据库(sync)即信息源是远程的,但是也会向本地数据库中写入内容:

Bash
--clean/-c: 从缓存中删除不需要的包 --cc 会清除所有(有时候安装出现问题可能需要这样,以为如果缓存存在不会在下载新的)
--groups/-g: 查看软件包组以及其中的所有包
--info/-i: 包信息
--list/-l: 类出远程数据库中的所有软件包
--search/-s <regex>: 搜索远程数据库
--sysupgrade/-u: 升级所有安装包
--refresh/-y: 更新远程数据库(sync)

最常使用的命令组合:

Bash
pacman -S package_name # 安装软件
pacman -Syyu           # 首先更新本的 sync 数据库,然后更新所有已安装软件

相关配置文件和目录

Bash
RootDir = /                         # 安装根目录, --root/-r 能够指定通常只有在重新安装或修复的时候会用到
DBPath = /var/lib/pacman/           # 数据库目录,其中包含 local 和 sync
CacheDir = /var/cache/pacman/pkg/   # 缓存目录,包含了下载的包和校验文件
HookDir = /etc/pacman.d/hooks/
GPGDir = /etc/pacman.d/gnupg/
LogFile = /var/log/pacman.log       # log 文件

本地软件包数据库

本地软件包数据库保存在/var/lib/pacman/local目录下。该目录下每一个安装的软件包都会有一个目录:

Bash
[yangguodong@archlinux python-3.11.6-1]$ tree
.
├── desc         # 包描述信息
├── files        # 包包含的文件路径信息
└── mtree        # gzip 包含了包安装的一些信息,权限、路径、文件的 md5 校验等信息

应该还可能会有 changelog 文件

远程软件包数据库

位于/var/lib/pacman/sync目录下,它包含了:

Bash
[yangguodong@archlinux sync]$ tree
.
├── core.db
├── core.files
├── extra.db
└── extra.files

也就是每一个仓库都包含了 db files两个文件:

  • *.db: 类似于本地的 desc 文件,不过是包含所有软件包的
  • *.files: 类似与本地的 files 文件,不过是包含所有软件包的

他们都使用了 gzip 压缩

配置文件

pacman 的配置文件为/etc/pacman.conf。可以使用 pacman-conf 来查看所有应用的配置。

配置仓库源

默认的在配置文件中配置源的方式是:

Bash
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist

猜测意思也知道真正的配置仓库源文件是/etc/pacman.d/mirrorlist:

Bash
Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = rsync://rsync.mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

archlinux 还提供了reflector来自动生成该文件:

Bash
# --country 指定国家
# --sort 排序 rate 下载速度
# --lastest 5 最佳的 5 个
# --save 写入指定文件(否则会输出到控制台)
reflector --country China --lastest 5 --sort rate --save /etc/pacman.d/mirrorlist

reflector 软件包在安装时是包含在 iso 文件中的,而新安装的系统没有。他并不是 pacman 的依赖只是一个便捷工具

AUR

AUR(Arch User Repository)即 Arch 用户仓库。他是一个面向 Arch 用户的社区驱动的仓库。它包含软件包描述(PKGBUILDs)允许使用 makepkg 从源代码编译软件包,然后通过 pacman 安装它。

官方存储库的大量新软件包都是从 AUR 开始的,在 AUR 中用户可以贡献自己的包构建。社区的用户会对他们进行投票如果一个软件包变得足够流行并且具有可用的开源许可证就会被放入 extra 仓库中。

安装软件包

安装软件包的本质上分为几个步骤:

  1. 获取构建文件即 PKGBUILD 文件,其中定义了源码下载地址、依赖、执行脚本等,其中还可能包括 systemd unit 或者其他补丁(他们都由 AUR 仓库提供,可以使用 git 来获取当然 curl 也完全没问题)
  2. 验证 PKGBUILD 是否是可信文件
  3. 执行 makepkg 来下载代码并编译他们并最终打包他们
  4. 运行 pacman -U package_file来安装

AUR 安装默认用户已经安装了 base-devel 这个构建环境包

更新包

AUR 的软件包更新需要用户自己负责,说白了就是重新安装。

AUR 助手

AUR 的整个安装都是需要手动完成的,官方并没有提供工具来自动完成。好在开源社区提供了他们,他们也被称为 AUR 助手。一个合格的 AUR 助手应当具有以下功能:

  • 搜索在AUR中发布的软件包
  • 解析AUR软件包之间的依赖关系
  • 下载并构建AUR软件包
  • 下载网站内容,例如用户评论
  • 提交AUR软件包

其中用的比较多的是yay

安装 yay

yay 也是发布在 AUR 平台之上的,因此首需要手动安装 yay:

Bash
pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
makepkg -si

基本使用

实际上 yay 是对 pacman 的包装,他们之间的命令几乎是一样的。唯一需要注意的就是不要使用 sudo 来运行 yay 命令。