跳转至内容

pacman/技巧和窍门

来自 ArchWiki
(已从 Local repository 重定向)

有关提高提供的技巧或pacman本身灵活性的通用方法,请参阅核心实用工具Bash

维护

注意 在下面的章节中,使用comm(它需要sort排序后的输入)代替,您也可以使用grep -Fxfgrep -Fxvf

另见 系统维护

列出软件包

在未使用的仓库中

默认情况下,pacman.conf中列出的仓库用于同步、搜索、安装和从中升级。这可以为了更多样化而改变,例如仅使用某些仓库进行搜索[1]

/etc/pacman.conf
...
[multilib]
Usage = Sync Search
...

请参阅pacman.conf(5) § 仓库章节

带版本号

您可能需要获取已安装软件包及其版本号的列表,这在报告错误或讨论已安装软件包时非常有用。

  • 列出所有显式安装的软件包:pacman -Qe
  • 列出group命名的软件包组中的所有软件包:pacman -Sg group
  • 列出所有外部软件包(通常是手动下载和安装的,或已从仓库中移除的软件包):pacman -Qm
  • 列出所有本地软件包(从同步数据库安装的):pacman -Qn
  • 列出所有显式安装的本地软件包(即存在于同步数据库中)但不是直接或可选依赖的软件包:pacman -Qent
  • 按正则表达式列出软件包:pacman -Qs regex
  • 按正则表达式列出软件包并使用自定义输出格式(需要expac):expac -s "%-30n %v" regex

按大小

弄清楚哪些软件包最大可能有助于在尝试释放硬盘空间时。这里有两种选择:获取单个软件包的大小,或获取软件包及其依赖的大小。

单个软件包

以下命令将列出所有已安装的软件包及其各自的大小

$ LC_ALL=C.UTF-8 pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | LC_ALL=C.UTF-8 sort -h
软件包及其依赖

要列出软件包及其依赖的大小,

  • 安装expac并运行expac -H M '%m\t%n' | sort -h
  • 运行pacgraphAUR并使用-c选项。

列出多个软件包的下载大小(留空packages以列出所有软件包)

$ expac -S -H M '%k\t%n' packages

列出不在元软件包base软件包组xorg中的显式安装的软件包,并显示大小和描述

$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u)) | sort -n

列出标记为待升级的软件包及其下载大小

$ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh

仅列出可选依赖

$ expac -S "%o" package

按日期

使用expac列出最后安装的20个软件包,运行

$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20

或者,按自纪元时(1970-01-01 UTC)以来的秒数(

$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20

不在指定组、仓库或元软件包中

注意 要获取已作为依赖安装但不再被任何已安装软件包需要的软件包列表,请参阅#移除未使用的软件包(孤儿包)

列出不在base元软件包中的显式安装的软件包

$ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)

列出不在base元软件包或xorg软件包组中的显式安装的软件包

$ comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u)

列出所有未被其他软件包依赖,并且不在base元软件包或xorg软件包组中的已安装软件包

$ comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u)

同上,但包含描述

$ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u))

列出所有不在指定仓库repo_name中的已安装软件包(可以同时检查多个仓库)

$ comm -23 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)

列出所有在repo_name仓库中的已安装软件包(可以同时检查多个仓库)

$ comm -12 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)

列出Arch Linux ISO上的所有软件包,但不在base元软件包中

$ comm -23 <(curl https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)
技巧 或者,可以使用moreutils包中的combine(而不是comm),它的语法更容易记住。请参阅combine(1)

开发软件包

要列出所有开发/不稳定的软件包,请运行

$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'

软件包的依赖

要获取软件包依赖的列表,最简单的解决方案是阅读以下命令的输出:

$ pacman -Qi package

为了自动化,而不是使用容易出错的解析pacman输出的方法,请使用expac

$ expac -S '%D' package

带可选依赖

要列出显式安装的软件包及其可选依赖,请运行

$ LC_ALL=C.UTF-8 pacman -Qei | sed '/^[^NO ]/d;/None$/d' | awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n\\S"} /Optional Deps/ {print $1"\nO"$2}'

或者,使用expac

$ expac -d '\n\n' -l '\n\t' -Q '%n\n\t%O' $(pacman -Qeq)

要列出它们,同时忽略您已安装的可选依赖,请运行

