前言

为了保证写作效率,本文在资料整理以及写作阶段使用了生成式人工智能来协助。如有谬误,欢迎来Github issue或者博客评论区留言指出

阅读指北:

  • 操作指南主要分为两个部分,分别是“常用操作”和“选项详解”。一般情况下去看“常用操作”部分就已经足够了
  • 本文篇幅较长,请善用“大纲”以及“Ctrl+F”来完成快速跳转和查找

博客网页在某些地方可能存在布局问题导致难以阅读的情况。如有必要,可以前往 Github 仓库阅读 Markdown 原文


演示环境

  • pacman 7.1.0
  • Arch Linux

pacman 基本结构

pacman 命令大体是:

pacman <操作> [选项] [软件包]

常见操作:

操作 含义
-S / --sync 从同步仓库安装、搜索、升级软件包
-Q / --query 查询本地已安装软件包
-R / --remove 删除软件包
-U / --upgrade 安装本地软件包文件
-F / --files 查询某个文件属于仓库里的哪个包
-D / --database 修改本地数据库标记
-T / --deptest 检查依赖是否满足

pacman 的选项是可以组合的,就拿下面这个命令来举例:

sudo pacman -Syu

这里:

  • -S:操作模式,表示sync,用于同步软件包数据库
  • -y:刷新软件包数据库
  • -u:升级系统中所有可以升级的软件包

所以 -Syu并不是一个神秘的命令,而是:

sudo pacman -S -y -u

的简写

这里也可以使用长选项

sudo pacman --sync --refresh --sysupgrade

如果你注意力惊人,你会发现第一个大写的字母通常表示“操作模式”,后面的小写字母是这个操作模式下的选项

所以说

  • 操作模式决定了 pacman 应该干什么
  • 操作选项是对这个操作模式的补充说明

实践

查看 pacman 可用的操作:

pacman -h

查看某个操作的可用选项:

pacman -操作h

比如我想查看 -Q操作的可用选项就可以使用:

pacman -Qh

常用命令速查表

命令 目的
sudo pacman -Syu 更新系统
sudo pacman -S 包名 安装软件
sudo pacman -Syu 包名 更新系统并安装软件
sudo pacman -R 包名 删除软件
sudo pacman -Rs 包名 删除软件和无用依赖
sudo pacman -Rns 包名 更彻底删除
pacman -Ss 关键词 搜索仓库软件
pacman -Qs 关键词 搜索已安装软件
pacman -Si 包名 查看仓库包信息
pacman -Qi 包名 查看已安装包信息
pacman -Ql 包名 查看包安装了哪些文件
pacman -Qo 文件路径 查询文件属于哪个包
pacman -Qdt 查询孤儿包
sudo pacman -Rns $(pacman -Qdtq) 删除孤儿包
sudo pacman -U ./xxx.pkg.tar.zst 安装本地包
sudo pacman -Sc 清理旧缓存

操作选项详解

-S / --sync

这个应该是最常用的操作了。pacman -S的核心意思是:从软件仓库同步、安装、升级软件包

常用操作

安装软件包
sudo pacman -S firefox

安装 firefox

升级系统
sudo pacman -Syu

刷新数据库并升级整个系统

搜索远程仓库
pacman -Ss neovim

搜索远程仓库里 neovim相关的软件包

查看远程仓库某个包的详细信息
pacman -Si neovim

查看远程仓库中 neovim的详细信息

安装包,如果最近就跳过
sudo pacman -S --needed git base-devel

安装 gitbase-devel,如果已经是最新的就跳过

只下载但不安装
sudo pacman -Sw linux

仅下载 linux包,不安装

清理缓存
sudo pacman -Sc

清理旧版本软件包缓存

升级系统但忽略某个包
sudo pacman -Syu --ignore linux

升级系统,但暂时不升级 linux内核包

注意:Arch 系的发行版一般不推荐单独升级某个或某些软件包,这样做可能会损坏系统

选项解释

