pacman/技巧和提示
有关提高所提供技巧或 pacman 本身灵活性的通用方法,请参阅 Core utilities 和 Bash。
维护
grep -Fxf
或 grep -Fxvf
来代替使用 comm(它需要使用 sort 进行排序的输入)。另请参阅 系统维护。
列出软件包
在未使用的仓库中
默认情况下,pacman.conf
中列出的仓库用于同步、搜索、安装和从中升级。可以更改此设置以获得更多通用性,例如,仅将某些仓库用于在其中搜索[1]
/etc/pacman.conf
... [multilib] Usage = Sync Search ...
带版本
您可能想要获取已安装软件包及其版本的列表,这在报告错误或讨论已安装软件包时非常有用。
- 列出所有显式安装的软件包:
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
软件包和依赖
要列出软件包及其依赖项的大小,
要列出多个软件包的下载大小(将 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
不在指定的组、仓库或元软件包中
$ 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)
开发软件包
要列出所有开发/不稳定软件包,请运行
$ 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
识别任何软件包都不拥有的文件
如果您的系统中有任何软件包都不拥有的 stray 文件(如果您不 使用软件包管理器安装软件,这是一种常见情况),您可能想要查找此类文件以便清理它们。
一种方法是列出所有感兴趣的文件,并针对 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))
跟踪软件包创建的未拥有文件
大多数系统在通常的运行过程中会慢慢收集一些 ghost 文件,例如状态文件、日志、索引等。
来自 pacutils 的 pacreport
可用于通过 /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
时,如果关联的软件包不再安装(或者如果创建了任何新文件),则将列出任何未拥有的文件。
此外,aconfmgr (aconfmgr-gitAUR) 允许使用配置文件跟踪修改和孤立文件。
移除未使用的软件包(孤立软件包)
孤立软件包是指作为依赖项安装的,但任何软件包不再需要的软件包。
它们可能会随着时间的推移在您的系统上积累,原因可能是使用 pacman -R package
而不是 pacman -Rs package
卸载软件包、将软件包作为 makedepends 安装,或者软件包在新版本中删除了依赖项。
对于递归删除孤立软件包及其配置文件
# pacman -Qdtq | pacman -Rns -
如果未找到孤立软件包,则输出为 error: argument '-' specified with empty stdin
。这是预期的,因为没有参数传递给 pacman -Rns
。可以通过在第二个命令前加上 ifne(1)(来自 moreutils 软件包)来避免此错误。
如果列表中有您不想删除的软件包,可以通过将其标记为显式安装来将其从孤立软件包列表中排除
# pacman -D --asexplicit package
-Qdt
仅列出真正的孤立软件包。要包含另一个软件包可选需要的软件包,请传递 -t
标志两次(即,-Qdtt
)。pacman -Qdt
命令添加到 pacman 事后事务 hook 中,以便在事务使软件包成为孤立软件包时收到通知。当软件包从仓库中删除时,这可能很有用,因为任何删除的软件包在本地安装上也将成为孤立软件包(除非它是显式安装的)。为了避免在未找到孤立软件包时出现任何“failed to execute command”错误,请在 hook 中对 Exec
使用以下命令:/usr/bin/bash -c "/usr/bin/pacman -Qdt || /usr/bin/echo '=> None found.'"
软件包 pacman-log-orphans-hookAUR 提供了这样一个 hook,并带有更详细的说明。检测更多不需要的软件包
在某些情况下,上述方法不会检测到所有可能不需要的软件包。例如,依赖循环(也称为“循环依赖”)、过多的依赖项(多次满足)、一些非显式可选依赖项等。
要检测此类软件包
$ pacman -Qqd | pacman -Rsu --print -
如果您想一次删除列表中的所有软件包,请在不带 --print
参数的情况下运行该命令。
移除除基本软件包之外的所有内容
如果需要移除除基本软件包之外的所有软件包,一种方法是将非基本软件包的安装原因设置为依赖项,然后移除所有不必要的依赖项。
首先,对于所有“显式安装”的软件包,将其安装原因更改为“作为依赖项安装”
# 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 备份数组 中列出的文件)并且已收到用户修改的文件,请使用以下命令
# pacman -Qii | awk '/\[modified\]/ {print $(NF - 1)}'
以 root 权限运行此命令将确保输出中包含仅 root 用户可读的文件(例如 /etc/sudoers
)。
这可以在执行选择性系统备份或尝试从一台机器复制系统配置到另一台机器时使用。
- 请参阅 #列出软件包中所有已更改的文件 以列出 pacman 知道的所有已更改的文件,而不仅仅是备份文件。
- 请参阅 #识别任何软件包都不拥有的文件 以列出系统中 pacman 未跟踪的所有文件。
备份 pacman 数据库
以下命令可用于备份本地 pacman 数据库
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local
将备份 pacman 数据库文件存储在一个或多个离线介质上,例如 USB 驱动器、外部硬盘驱动器或 CD-R。
可以通过将 pacman_database.tar.bz2
文件移动到 /
目录并执行以下命令来恢复数据库
# tar -xjvf pacman_database.tar.bz2
轻松查看更新日志
当维护者更新软件包时,提交通常以有用的方式进行注释。用户可以通过安装 pacologAUR 从命令行快速检查这些注释。此实用程序通过使用 pacolog package
列出官方仓库或 AUR 中软件包的最新提交消息。
安装和恢复
获取和恢复软件包的替代方法。
从 CD/DVD 或 USB 驱动器安装软件包
要下载软件包或软件包组
# cd ~/Packages # pacman -Syw --cachedir . base base-devel grub-bios xorg gimp # repo-add ./custom.db.tar.zst ./*.pkg.tar.zst
Pacman 默认会引用主机安装,因此无法正确解析和下载现有依赖项。如果需要所有软件包和依赖项,建议创建一个临时的空白 DB 并使用 --dbpath
引用它
# mkdir /tmp/blankdb # pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel grub-bios xorg gimp # repo-add ./custom.db.tar.zst ./*.pkg.tar.zst
然后,您可以将“Packages”目录刻录到光盘(例如 CD、DVD)或将其传输到 USB 闪存驱动器、外部 HDD 等。
安装
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 glob 扩展一次添加或更新多个软件包
$ repo-add /path/to/repo.db.tar.zst /path/to/*.pkg.tar.zst
如果您希望支持多种架构,则应采取预防措施以防止发生错误。每个架构都应有自己的目录树
$ 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://127.0.0.1/path/to/directory
引用仓库的位置。
如果愿意,请将自定义仓库添加到 非官方用户仓库列表,以便社区可以从中受益。
请参阅 软件包代理缓存。
从文件系统重建软件包
要从文件系统重建软件包,请使用 fakepkgAUR。系统中的文件按原样获取,因此任何修改都将出现在组装的软件包中。因此,不建议分发重建的软件包;请参阅 ABS 和 Arch Linux 归档 以了解替代方案。
已安装软件包列表
保留所有显式安装的软件包的列表对于备份系统或加快新系统的安装非常有用
$ pacman -Qqe > pkglist.txt
- 使用选项
-t
,其他显式安装的软件包已需要的软件包不会提及。如果从此列表重新安装,它们将被安装,但仅作为依赖项。 - 使用选项
-n
,外部软件包(例如来自 AUR 的软件包)将从列表中省略。 - 使用
comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdeplist.txt
还可以创建已安装的可选依赖项的列表,可以使用--asdeps
重新安装它们。 - 使用
pacman -Qqem > foreignpkglist.txt
创建已显式安装的 AUR 和其他外部软件包的列表。
要保持显式安装的软件包的最新列表(例如,与版本控制的 /etc/
结合使用),您可以设置 hook。示例
[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))
列出软件包中所有已更改的文件
如果您怀疑文件损坏(例如,由于软件/硬件故障),但不确定文件是否已损坏,您可能想要与软件包中的哈希和进行比较。这可以使用 pacutils 完成
# paccheck --sha256sum --quiet
有关数据库恢复,请参阅 #恢复 pacman 的本地数据库。mtree
文件也可以 从各自的软件包文件中提取为 .MTREE
。
重新安装所有软件包
要重新安装所有原生软件包,请使用
# pacman -Qqn | pacman -S -
外部 (AUR) 软件包必须单独重新安装;您可以使用 pacman -Qqm
列出它们。
Pacman 默认保留 安装原因。
--overwrite=*
,但这应该是绝对的最后手段。请参阅 系统维护#避免某些 pacman 命令。恢复 pacman 的本地数据库
请参阅 pacman/恢复本地数据库。
从现有安装中恢复 USB 驱动器
如果您在 USB 驱动器上安装了 Arch,并且设法将其搞砸了(例如,在仍在写入时将其移除),那么可以重新安装所有软件包并希望使其恢复并重新工作(假设 USB 驱动器已挂载在 /newarch
中)
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
查看 .pkg 文件中的单个文件
例如,如果您想查看 systemd 软件包中提供的 /etc/systemd/logind.conf
的内容
$ 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
指令提供的,该指令可以防止这些文件被安装。
!
来否定规则”。要阻止安装帮助文件的所有翻译,但 C 语言环境除外,请添加
NoExtract = usr/share/help/* !usr/share/help/C/*
要阻止安装所有 HTML 文档,请添加
NoExtract = usr/share/gtk-doc/html/* NoExtract = usr/share/doc/HTML/*
要阻止安装各种 语言环境,但必需的语言环境除外,请添加
NoExtract = usr/share/locale/* usr/share/X11/locale/*/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/* 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 手册页,请添加
NoExtract = usr/share/man/* !usr/share/man/man*
要阻止安装 vim-runtime 中的语言文件,请添加
NoExtract = usr/share/vim/vim*/lang/*
要阻止在 Qt 应用程序中安装除英语内容之外的所有内容,请添加
NoExtract = usr/share/*/translations/*.qm usr/share/*/nls/*.qm usr/share/qt/phrasebooks/*.qph usr/share/qt/translations/*.pak !*/en-US.pak
要阻止在 Electron 应用程序中安装除英语内容之外的所有内容,请添加
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 下载软件包的速度,这是一个主要的功能请求 (FS#20056),在 pacman 6.0.0 中添加。
除了 pacman 的内置文件下载器之外,还可以使用单独的应用程序来下载软件包。
在任何情况下,在进行任何修改之前,请确保您拥有最新的 pacman。
# pacman -Syu
Powerpill
Powerpill 是一个 pacman 包装器,它使用并行和分段下载来尝试加速 pacman 的下载速度。
wget
如果您需要比 pacman 内置功能更强大的代理设置,这也非常方便。
要使用 wget
,首先 安装 wget 软件包,然后通过取消注释 /etc/pacman.conf
中 [options]
部分的以下行来修改它
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
有关使用的 aria2c 选项,请参阅 aria2c(1) § OPTIONS。
-d, --dir
:存储下载文件(夹)的目录,由 pacman 指定。-o, --out
:下载文件(夹)的输出文件名。%o
:表示由 pacman 指定的本地文件名(夹)的变量。%u
:表示由 pacman 指定的下载 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
(更多信息请阅读 项目页面上的文档)
实用程序
- isfree — 一个 Bash 脚本,用于列出非自由软件包。基于 Parabola 的黑名单。
- Lostfiles — 脚本,用于识别不属于任何软件包的文件。
- pacutils — 基于 libalpm 程序的助手库。
- pkgfile — 用于查找文件属于哪个软件包的工具。
- pkgtop — 为 GNU/Linux 设计的交互式软件包管理器和资源监视器。
- repoctl — 帮助管理本地仓库的工具。
- repose — 一个 Arch Linux 仓库构建工具。
- snap-pac — 使 pacman 自动使用 snapper 创建类似 openSUSE 的 YaST 的预/后快照。
- vrms-arch — 一个虚拟的 Richard M. Stallman,用于告诉您安装了哪些非自由软件包。
图形界面
- Deepin App Store — 使用 PackageKit 为 DDE 构建的第三方应用商店,使用 DTK。支持 AppStream 元数据。
- Discover — Qt 5 应用程序管理器,使用 PackageKit 用 C++/QML 编写。支持 AppStream 元数据、Flatpak 和 固件更新。是 plasma 的一部分。
- GNOME PackageKit — GTK 3 软件包管理器,使用 PackageKit 用 C 编写。
- pcurses — 用 C++ 编写的 Curses TUI pacman 包装器。
- tkPacman — 用 Tcl 编写的 Tk pacman 包装器。