$ LC_ALL=C.UTF-8 pacman -Qei | sed '/^[^NO ]/d;/None$/d' | awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n\\S"} /Optional Deps/ {print $1"\nO"$2}' | sed 's/^Optional Deps   ://;/\[installed\]$/d;s/\s\+/ /'

浏览软件包

即时预览每个软件包来浏览所有已安装的软件包

$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'

这使用了fzf来呈现一个双窗格视图,列出所有软件包,右侧显示软件包信息。

输入字母来过滤软件包列表;使用箭头键(或Ctrl-j/Ctrl-k)进行导航;按Enter键在less下查看软件包信息。

要以类似的方式浏览pacman当前已知的(已安装和尚未安装的)所有软件包,使用fzf,请使用

$ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse

导航键绑定是相同的,但Enter键的作用不同。

列出软件包及其文件大小

当您发现某个特定软件包占用了大量空间并想找出哪些文件占用了大部分空间时,这个可能很有用。

$ pacman -Qlq package | grep -v '/$' | xargs -r du -h | sort -h

识别未被任何软件包拥有的文件

如果您的系统中有未被任何软件包拥有的杂散文件(如果您不使用软件包管理器安装软件,这是一种常见情况),您可能想找到这些文件以进行清理。

一种方法是列出所有感兴趣的文件,并与pacman进行检查

# (export LC_ALL=C.UTF-8; comm -13 <(pacman -Qlq | sed 's,/$,,' | sort) <(find /etc /usr /opt -path /usr/lib/modules -prune -o -print | sort))
技巧 lostfiles脚本执行类似的步骤,但还包括一个广泛的黑名单,用于从输出中删除常见的误报。

跟踪软件包创建的未拥有文件

大多数系统在正常运行过程中会缓慢积累一些幽灵文件,如状态文件、日志、索引等。

来自pacutilspacreport可用于跟踪这些文件及其关联,通过/etc/pacreport.conf(参见pacreport(1) § 文件)。

一个例子可能看起来像这样(已省略)

/etc/pacreport.conf
[Options]
IgnoreUnowned = usr/share/applications/mimeinfo.cache

[PkgIgnoreUnowned]
alsa-utils = var/lib/alsa/asound.state
bluez = var/lib/bluetooth
ca-certificates = etc/ca-certificates/trust-source/*
dbus = var/lib/dbus/machine-id
glibc = etc/ld.so.cache
grub = boot/grub/*
linux = boot/initramfs-linux.img
pacman = var/lib/pacman/local
update-mime-database = usr/share/mime/magic

然后,当以root用户身份使用pacreport --unowned-files时,任何未拥有文件如果关联的软件包不再安装(或者创建了任何新文件),都会被列出。

此外,aconfmgraconfmgr-gitAUR)允许使用配置文件脚本跟踪已修改和孤立的文件。

移除未使用的软件包(孤儿包)

孤儿包是指作为依赖安装且不再被任何软件包需要的软件包。

它们会随着时间的推移在您的系统上积累,原因可能是因为使用pacman -R package而不是pacman -Rs package卸载软件包,将软件包作为makedepends安装,或者软件包在更新版本时移除了依赖。

要递归地移除孤儿包及其配置文件

# pacman -Qdtq | pacman -Rns -

如果没有找到孤儿包,输出将是error: argument '-' specified with empty stdin。这是预期的,因为没有将参数传递给pacman -Rns。可以使用来自moreutils包的ifne(1)来前缀第二个命令,以避免该错误。

如果列表中有一个您不想移除的软件包,可以通过将其标记为显式安装来将其从孤儿列表中排除

# pacman -D --asexplicit package
注意 -Qdt参数仅列出真正的孤儿包。要包含被另一个软件包可选依赖的软件包,请将-t标志传递两次(-Qdtt)。
技巧pacman -Qdt命令添加到pacman事务后钩子中,以便在事务孤立软件包时收到通知。当软件包从仓库中删除时,这可能有助于收到通知,因为任何被删除的软件包也会在本地安装上成为孤儿(除非它是显式安装的)。为避免在未找到孤儿包时出现任何failed to execute command错误,请在您的钩子中使用以下命令作为Exec/usr/bin/bash -c "/usr/bin/pacman -Qdt || /usr/bin/echo '=> None found.'"pacman-log-orphans-hookAUR包提供了这样的钩子,并附有更详细的说明。

检测更多不需要的软件包

在某些情况下,上述方法可能无法检测到所有潜在的不需要的软件包。例如,依赖循环(也称为“循环依赖”)、过多的依赖(重复满足)、某些非显式可选依赖等。

要检测此类软件包

$ pacman -Qqd | pacman -Rsu --print -

如果您想一次性移除列表中的所有软件包,请在不带--print参数的情况下运行命令。

有时可能有多个软件包提供相同的项。例如,可能有多个软件包提供ttf-font。根据您的偏好,您可能不想要所有这些软件包。

要检测提供相同项的软件包

$ awk '/%(NAME|PROVIDES)%/{flag=1;next}/^$/{flag=0}flag{ printf "%s\t%s\n", FILENAME, $0}' /var/lib/pacman/local/*/desc  | sed 's%/var/lib/pacman/local/\(.*\)/desc%\1%g' | sort -k2 | uniq -Df1 | column -etN Package,Provides