基本同步/安装选项
选项 作用 例子
-y, --refresh 刷新软件包数据库,也就是从镜像源下载最新仓库数据库。-yy 会强制刷新,即使本地的数据库已经是最新 sudo pacman -Sy 只刷新数据库;升级系统时更推荐:sudo pacman -Syu
-u, --sysupgrade 升级所有已安装的软件包。通常和 -y 一起用。-uu 允许降级软件包,例如镜像源版本低于本地版本时 sudo pacman -Syu 升级整个系统;sudo pacman -Syuu 允许降级并升级系统
-s, --search <regex> 在远程软件仓库中搜索软件包,支持正则表达式 pacman -Ss firefox
-i, --info 查看远程仓库中的软件包信息。-ii 显示更详细信息 pacman -Si firefoxpacman -Sii linux
-l, --list <repo> 查看某个软件仓库里的软件包列表 pacman -Sl extra
-g, --groups 查看软件包组。指定组名时列出该组中的包;-gg 列出所有组及其包 pacman -Sg gnomepacman -Sgg
-w, --downloadonly 只下载软件包,不安装或升级 sudo pacman -Sw firefox
-p, --print 只打印将要处理的目标,不执行安装/升级。常用于预览 pacman -Sp firefox
-q, --quiet 安静输出,减少信息。常和搜索、列表搭配,只显示包名 pacman -Ssq firefox
安装行为控制
选项 作用 例子
--needed 如果目标软件包已经是最新版本,就跳过,不重新安装。比较适合脚本里批量装软件 sudo pacman -S --needed git base-devel neovim
--asdeps 把安装的软件包标记为“作为依赖安装”。但如果没有包依赖它,可能会被 pacman -Qdt 识别为孤儿包 sudo pacman -S --asdeps cmake
--asexplicit 把安装的软件包标记为“用户显式安装”。这样它不会被当成孤儿依赖清理 sudo pacman -S --asexplicit firefox
-d, --nodeps 跳过依赖检查。-d 跳过依赖版本检查,-dd 跳过所有依赖检查。这个操作非常容易搞坏系统 sudo pacman -Sd somepkg
--assume-installed <软件包=版本> 临时假装某个包已经安装,用来满足依赖关系。不会真的安装那个包。慎用 sudo pacman -S somepkg --assume-installed 'java-runtime=21'
--dbonly 只修改 pacman 数据库,不实际解包安装文件。常用于修复数据库状态,普通用户不该随便用 sudo pacman -S --dbonly somepkg
--noscriptlet 不执行软件包自带的安装/升级脚本,例如 post_installpost_upgrade。危险,可能导致软件配置不完整 sudo pacman -S somepkg --noscriptlet
--overwrite <glob> 允许覆盖已经存在且冲突的文件。glob 是匹配模式,建议加引号防止 shell 展开。危险,先确认冲突原因再用 sudo pacman -S somepkg --overwrite '/usr/bin/foo'
缓存清理
选项 作用 例子
-c, --clean 清理软件包缓存。-Sc 删除旧版本缓存,保留当前已安装版本;-Scc 清除所有缓存,比较激进。 sudo pacman -Sc;彻底清理:sudo pacman -Scc
--cachedir <目录> 指定额外或替代的软件包缓存目录。适合临时用别的磁盘存包。 sudo pacman -Syu --cachedir /mnt/cache/pacman/pkg
路径、根目录、配置文件相关
选项 作用 例子
-r, --root <路径> 指定另一个安装根目录。常用于给挂载在 /mnt 的系统安装包 sudo pacman -r /mnt -S bash
-b, --dbpath <路径> 指定 pacman 数据库位置,默认通常是 /var/lib/pacman。高级用法,一般不需要改 sudo pacman -Syu --dbpath /mnt/var/lib/pacman
--config <路径> 使用指定的 pacman 配置文件,而不是默认 /etc/pacman.conf sudo pacman --config /tmp/pacman.conf -Syu
--gpgdir <路径> 指定 pacman 使用的 Gnu PG 密钥目录,默认一般是 /etc/pacman.d/gnupg sudo pacman -Syu --gpgdir /etc/pacman.d/gnupg
--hookdir <目录> 指定 pacman hook 钩子目录。可以多次使用。高级用法,适合测试或自定义 hook sudo pacman -Syu --hookdir /etc/pacman.d/hooks
--logfile <路径> 指定 pacman 日志文件路径,默认通常是 /var/log/pacman.log sudo pacman -Syu --logfile /tmp/pacman-test.log
--sysroot <路径> 指定一个替代根文件系统路径,让 pacman 将该目录视为系统根目录 /来进行操作 sudo pacman --sysroot /mnt -Syu
输出格式
选项 作用 例子
-v, --verbose 显示更详细的信息,例如仓库、下载、依赖解析等更多内容 sudo pacman -Syu -v
--color <when> 控制彩色输出。常见值有 autoalwaysnever pacman -Ss linux --color=always
--noprogressbar 下载时不显示进度条。比较适合脚本、日志、CI 环境 sudo pacman -Syu --noprogressbar
--print-format <字符串> 配合 -p 使用,指定打印格式。常用占位符如 %n 包名、%v 版本、%r 仓库、%l 下载地址、%s 大小 pacman -Sp firefox --print-format '%r/%n %v %l'
--debug 输出调试信息,一般用于排查 pacman 问题 sudo pacman -Syu --debug 2> pacman-debug.log
行为确认
选项 作用 例子
--confirm 总是询问确认。用于覆盖配置里的 NoConfirm 行为 sudo pacman -S firefox --confirm
--noconfirm 不询问确认,自动回答默认选项。脚本里常见,但日常升级不建议盲用 sudo pacman -Syu --noconfirm
下载
选项 作用 例子
--disable-download-timeout 禁用较严格的下载超时限制。网络很慢、镜像源响应慢时可以用 sudo pacman -Syu --disable-download-timeout
沙盒
选项 作用 例子
--disable-sandbox 禁用 pacman 的沙盒安全机制。一般在容器、特殊环境中遇到兼容性问题时才使用 sudo pacman -Syu --disable-sandbox
--disable-sandbox-filesystem 只禁用下载沙盒的文件系统隔离部分 sudo pacman -Syu --disable-sandbox-filesystem
--disable-sandbox-syscalls 只禁用下载沙盒的系统调用限制部分 sudo pacman -Syu --disable-sandbox-syscalls
架构
选项 作用 例子
--arch <架构> 指定目标架构,而不是使用配置文件中的架构 sudo pacman -Syu --arch x86_64
忽略升级
选项 作用 例子
--ignore <软件包> 系统升级时忽略指定软件包,不升级它。可以多次使用或逗号分隔 sudo pacman -Syu --ignore linux,nvidia
--ignoregroup <软件包组> 系统升级时忽略某个软件包组 sudo pacman -Syu --ignoregroup gnome

-Q / --query

这个操作主要用于查询本机已经安装的软件包

常用操作

查看已经安装的包
pacman -Q

查看所有已经安装的包

如果只想看包名,可以用 -Qq

查看本地包详细信息
pacman -Qi firefox