检查输出并小心移除您不需要的冗余软件包。

移除除核心软件包以外的所有内容

如果需要移除除核心软件包以外的所有软件包,一种方法是将非核心软件包的安装原因设置为依赖,然后移除所有不必要的依赖。

首先,对于所有“显式安装”的软件包,将其安装原因更改为“作为依赖安装”

# pacman -D --asdeps $(pacman -Qqe)

然后,仅将核心软件包(您想移除的那些)的安装原因更改为“显式安装”,以避免将它们作为目标

# pacman -D --asexplicit base linux linux-firmware
  • 可以将其他软件包添加到上面的命令中,以避免被移除。有关其他可能对功能完善的基本系统必需的软件包的更多信息,请参阅安装指南#安装核心软件包
  • 这将也会选择引导加载程序软件包进行移除。系统仍应可启动,但可能无法在没有它的情况下更改引导参数。

最后,按照#移除未使用的软件包(孤儿包)中的说明移除所有“作为依赖安装”的软件包。

获取多个软件包的依赖列表

依赖项将按字母顺序排序并去除重复项。

注意 要仅显示本地已安装软件包的树,请使用pacman -Qi
$ LC_ALL=C.UTF-8 pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u

或者,使用expac

$ expac -l '\n' %E -S packages | sort -u

列出更改的备份文件

要列出被pacman跟踪为可能包含用户更改的配置文件(即PKGBUILD backup 数组中列出的文件)并且已收到用户修改的文件,请使用以下命令:

# pacman -Qii | awk '/\[modified\]/ {print $(NF - 1)}'

以root权限运行此命令将确保包含仅root可读的文件(如/etc/sudoers)。

这可以在进行选择性系统备份时,或在尝试将一个机器的系统配置复制到另一个机器时使用。

提示

备份pacman数据库

以下命令可用于备份本地pacman数据库

$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local

将备份的pacman数据库文件存储在一个或多个离线媒体上,例如U盘、外部硬盘或CD-R。

可以通过将pacman_database.tar.bz2文件移动到/目录并执行以下命令来恢复数据库:

# tar -xjvf pacman_database.tar.bz2
注意 如果pacman数据库文件已损坏,并且没有可用的备份文件,那么重建pacman数据库仍有可能。请参阅#恢复pacman的本地数据库
技巧 pakbak-gitAUR包提供了一个脚本和一个systemd服务来自动化此任务。可以在/etc/pakbak.conf中进行配置。

轻松查看更新日志

当维护者更新软件包时,提交通常会以有用的方式进行注释。用户可以通过安装pacologAUR从命令行快速查看这些信息。该实用程序通过使用pacolog package来列出官方仓库或AUR中软件包的最近提交消息。

安装与恢复

获取和恢复软件包的替代方法。

从 CD/DVD 或 USB 盘安装软件包

本文档或章节候选与 #自定义本地仓库 合并。

注意: 作为示例使用,并避免重复(在Talk:Pacman/Tips and tricks中讨论)

要下载软件包或软件包组

# cd ~/Packages
# pacman -Syw --cachedir "$PWD" base base-devel grub-bios xorg gimp
# repo-add ./custom.db.tar.zst ./*.pkg.tar.zst