查看本地已经安装的 firefox的详细信息

如果嫌不够详细可以使用 -Qii

搜索本地已安装包
pacman -Qs vim

搜索本地已经安装的软件包关键词

这里和 -Ss的区别是一个是搜索远程仓库,一个是搜索本地已经安装的软件包

查看本地包安装到系统的文件
pacman -Ql bash

查看本地 vim包安装到系统里的所有文件,类似这样

$ pacman -Ql bash
bash /etc/
bash /etc/bash.bash_logout
bash /etc/bash.bashrc

如果你只想看文件的路径而不显示包名的话,可以使用 -Qql

查询某个文件属于哪个本地包
pacman -Qo /usr/bin/bash

查询 /usr/bin/bash这个文件属于哪个包

这个命令还蛮有用的,比如你不知道某个命令是哪个包提供的

$ pacman -Qo /usr/bin/bash
/usr/bin/bash 由 bash 5.3.15-1 所拥有
查看本地手动安装的包
pacman -Qe

查看手动安装的软件包

如果你只想看包名的话可以使用 -Qqe

这个操作经常用于备份软件包列表,比如你可以这样做

pacman -Qqe > pkglist.txt

后续需要恢复的时候

sudo pacman -S --needed - < pkglist.txt
查看本地作为依赖安装的包
pacman -Qd

查看作为依赖安装的软件包

只看包名可以使用 Qqd

列出孤儿依赖包
pacman -Qdt

列出不再被需要的依赖包(孤儿包)

含义:

  • -d:只看作为依赖安装的包
  • -t:只看不再被其他包依赖的包

只显示包名可以用 -Qdtq

如果你想一次性删掉这些孤儿包,你可以用

sudo pacman -Rns $(pacman -Qdtq)
查看外部包
pacman -Qm

查看外来包,也就是不在当前同步数据库里的包

常见情况:

  • Aur 安装的包
  • 自己用 pacman -U安装的本地包
  • 曾今在仓库中但现在已经被移除的软件包
  • 第三方仓库关闭后遗留的包

只显示包名可以用 -Qqm

查看通过远程仓库安装的包
pacman -Qn

-n表示 native,也就是在当前同步数据中的包

只显示包名可以用 -Qqn

查看可升级的包
pacman -Qu

列出有新版可升级的已安装的包

检查软件包文件是否有缺失
pacman -Qk bash

检查本地 bash包是否有文件缺失

如果你想让他更严格点检查可以用 -Qkk

不过有时候不过 -Qkk 可能会报告一些配置文件被修改,这不一定是错误,因为很多 /etc 下配置本来就会被用户修改

查询本地软件包文件信息

假如你下载了一个包文件

cider-v4.0.0-linux-x64.pkg.tar.zst

你想查看它的信息

pacman -Qip cider-v4.0.0-linux-x64.pkg.tar.zst

查看这个包会安装哪些文件

pacman -Qlp cider-v4.0.0-linux-x64.pkg.tar.zst

这里的 -p很重要,表示查询的是包文件,而不是本地数据库

查看软件包组
pacman -Qg gnome

查看 gnome组中已安装的包

只显示包名可以用 -Qqg

选项解释