Pacman默认会引用宿主安装,但它不会正确解析和下载现有依赖。在需要所有软件包和依赖的情况下,建议创建一个临时的空数据库并使用--dbpath引用它。

# mkdir /tmp/blankdb
# pacman -Syw --cachedir "$PWD" --dbpath /tmp/blankdb base base-devel grub-bios xorg gimp
# repo-add ./custom.db.tar.zst ./*.pkg.tar.zst

然后,您可以将“Packages”目录刻录到光盘(如CD、DVD)上,或将其传输到USB闪存驱动器、外部硬盘等。

要安装

1. 挂载媒体

对于光盘驱动器

# mount --mkdir /dev/sr0 /mnt/repo

对于USB闪存驱动器、硬盘驱动器等

# mount --mkdir /dev/sdxY /mnt/repo

2. 编辑pacman.conf并在其他仓库(例如extra、core等) *之前* 添加此仓库。这很重要。不要只取消注释底部的那个。这样可以确保CD/DVD/USB中的文件优先于标准仓库中的文件。

/etc/pacman.conf
[custom]
SigLevel = PackageRequired
Server = file:///mnt/repo/Packages

3. 最后,同步pacman数据库以能够使用新仓库

# pacman -Syu

自定义本地仓库

使用pacman附带的repo-add脚本来生成个人仓库的数据库。使用repo-add --help了解更多用法细节。软件包数据库是一个tar文件,可以选择性地压缩。有效扩展名为.db.files,后跟存档扩展名.tar.tar.gz.tar.bz2.tar.xz.tar.zst.tar.Z。文件不必存在,但所有父目录都必须存在。

要向数据库添加新软件包,或替换数据库中现有软件包的旧版本,请运行

$ repo-add /path/to/repo.db.tar.zst /path/to/package-1.0-1-x86_64.pkg.tar.zst

使用repo-add时,数据库和软件包不必在同一目录中,但请记住,当使用该数据库的pacman时,它们应该在一起。将所有要包含在仓库中的已构建软件包存储在一个目录中,也可以使用shell通配符扩展来一次添加或更新多个软件包。