基本查询与信息查看
选项 作用 例子
-i, --info 查看已安装软件包的详细信息;使用 -ii 会额外显示备份文件相关信息 pacman -Qi pacmanpacman -Qii pacman
-l, --list 列出指定已安装软件包包含的文件 pacman -Ql pacman
-c, --changelog 查看某个已安装软件包的更新日志;是否有内容取决于该包是否提供 changelog pacman -Qc linux
-g, --groups 查看软件包组信息;可列出某个组里的包,或查看某个包所属的组 pacman -Qg base-develpacman -Qg pacman
-k, --check 检查已安装软件包的文件是否存在;-kk 会进一步检查文件属性,如权限、大小、修改时间等 pacman -Qk pacmanpacman -Qkk pacman
-o <file>, --owns <file> 查询某个文件属于哪个已安装软件包 pacman -Qo /usr/bin/pacman
按安装原因和来源过滤
选项 作用 例子
-d, --deps 只列出作为依赖关系安装的软件包;常和 -t 搭配查孤儿包 pacman -Qdpacman -Qdt
-e, --explicit 只列出明确手动安装的软件包 pacman -Qe
-m, --foreign 只列出不在同步数据库中的已安装软件包,常见于 AUR 包或本地安装包 pacman -Qm
-n, --native 只列出存在于同步数据库中的已安装软件包,也就是通常来自官方仓库的包 pacman -Qn
-t, --unrequired 列出不被任何软件包需要的软件包;-tt 会忽略可选依赖,只看强制依赖关系 pacman -Qtpacman -Qdtpacman -Qdtt
-u, --upgrades 列出所有可升级的软件包;结果依赖本地同步数据库是否已刷新 pacman -Qu
搜索、安静输出与详细输出
选项 作用 例子
-s <regex>, --search <regex> 在已安装的本地软件包中按正则表达式搜索名称和描述 pacman -Qs firefoxpacman -Qs '^linux'
-q, --quiet 查询或搜索时减少输出信息,通常只显示包名,适合脚本使用 pacman -Qqpacman -Qdtqpacman -Qeq
-v, --verbose 显示更详细的信息,适合排查问题 pacman -Qvpacman -Qiv pacman
--color <when> 控制彩色输出,常见值有 autoalwaysnever pacman -Qs firefox --color autopacman -Q --color never
查询本地包文件
选项 作用 例子
-p <package>, --file <package> 从一个软件包文件中查询信息,而不是从已安装数据库中查询;常用于查看 .pkg.tar.zst 包文件 pacman -Qip ./example-1.0-1-x86_64.pkg.tar.zstpacman -Qlp ./example-1.0-1-x86_64.pkg.tar.zst
路径、根目录和配置相关
选项 作用 例子
-b <路径>, --dbpath <路径> 指定另一个 pacman 数据库位置,而不是默认的 /var/lib/pacman pacman -Q --dbpath /mnt/var/lib/pacman
-r <路径>, --root <路径> 指定另一个安装根目录,用来查询挂载在其他位置的系统 pacman -Qr /mntpacman -Q --root /mnt
--config <路径> 指定另一个配置文件,而不是默认的 /etc/pacman.conf pacman -Q --config /mnt/etc/pacman.conf
--gpgdir <路径> 指定另一个 GnuPG 主目录,用于软件包签名相关数据 pacman -Q --gpgdir /etc/pacman.d/gnupg
--hookdir <目录> 指定另一个钩子目录;对 -Q 查询操作通常很少用到 pacman -Q --hookdir /etc/pacman.d/hooks
--logfile <路径> 指定另一个日志文件路径;对查询操作通常只是改变 pacman 使用的日志位置 pacman -Q --logfile /var/log/pacman.log
--cachedir <目录> 指定另一个软件包缓存目录;对普通 -Q 查询通常影响不大,更多用于涉及包文件或其他操作时统一配置 pacman -Q --cachedir /var/cache/pacman/pkg
--sysroot <路径> 在一个已经挂载的 guest 系统里操作,仅限 root 使用;适合维护挂载到 /mnt 的系统 sudo pacman -Q --sysroot /mnt
架构相关
选项 作用 例子
--arch <架构> 指定另一个架构,而不是使用当前系统架构;一般用于特殊环境或维护其他系统 pacman -Q --arch x86_64pacman -Q --arch aarch64 --root /mnt
确认行为
选项 作用 例子
--confirm 总是询问确认;对普通查询操作通常不会明显改变行为 pacman -Q --confirm
--noconfirm 不询问确认;对普通查询操作通常不会明显改变行为,但在脚本中可能会用到 pacman -Q --noconfirm
调试、下载超时与沙盒
选项 作用 例子
--debug 显示调试信息,输出会非常多,主要用于排查 pacman 本身或配置问题 pacman -Q --debug pacman
--disable-download-timeout 下载时使用更宽松的超时设置;普通 -Q 查询一般不会下载,所以通常用不到 pacman -Q --disable-download-timeout
--disable-sandbox 禁用下载进程的所有沙盒功能;会降低安全隔离,一般不建议使用,普通 -Q 查询通常用不到 pacman -Q --disable-sandbox
--disable-sandbox-filesystem 禁用下载进程沙盒的文件系统隔离部分;会降低安全性,普通 -Q 查询通常用不到 pacman -Q --disable-sandbox-filesystem
--disable-sandbox-syscalls 禁用下载进程沙盒的系统调用隔离部分;会降低安全性,普通 -Q 查询通常用不到 pacman -Q --disable-sandbox-syscalls

-R / --remove

这个操作一般用来卸载已安装的软件包

常用操作

卸载软件包
sudo pacman -R firefox

卸载 firefox,但不会自动删除它安装时带来的依赖包

卸载软件包并删除依赖
sudo pacman -Rs firefox

卸载 firefox,并删除只被 firefox需要的依赖包

卸载软件包、清理依赖并删除配置备份
sudo pacman -Rns firefox

卸载 firefox的同时删除不再需要的依赖,并且不保留 .pacsave这类配置备份文件

删除孤儿包
sudo pacman -Rns $(pacman -Qdtq)

删除 pacman -Qdtq所列出的包,并删除无用的依赖和配置备份

预览将要删除哪些包
pacman -Rsp firefox

打印卸载 firefox时会涉及包

删除软件包时跳过依赖检查
sudo pacman -Rdd proken-pkg

删除 proken-pkg时跳过所有依赖检查,通常用于修复系统

注意:-c-dd--dbonly-noscriptlet都是比较危险的选项,不应该随便使用

选项解释