$ repo-add /path/to/repo.db.tar.zst /path/to/*.pkg.tar.zst
警告 repo-add按照在命令行上传递的顺序将条目添加到数据库中。如果涉及同一软件包的多个版本,必须注意确保正确版本最后添加。特别是,请注意shell使用的词法顺序取决于区域设置,并且与pacman使用的vercmp(8)排序不同。

如果您想支持多个架构,应采取预防措施以避免错误发生。每个架构应有自己的目录树。

$ tree ~/customrepo/ | sed "s/$(uname -m)/arch/g"
/home/archie/customrepo/
└── arch
    ├── customrepo.db -> customrepo.db.tar.zst
    ├── customrepo.db.tar.zst
    ├── customrepo.files -> customrepo.files.tar.zst
    ├── customrepo.files.tar.zst
    └── personal-website-git-b99cce0-1-arch.pkg.tar.zst

1 directory, 5 files

repo-add可执行文件会检查软件包是否合适。如果不是,您会遇到类似的错误消息:

==> ERROR: '/home/archie/customrepo/arch/foo-arch.pkg.tar.zst' does not have a valid database archive extension.

repo-remove用于从软件包数据库中移除软件包,但命令行中只指定软件包名称。

$ repo-remove /path/to/repo.db.tar.zst pkgname

一旦本地仓库数据库创建完毕,就将其添加到每个要使用该仓库的系统的pacman.conf中。自定义仓库的示例在pacman.conf中。仓库的名称是数据库文件名,省略了文件扩展名。对于上面的示例,仓库的名称将是简单的repo。使用file:// URL或通过HTTP使用https:///path/to/directory引用仓库的位置。

如果愿意,请将自定义仓库添加到非官方用户仓库列表中,以便社区从中受益。

网络共享的pacman缓存

请参阅包代理缓存

从文件系统重新创建软件包

要从文件系统重新创建软件包,请使用fakepkgAUR。系统中的文件按原样获取,因此任何修改都将存在于组装好的软件包中。因此,不鼓励分发重新创建的软件包;请参阅ABSArch Linux Archive作为替代。

已安装软件包列表

保留所有显式安装软件包的列表对于备份系统或加快新系统的安装非常有用。

$ pacman -Qqe > pkglist.txt
  • 使用-t选项,将其他显式安装软件包所需的软件包排除在外。如果从此列表重新安装,它们将作为依赖项安装。
  • 使用-n选项,将外部软件包(例如来自AUR)从列表中排除。
  • 使用comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdeplist.txt来创建一个已安装可选依赖项的列表,可以使用--asdeps重新安装。
  • 使用pacman -Qqem > foreignpkglist.txt创建AUR和其他显式安装的外部软件包的列表。

要保持显式安装软件包的最新列表(例如与版本化的/etc/结合使用),您可以设置一个钩子。示例:

[Trigger]
Operation = Install
Operation = Remove
Type = Package
Target = *

[Action]
When = PostTransaction
Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /etc/pkglist.txt'

从列表中安装软件包

要从先前保存的软件包列表中安装软件包,同时不重新安装已安装但已更新的软件包,请运行:

# pacman -S --needed - < pkglist.txt

但是,列表中很可能包含来自AUR或其他本地安装的外部软件包。要从列表中过滤掉外部软件包,可以使用以下命令增强之前的命令行:

# pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))

最终,要确保您的系统已安装的软件包与列表匹配,并移除列表中未提及的所有软件包:

# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
技巧 这些任务可以自动化。请参阅bacpacAURpackupAURpacmanityAURpugAUR以获取示例。

列出所有已更改的软件包文件

如果您怀疑文件损坏(例如由于软件/硬件故障),但不确定文件是否已损坏,您可能想与软件包中的哈希校验和进行比较。这可以使用pacutils完成。

# paccheck --sha256sum --quiet

有关数据库恢复,请参阅#恢复pacman的本地数据库mtree文件也可以从相应的软件包文件中提取为.MTREE

注意 如果怀疑恶意更改,不要直接使用此命令!在这种情况下,建议采取安全措施,例如使用Live介质和独立的哈希校验和源。

重新安装所有软件包

要重新安装所有本地软件包,请使用:

# pacman -Qqn | pacman -S -

外部(AUR)软件包必须单独重新安装;您可以使用pacman -Qqm列出它们。

Pacman默认保留安装原因

警告 要强制覆盖所有软件包,请使用--overwrite=*,尽管这应该是最后的手段。请参阅系统维护#避免某些pacman命令

恢复pacman的本地数据库

请参阅pacman/恢复本地数据库

从现有安装恢复损坏的安装

如果您搞砸了一个Arch安装,导致软件包损坏,可以重新安装所有软件包,希望使其恢复正常运行(假设损坏的安装的根目录已挂载到/brokenArch)。

# pacman -S $(pacman -Qq --dbpath /brokenArch/var/lib/pacman) --root /brokenArch --dbpath /brokenArch/var/lib/pacman

查看远程.pkg文件中的文件

paccat是一个小程序,它可以查找哪个软件包包含给定文件,下载它,然后打印其内容。这可用于读取特定文件,将更改的文件恢复到其原始状态,以及在不安装软件包的情况下提取文件。

例如,如果您想查看systemd软件包提供的/etc/systemd/logind.conf的内容:

$ paccat systemd etc/systemd/logind.conf

或者,如果您想查看由任何软件包提供的archive.h的内容:

$ paccat -F archive.h

bsdtar也可用于显示内容:

$ bsdtar -xOf /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst etc/systemd/logind.conf

或者您可以使用vim来浏览存档:

$ vim /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst

查找使用旧版本库的应用程序

正在运行的进程不会自动感知由更新引起的变化。相反,它们会继续使用旧的库版本。这可能是不希望的,因为潜在的安全漏洞或其他错误以及版本不兼容性问题。

依赖于更新的库的进程可以使用htop(它会突出显示受影响程序的名称)或使用基于lsof的片段来查找,后者还会打印库的名称。

# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u

此解决方案只能检测通常由正在运行的进程保持打开状态的文件,这基本上将其限制为共享库(.so文件)。它可能会遗漏某些依赖项,例如Java或Python应用程序的依赖项。

仅安装所需语言的内容

许多软件包会安装多种语言的文档和翻译。一些程序旨在删除这些不必要的文件,例如localepurgeAUR,它在软件包安装后运行以删除不需要的区域文件。/etc/pacman.conf中的NoExtract指令提供了一种更具预防性的方法,它会阻止这些文件被安装。

注意 正如Pacman#Skip files from being installed to system 中解释的那样,“后面的规则会覆盖前面的规则,并且您可以通过在前面加上!来否定一个规则”。

要阻止安装所有帮助文件的翻译,但保留C locale,请添加

NoExtract = usr/share/help/* !usr/share/help/C/*

要阻止安装所有HTML文档,请添加

NoExtract = usr/share/gtk-doc/html/*
NoExtract = usr/share/doc/HTML/*
警告 一些用户注意到,删除所有 locale 会导致 dmenuSteam 出现意外后果,即使是在 Xorg 下。下面的示例经过调整,以避免此类问题,仅安装英语(美国)文件和必需的C locale。

要阻止安装各种 locale,但保留必需的 locale,请添加

NoExtract = usr/share/locale/* usr/share/X11/locale/*/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/* !usr/share/X11/locale/en_US.UTF-8/*
NoExtract = !usr/share/X11/locale/compose.dir !usr/share/X11/locale/iso8859-1/*
NoExtract = !*locale*/en*/* !usr/share/*locale*/locale.*
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso*
NoExtract = usr/share/i18n/charmaps/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/i18n/charmaps/ANSI_X3.4-1968.gz
NoExtract = !usr/share/*locales/trans*
NoExtract = !usr/share/*locales/C !usr/share/*locales/POSIX

要阻止安装翻译后的 man pages,请添加

NoExtract = usr/share/man/* !usr/share/man/man*

要阻止在 vim-runtime 中安装语言文件,请添加

NoExtract = usr/share/vim/vim*/lang/*

要阻止在 Qt 应用程序中安装除英语之外的所有内容,请添加

NoExtract = usr/share/*/translations/*.qm !usr/share/*/translations/*en.qm usr/share/*/nls/*.qm usr/share/qt/phrasebooks/*.qph usr/share/qt/translations/*.pak !*/en-US.pak

要阻止在 ChromiumElectron 应用程序中安装除英语之外的所有内容,请添加

NoExtract = usr/share/*/locales/*.pak opt/*/locales/*.pak usr/lib/*/locales/*.pak !*/en-US.pak

要阻止在 LibreOffice 中安装英语帮助文件,请添加

NoExtract = usr/lib/libreoffice/help/en-US/*

要阻止在 OnlyOffice 中安装除英语之外的所有内容,请添加

NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/*
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/locale/* !*/en.json
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/help/*/* !*/help/en/*
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/symboltable/* !*/en.json
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/documenteditor/forms/locale/* !*/en.json
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/spreadsheeteditor/main/resources/formula-lang/* !*/en.json !*/en_desc.json
NoExtract = opt/onlyoffice/desktopeditors/converter/empty/*/* !opt/onlyoffice/desktopeditors/converter/empty/en-US/*
NoExtract = opt/onlyoffice/desktopeditors/converter/templates/*/* !opt/onlyoffice/desktopeditors/converter/templates/EN/*

要阻止安装除英语 iBus 表情符号词典之外的所有内容,请添加

NoExtract = usr/share/ibus/dicts/emoji-*.dict !usr/share/ibus/dicts/emoji-en.dict

在连接不佳的情况下安装软件包

当尝试从连接不佳的网络(例如,使用手机的火车)安装软件包时,使用 --disable-download-timeout 选项来减少出现诸如以下错误的几率:

error: failed retrieving file […] Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds

或者

error: failed retrieving file […] Operation timed out after 10014 milliseconds with 0 out of 0 bytes received

性能

下载速度

下载软件包时,pacman 按照 /etc/pacman.d/mirrorlist 中的顺序使用镜像。列表中默认排在最前面的镜像可能不是对您来说最快的。要选择更快的镜像,请参阅 Mirrors

通过使用 并行下载,可以提高 Pacman 下载软件包的速度。这是在 pacman 6.0.0 中添加的一个主要功能请求(FS#20056)。自 pacman 7.0.0 起,它默认启用。

除了 pacman 内置的文件下载器外,还可以使用单独的应用程序来下载软件包。

在所有情况下,请确保在进行任何修改之前更新到最新的 pacman

# pacman -Syu

wget

如果您需要比 pacman 内置功能更强大的代理设置,这将非常有用。

要使用 wget,请先 安装 wget 软件包,然后通过取消注释 [options] 部分中的以下行来修改 /etc/pacman.conf

XferCommand = /usr/bin/wget --passive-ftp --show-progress -c -q -N %u

除了取消注释 /etc/pacman.conf 中的 wget 参数外,您还可以直接修改 wget 配置文件(系统范围的文件是 /etc/wgetrc,每个用户的文件是 $HOME/.wgetrc)。

aria2

aria2 是一个轻量级的下载工具,支持可恢复和分段的 HTTP/HTTPS 和 FTP 下载。aria2 允许与 Arch 镜像进行多个同时的 HTTP/HTTPS 和 FTP 连接,这应该会提高文件和软件包检索的下载速度。

安装 aria2,然后编辑 /etc/pacman.conf,在 [options] 部分添加以下行:

XferCommand = /usr/bin/aria2c --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 --timeout=5 --dir=/ --out %o %u
提示 这个使用 pacman 和 aria2 的替代配置 试图简化配置并增加了更多配置选项。

请参阅 aria2c(1) § OPTIONS 以了解使用的 aria2c 选项。

  • -d, --dirpacman 指定的用于存储下载文件(们)的目录。
  • -o, --out:下载文件(们)的输出文件名(们)。
  • %opacman 指定的本地文件名(们)的变量。
  • %upacman 指定的下载 URL 的变量。

其他应用程序

您还可以将其他下载应用程序与 pacman 一起使用。它们及其关联的 XferCommand 设置如下:

  • snarf: XferCommand = /usr/bin/snarf -N %u
  • lftp: XferCommand = /usr/bin/lftp -c pget %u
  • axel: XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u
  • hget: XferCommand = /usr/bin/hget %u -n 2 -skip-tls false (请阅读 Github 项目页面的文档 以获取更多信息)
  • saldl: XferCommand = /usr/bin/saldl -c6 -l4 -s2m -o %o %u (请阅读 项目页面的文档 以获取更多信息)

工具

提示 许多(不受支持的)AUR 助手也充当 Pacman 的包装器,其中一些是图形化的。
  • isfree — 一个列出非自由软件包的 Bash 脚本。基于 Parabola 的黑名单。
https://github.com/leo-arch/isfree || isfreeAUR
  • Lostfiles — 标识不属于任何软件包的文件。 脚本。
https://github.com/graysky2/lostfiles || lostfiles
  • pacutils — libalpm 程序的辅助库。
https://github.com/andrewgregory/pacutils || pacutils
  • pkgfile — 查找文件属于哪个软件包的工具。
https://github.com/falconindy/pkgfile || pkgfile
  • pkgtop — GNU/Linux 的交互式软件包管理器和资源监视器。
https://github.com/orhun/pkgtop || pkgtop-gitAUR
  • repoctl — 用于管理本地存储库的工具。
https://github.com/cassava/repoctl || repoctlAUR
  • repose — 一个 Arch Linux 存储库构建工具。
https://github.com/vodik/repose || repose
  • snap-pac — 使 pacman 自动使用 snapper 创建预/后快照,类似于 openSUSE 的 YaST。
https://github.com/wesbarnett/snap-pac || snap-pac
  • vrms-arch — 一个虚拟 Richard M. Stallman,用于告知您已安装了哪些非自由软件包。
https://github.com/orospakr/vrms-arch || vrms-arch-gitAUR

图形界面

警告 PackageKit 默认会打开系统权限,并且 不推荐 用于一般用途。请参阅 FS#50459FS#57943
https://apps.kde.org/discover/ || discover
  • GNOME PackageKit — 基于 PackageKit 的 GTK 3 软件包管理器,用 C 编写。
https://freedesktop.org/software/PackageKit/ || gnome-packagekit
  • pcurses — 用 C++ 编写的curses TUI pacman 包装器。
https://github.com/schuay/pcurses || pcursesAUR
  • tkPacman — 用 Tcl 编写的 Tk pacman 包装器。
https://sourceforge.net/projects/tkpacman || tkpacmanAUR