基本删除行为
选项 作用 例子
-c, --cascade 级联删除:删除指定软件包,以及所有依赖于它的软件包。风险很高,可能一次删掉大量软件包,使用前一定要仔细确认列表 sudo pacman -Rc icu;更安全地先预览:pacman -Rcp icu
-n, --nosave 删除配置文件,不保留 .pacsave 备份;适合想彻底清理某个软件包配置的情况 sudo pacman -Rn firefox;常用组合:sudo pacman -Rns firefox
-s, --recursive 递归删除不再被其他软件包需要的依赖;-ss 会连“单独指定安装”的依赖也纳入删除范围,清理更彻底但也更容易误删你手动装过的包 sudo pacman -Rs firefox;更激进:sudo pacman -Rss firefox
-u, --unneeded 只删除不被其他软件包需要的目标包,常用于避免删掉仍被依赖的软件包 sudo pacman -Ru package-name;组合使用:sudo pacman -Rsu firefox
依赖相关
选项 作用 例子
-d, --nodeps 跳过依赖关系检查;-d 只跳过依赖版本检查,-dd 跳过所有依赖检查。可能导致系统里留下坏掉的依赖关系,除非你知道自己在修什么,否则不建议用 sudo pacman -Rd package-name;强制跳过全部检查:sudo pacman -Rdd package-name
--assume-installed <软件包=版本> 临时假装某个 软件包=版本 已安装,用它来满足依赖要求;主要用于处理特殊依赖场景,不会真的安装这个包 sudo pacman -R package-name --assume-installed 'foo=1.0'
输出与显示
选项 作用 例子
-p, --print 只打印将要处理的目标,而不真正执行删除操作;适合在危险操作前预览 pacman -Rp firefox;预览递归删除:pacman -Rsp firefox
--print-format <字符串> 配合 --print 使用,指定打印目标时的格式 pacman -Rp firefox --print-format '%n %v'
-v, --verbose 显示更详细的信息,适合排查卸载过程中的问题 sudo pacman -Rv firefox
--color <when> 控制彩色输出,<when> 常见值有 autoalwaysnever sudo pacman -R firefox --color autosudo pacman -R firefox --color never
--noprogressbar 下载文件时不显示进度条;对普通 -R 卸载通常没什么影响,因为卸载一般不需要下载 sudo pacman -R firefox --noprogressbar
行为确认
选项 作用 例子
--confirm 总是询问确认,即使配置或环境里可能默认不询问,也会要求你确认 sudo pacman -R firefox --confirm
--noconfirm 不询问确认,直接按默认选择执行。删除操作中使用有风险,脚本里也建议先用 --print 预览 sudo pacman -R firefox --noconfirm
数据库、根目录和配置文件相关
选项 作用 例子
-b <路径>, --dbpath <路径> 指定另一个 pacman 数据库位置,而不是默认的 /var/lib/pacman sudo pacman -R package-name --dbpath /mnt/var/lib/pacman
-r <路径>, --root <路径> 指定另一个安装根目录,常用于维护挂载到 /mnt 的系统 sudo pacman -R package-name --root /mnt
--config <路径> 指定另一个配置文件,而不是默认的 /etc/pacman.conf sudo pacman -R package-name --config /mnt/etc/pacman.conf
--cachedir <目录> 指定另一个软件包缓存目录;对普通卸载影响不大,但可用于统一指定操作环境 sudo pacman -R package-name --cachedir /mnt/var/cache/pacman/pkg
--gpgdir <路径> 指定另一个 GnuPG 主目录,用于软件包签名相关数据 sudo pacman -R package-name --gpgdir /etc/pacman.d/gnupg
--hookdir <目录> 指定另一个钩子目录,卸载时会影响执行哪些 pacman hooks sudo pacman -R package-name --hookdir /etc/pacman.d/hooks
--logfile <路径> 指定另一个日志文件,而不是默认的 /var/log/pacman.log sudo pacman -R package-name --logfile /tmp/pacman-remove.log
--sysroot <路径> 在一个已经挂载的 guest 系统中操作,仅限 root 使用;适合从当前系统维护另一个安装在 /mnt 的系统 sudo pacman -R package-name --sysroot /mnt
数据库控制
选项 作用 例子
--dbonly 只修改 pacman 数据库记录,不删除实际软件包文件。非常危险,容易造成数据库和文件系统不一致,通常只用于手动修复数据库状态 sudo pacman -R package-name --dbonly
脚本控制
选项 作用 例子
--noscriptlet 不执行软件包卸载脚本。可能导致用户、服务、缓存、系统状态没有被正确清理,日常卸载不建议使用 sudo pacman -R package-name --noscriptlet
架构
选项 作用 例子
--arch <架构> 指定另一个架构,而不是使用当前系统架构;通常用于特殊维护环境或交叉架构场景 sudo pacman -R package-name --arch x86_64sudo pacman -R package-name --arch aarch64 --root /mnt
调试、下载超时与沙盒
选项 作用 例子
--debug 显示调试信息,输出会非常多,主要用于排查 pacman 行为或配置问题 sudo pacman -R firefox --debug
--disable-download-timeout 下载时使用更宽松的超时设置;普通 -R 卸载一般不下载文件,所以通常用不到 sudo pacman -R firefox --disable-download-timeout
--disable-sandbox 禁用下载进程的所有沙盒功能;会降低安全隔离,普通卸载通常也不需要它 sudo pacman -R firefox --disable-sandbox
--disable-sandbox-filesystem 禁用下载进程沙盒的文件系统隔离部分;会降低安全性,普通卸载通常用不到 sudo pacman -R firefox --disable-sandbox-filesystem
--disable-sandbox-syscalls 禁用下载进程沙盒的系统调用隔离部分;会降低安全性,普通卸载通常用不到 sudo pacman -R firefox --disable-sandbox-syscalls

-U / --upgrade

这个操作用来安装或者升级本地的软件包文件,也常用来从缓存里手动降级软件包。

简单来说就是:不从仓库里按名字安装包,而是直接指定一个 .pkg.tar.zst包文件来安装

常用操作

安装本地软件包文件
sudo pacman -U ./cider-v4.0.0-linux-x64.pkg.tar.zst

安装当前目录下的 cider-v4.0.0-linux-x64.pkg.tar.zst软件包文件

从缓存中降级软件包
sudo pacman -U /var/cache/pacman/pkg/niri-26.04-1-x86_64.pkg.tar.zst

niri安装回本地缓存里的 26.04-1版本

这个操作常用于新版本软件包出现问题时临时回退

下载远程软件包并安装
sudo pacman -U https://example.com/packages/niri-26.04-1-x86_64.pkg.tar.zst

从指定 URL下载并安装 niri-26.04-1

如果你只想下载但不安装的话可以使用 -Uw

选项解释

基本安装/升级选项
选项 作用 例子
-w, --downloadonly 只下载软件包,不安装或升级。主要用于 URL形式的软件包 sudo pacman -Uw https://example.com/packages/example-1.0-1-x86_64.pkg.tar.zst
--needed 如果目标软件包已经安装且版本已经是最新,就不重新安装,适合批量安装本地包时避免重复操作 sudo pacman -U --needed ./*.pkg.tar.zst
--asdeps 把软件包标记为“作为依赖安装”,以后如果没有其他包需要它,可能会被 pacman -Qtdq识别为孤儿包 sudo pacman -U --asdeps ./libfoo-1.0-1-x86_64.pkg.tar.zst
--asexplicit 把软件包标记为“显式安装”,表示这是用户主动安装的软件包,不会因为没人依赖它就被当作孤儿包 sudo pacman -U --asexplicit ./firefox-120.0-1-x86_64.pkg.tar.zst
依赖检查与安装脚本控制
选项 作用 例子
-d, --nodeps 跳过依赖关系的版本检查;使用 -dd会跳过所有依赖检查。风险很高,可能装出一个无法正常运行的软件包,甚至破坏系统依赖关系 sudo pacman -Ud ./example-1.0-1-x86_64.pkg.tar.zstsudo pacman -Udd ./example-1.0-1-x86_64.pkg.tar.zst
--assume-installed <软件包=版本> 临时假装某个 软件包=版本已经安装,用它来满足依赖要求。只影响本次操作的依赖判断,不是真的安装了这个包 sudo pacman -U ./example-1.0-1-x86_64.pkg.tar.zst --assume-installed 'foo=1.0'
--dbonly 只修改 pacman数据库记录,不真正安装、升级或删除软件包文件。非常危险,会让数据库状态和实际文件状态不一致,一般只用于修复特殊问题 sudo pacman -U --dbonly ./example-1.0-1-x86_64.pkg.tar.zst
--noscriptlet 不执行软件包自带的安装脚本,比如安装后钩子、用户创建、缓存刷新等可能不会执行。可能导致软件包配置不完整 sudo pacman -U --noscriptlet ./example-1.0-1-x86_64.pkg.tar.zst
--overwrite <glob> 允许覆盖与其他软件包冲突的文件,<glob>可以指定文件匹配模式,可多次使用。风险很高,可能覆盖其他包拥有的文件 sudo pacman -U ./example-1.0-1-x86_64.pkg.tar.zst --overwrite '/usr/bin/example'sudo pacman -U ./example.pkg.tar.zst --overwrite '*'
忽略升级相关
选项 作用 例子
--ignore <软件包> 升级时忽略指定软件包,可多次使用。对于 -U来说,主要用于处理目标包或依赖判断中的忽略规则 sudo pacman -U ./foo-1.0-1-x86_64.pkg.tar.zst --ignore bar
--ignoregroup <软件包组> 升级时忽略指定软件包组,可多次使用 sudo pacman -U ./foo-1.0-1-x86_64.pkg.tar.zst --ignoregroup gnome
输出、预览与调试
选项 作用 例子
-p, --print 只打印目标,不真正执行安装或升级,适合预览操作 pacman -Up ./example-1.0-1-x86_64.pkg.tar.zst
--print-format <字符串> 配合 --print使用,自定义打印目标时的输出格式 pacman -Up ./example-1.0-1-x86_64.pkg.tar.zst --print-format '%n %v'
-v, --verbose 显示更详细的信息,例如路径、版本、数据库等信息,排查问题时很有用 sudo pacman -Uv ./example-1.0-1-x86_64.pkg.tar.zst
--debug 显示调试信息,输出会非常多,主要用于排查 pacman内部行为或提交问题报告 sudo pacman -U --debug ./example-1.0-1-x86_64.pkg.tar.zst
--color <when> 控制输出是否使用颜色,<when>常见值有 autoalwaysnever sudo pacman -U ./example-1.0-1-x86_64.pkg.tar.zst --color always
--noprogressbar 下载文件时不显示进度条,适合脚本或日志环境 sudo pacman -U --noprogressbar https://example.com/packages/example-1.0-1-x86_64.pkg.tar.zst
行为确认
选项 作用 例子
--confirm 总是询问确认,即使配置或环境里可能默认不询问,也强制弹出确认提示 sudo pacman -U --confirm ./example-1.0-1-x86_64.pkg.tar.zst
--noconfirm 不询问确认,自动使用默认回答。适合脚本,但有风险,可能在没看清操作内容时直接安装或覆盖 sudo pacman -U --noconfirm ./example-1.0-1-x86_64.pkg.tar.zst
路径、根目录与配置文件相关
选项 作用 例子
-b, --dbpath <路径> 指定另一个软件包数据库位置,而不是默认的 /var/lib/pacman。一般用于救援、测试或特殊系统环境 sudo pacman -U ./example.pkg.tar.zst --dbpath /mnt/var/lib/pacman
-r, --root <路径> 指定另一个安装根目录,把软件包安装到该根目录对应的系统中。常见于修复挂载在 /mnt的系统 sudo pacman -U ./example.pkg.tar.zst --root /mnt
--sysroot 在一个已经挂载好的 guest系统中操作,仅 root可用。适合容器、离线系统或救援场景 sudo pacman -U ./example.pkg.tar.zst --sysroot /mnt
--config <路径> 指定另一个 pacman配置文件,而不是默认的 /etc/pacman.conf sudo pacman -U ./example.pkg.tar.zst --config /tmp/pacman.conf
--cachedir <目录> 指定另一个软件包缓存目录,而不是默认的 /var/cache/pacman/pkg sudo pacman -U ./example.pkg.tar.zst --cachedir /mnt/var/cache/pacman/pkg
--gpgdir <路径> 指定另一个 GnuPG主目录,用于软件包签名验证相关操作 sudo pacman -U ./example.pkg.tar.zst --gpgdir /etc/pacman.d/gnupg
--hookdir <目录> 指定另一个钩子目录,用于加载 pacman事务钩子 sudo pacman -U ./example.pkg.tar.zst --hookdir /etc/pacman.d/hooks
--logfile <路径> 指定另一个日志文件,而不是默认的 /var/log/pacman.log sudo pacman -U ./example.pkg.tar.zst --logfile /tmp/pacman.log
下载与沙盒相关
选项 作用 例子
--disable-download-timeout 下载时使用更宽松的超时策略,网络慢或远程服务器响应慢时可能有用 sudo pacman -U https://example.com/packages/example.pkg.tar.zst --disable-download-timeout
--disable-sandbox 禁用下载进程的所有沙盒功能。会降低安全隔离,一般不建议使用,除非沙盒导致下载异常 sudo pacman -U https://example.com/packages/example.pkg.tar.zst --disable-sandbox
--disable-sandbox-filesystem 只禁用下载进程沙盒的文件系统隔离部分。会降低安全性,用于排查沙盒文件访问问题 sudo pacman -U https://example.com/packages/example.pkg.tar.zst --disable-sandbox-filesystem
--disable-sandbox-syscalls 只禁用下载进程沙盒的系统调用隔离部分。会降低安全性,用于排查沙盒系统调用限制问题 sudo pacman -U https://example.com/packages/example.pkg.tar.zst --disable-sandbox-syscalls
架构相关
选项 作用 例子
--arch <架构> 指定另一个架构,而不是使用当前系统架构。一般用于特殊构建、交叉环境或维护其他架构的系统 sudo pacman -U ./example-1.0-1-x86_64.pkg.tar.zst --arch x86_64

-D / --database

-D一般用于直接操作 pacman的本地数据库,最常见的用法是更改软件包的安装原因

常用操作

把软件包标记为依赖安装
sudo pacman -D --asdeps firefox

firefox标记为“作为依赖安装”的软件包

注意:pacman -D是直接改本地数据库的操作,它不会检查你这样做是否合理,乱用 --asdeps可能导致重要软件被 pacman -Qdt识别成孤儿包

把软件包标记为手动安装
sudo pacman -D --asexplicit firefox

firefox标记为“手动安装”的软件包,这样做可以避免它被当成孤儿包清理

检查本地软件包数据库
pacman -Dk

一般用于检查本地 pacman数据库的有效性

如果你想让它检查更严格一点可以使用 -Dkk

选项解释

数据库检查
选项 作用 例子
-k, --check 检查本地数据库有效性;使用 -kk会进行更严格的检查,并结合同步数据库一起检查 pacman -Dkpacman -Dkk
安装原因标记
选项 作用 例子
--asdeps 把指定软件包标记为“非明确指定安装”,也就是作为依赖安装。如果乱标记,之后可能被当成孤儿包清理掉 sudo pacman -D --asdeps firefox
--asexplicit 把指定软件包标记为“明确指定安装”,也就是用户手动安装。常用于防止重要软件被识别为孤儿包 sudo pacman -D --asexplicit firefox
输出与调试
选项 作用 例子
-q, --quiet 不显示成功消息的输出,让结果更安静,比较适合在脚本中使用 sudo pacman -Dq --asdeps firefox
-v, --verbose 显示更详细的信息,排查数据库问题时比较有用 pacman -Dkv
--color <when> 控制输出是否彩色化,<when>常见值有 autoalwaysnever pacman -Dk --color always
--debug 显示调试信息,输出会非常多,一般只在排查 pacman问题时使用 pacman -Dk --debug
路径、根目录与配置文件相关
选项 作用 例子
-b, --dbpath <路径> 指定另一个数据库位置,而不是默认的 /var/lib/pacman。常用于修复、测试或维护其他系统 sudo pacman -D --asexplicit firefox --dbpath /mnt/var/lib/pacman
-r, --root <路径> 指定另一个安装根目录,让 pacman以该目录作为系统根目录来操作 sudo pacman -D --asexplicit firefox --root /mnt
--sysroot <路径> 在一个已经挂载好的 guest系统中操作,仅 root可用,适合维护离线系统或其他根目录里的系统 sudo pacman -D --asexplicit firefox --sysroot /mnt
--config <路径> 指定另一个 pacman配置文件,而不是默认的 /etc/pacman.conf sudo pacman -D --asdeps firefox --config /tmp/pacman.conf
--cachedir <目录> 指定另一个软件包缓存目录。对 -D这种数据库操作通常不常用,但在特殊维护环境中可能会一起指定 sudo pacman -Dk --cachedir /mnt/var/cache/pacman/pkg
--gpgdir <路径> 指定另一个 GnuPG主目录,用于签名验证相关操作 sudo pacman -Dk --gpgdir /etc/pacman.d/gnupg
--hookdir <目录> 指定另一个钩子目录。对普通 -D操作通常不常用,更多用于特殊系统维护场景 sudo pacman -Dk --hookdir /etc/pacman.d/hooks
--logfile <路径> 指定另一个日志文件,而不是默认的 /var/log/pacman.log sudo pacman -D --asexplicit firefox --logfile /tmp/pacman.log
确认行为
选项 作用 例子
--confirm 总是询问确认。对很多 -D操作影响不大,但可以强制保留交互确认行为 sudo pacman -D --asdeps firefox --confirm
--noconfirm 不询问确认,自动采用默认回答。用于脚本时方便,但操作数据库前要确认命令无误 sudo pacman -D --asdeps firefox --noconfirm
下载与沙盒相关
选项 作用 例子
--disable-download-timeout 下载时使用更宽松的超时设置。-D一般不需要下载内容,但在涉及同步数据库检查等场景中可能有用 pacman -Dkk --disable-download-timeout
--disable-sandbox 禁用下载进程的所有沙盒功能。会降低安全隔离,一般只在沙盒导致异常时临时使用 pacman -Dkk --disable-sandbox
--disable-sandbox-filesystem 禁用下载进程沙盒的文件系统隔离部分。会降低安全性,适合排查文件系统沙盒相关问题 pacman -Dkk --disable-sandbox-filesystem
--disable-sandbox-syscalls 禁用下载进程沙盒的系统调用隔离部分。会降低安全性,适合排查系统调用限制导致的问题 pacman -Dkk --disable-sandbox-syscalls
架构相关
选项 作用 例子
--arch <架构> 指定另一个架构,而不是当前系统架构。常用于维护其他架构的系统或特殊构建环境 sudo pacman -Dk --arch x86_64

-T / --deptest

-T一般用于检查指定的依赖是否已经满足

常用操作

检查某些依赖是否已安装
pacman -T bash glibc

检查 bashglibc这两个依赖是否已经满足,缺哪个就输出哪个

检查带版本要求的依赖
pacman -T 'python>=3.11'

检查系统里是否有满足 python>=3.11要求的 python

在脚本中检查缺失依赖
missing=$(pacman -T git base-devel)

把缺失的 gitbase-devel依赖保存到 missing变量里,方便脚本后续处理

检查另一个系统根目录里的依赖
sudo pacman -T bash glibc --root /mnt

检查 /mnt这个系统根目录里是否满足 bashglibc依赖

选项解释

依赖检查与输出信息
选项 作用 例子
-v, --verbose 显示更详细的信息,适合排查为什么某个依赖判断不符合预期 pacman -Tv 'python>=3.11'
路径、根目录与配置文件相关
选项 作用 例子
-b, --dbpath <路径> 指定另一个 pacman数据库位置,而不是默认的 /var/lib/pacman。常用于检查其他系统或特殊环境里的依赖状态 pacman -T bash --dbpath /mnt/var/lib/pacman
-r, --root <路径> 指定另一个安装根目录,让 pacman以该路径作为系统根目录进行依赖检查 sudo pacman -T bash glibc --root /mnt
--sysroot <路径> 在一个已经挂载好的 guest系统中操作,仅 root可用,适合检查离线系统或其他根目录里的依赖 sudo pacman -T bash --sysroot /mnt
--config <路径> 指定另一个 pacman配置文件,而不是默认的 /etc/pacman.conf pacman -T bash --config /tmp/pacman.conf
--cachedir <目录> 指定另一个软件包缓存目录。对 -T依赖测试来说通常不常用,但在自定义维护环境里可以一起指定 pacman -T bash --cachedir /mnt/var/cache/pacman/pkg
--gpgdir <路径> 指定另一个 GnuPG主目录,用于签名验证相关配置。-T一般不会直接用到签名验证,但属于通用选项 pacman -T bash --gpgdir /etc/pacman.d/gnupg
--hookdir <目录> 指定另一个钩子目录。-T不会执行安装/删除钩子,普通依赖检查一般用不到 pacman -T bash --hookdir /etc/pacman.d/hooks
--logfile <路径> 指定另一个日志文件,而不是默认的 /var/log/pacman.log pacman -T bash --logfile /tmp/pacman.log
架构相关
选项 作用 例子
--arch <架构> 指定另一个架构,而不是当前系统架构。常用于检查其他架构环境中的依赖 pacman -T bash --arch x86_64
输出格式与调试
选项 作用 例子
--color <when> 控制输出是否彩色化,<when>常见值有 autoalwaysnever pacman -T bash --color always
--debug 显示调试信息,输出会很多,主要用于排查 pacman自身或依赖判断问题 pacman -T bash --debug
行为确认
选项 作用 例子
--confirm 总是询问确认。由于 -T只是检查依赖,通常不会触发确认,但它仍是可用的通用选项 pacman -T bash --confirm
--noconfirm 不询问确认,自动采用默认回答。对 -T来说通常影响不大,适合脚本中统一传参 pacman -T bash --noconfirm
下载与超时
选项 作用 例子
--disable-download-timeout 下载时使用更宽松的超时设置。-T一般不会下载软件包,但在特殊配置或脚本统一参数时可以使用 pacman -T bash --disable-download-timeout
沙盒相关
选项 作用 例子
--disable-sandbox 禁用下载进程的所有沙盒功能。会降低安全隔离,一般只在沙盒导致异常时临时使用;-T通常不需要它 pacman -T bash --disable-sandbox
--disable-sandbox-filesystem 禁用下载进程沙盒的文件系统隔离部分。会降低安全性,只建议排查相关问题时使用 pacman -T bash --disable-sandbox-filesystem
--disable-sandbox-syscalls 禁用下载进程沙盒的系统调用隔离部分。会降低安全性,只建议排查相关问题时使用 pacman -T bash --disable-sandbox-syscalls

咕咕嘎嘎🐧🐧