安装 Arch Linux 不是一次性配置,而是一项例行任务。为了长期维护 Arch Linux 系统,我会定期执行以下任务:

  • 每次升级前查看 Arch 新闻动态;
  • 定期更新系统和 AUR 软件包;
  • 移除不再被任何东西需要的孤立软件包;
  • 定期修剪 pacman 软件包缓存;
  • 升级后审查 .pacnew 和 .pacsave 配置文件;
  • 检查失败的服务。

这些任务单独来看没有哪一项是紧急的,但连续几个月全部跳过,通常就是“我的 Arch 系统感觉坏了”这类报告的首要原因。

在文末,我还附上了建议的执行频率,这样你就不必猜测这些操作该多久运行一次。

适用范围: 本指南假定你已按照我们的 Arch Linux 安装后指南,配置了标准的 pacman 加 AUR 助手环境。

1. 每次升级前检查新闻动态

在运行升级之前,先在浏览器中打开 archlinux.org/news。

Arch Linux 是一个滚动发行版,没有按计划发布的“版本”可供预先测试变更。大多数情况下,pacman -Syu 都能正常工作。偶尔,某些变更需要手动干预(分区布局调整、配置迁移、软件包拆分),而这些变更总会先公布在 新闻动态 上,然后相关软件包才会进入仓库。

跳过这一步,是导致更新后感觉系统“坏了”的常见原因。

2. 更新系统和 AUR 软件包

2.1. 全系统升级

sudo pacman -Syu

请始终一起运行 -Syu。切勿只同步(-Sy)而不升级(-u)。Arch 不支持部分升级,只同步不升级是破坏软件包依赖关系最常见的方式之一。

2.2. 更新 AUR 软件包

AUR 助手(paru 或 yay)可以用一条命令同时处理官方仓库和 AUR 软件包:

paru -Syu

AUR 软件包不是预构建的。更新一个 AUR 软件包意味着在你自己的机器上从源码重新构建,因此 AUR 软件包较多的系统,更新耗时会比纯官方仓库更新更长。

3. 移除孤立软件包

孤立软件包 指最初作为其他软件的依赖项安装,但那个软件后来已被移除或替换,结果这个依赖被留在系统里,没有任何东西再使用它。

3.1. 查找孤立包

pacman -Qdt

3.2. 移除它们

移除操作需要 root 权限:

sudo pacman -Rns $(pacman -Qdtq)

-Rns 标志会移除这些软件包、它们现已不再需要的依赖,以及与之关联的任何配置文件。

如果没有孤立包,这条命令会输出 error: argument '-' specified with empty stdin,而不是什么都不做地静默结束。这是正常且无害的,只是表示没有内容传给移除命令,并不是系统出了问题。

也值得定期检查:

pacman -Qm 会列出“外来”软件包,也就是任何从 AUR 或手工安装、而非来自官方仓库的软件包。偶尔会有某个 AUR 软件包被上游整个删除,你的 AUR 助手从此无法再更新它,而你却无从知晓。这个列表值得每隔几个月看一眼。

4. 清理 pacman 软件包缓存

每次安装或更新软件包时,pacman 都会在 /var/cache/pacman/pkg/ 中保留一份下载文件的副本。

$ ls /var/cache/pacman/pkg/
abseil-cpp-20260526.0-2-x86_64.pkg.tar.zst
abseil-cpp-20260526.0-2-x86_64.pkg.tar.zst.sig
accountsservice-26.13.3-1-x86_64.pkg.tar.zst
accountsservice-26.13.3-1-x86_64.pkg.tar.zst.sig
[...]

这是有意为之:它让你能在某次更新弄坏东西时降级软件包。但若不加管理,缓存会无限增长。

4.1. 使用 paccache 修剪

sudo pacman -S pacman-contrib
sudo paccache -rk2

-rk2 标志会保留每个软件包最近 2 个版本,并移除其余版本。这样既保留了降级的安全网,又不会让缓存无限膨胀。

4.2. 自动化

sudo systemctl enable --now paccache.timer

更多细节,请阅读下方链接中的指南:

5. 审查并合并 .pacnew(和 .pacsave)文件

当更新修改了你自定义过的配置文件时,pacman 不会覆盖你的版本,而是把新的默认配置以 filename.pacnew 的形式安装在你原有配置旁边,由你决定如何处理。

另一种相关文件类型 .pacsave 在你移除一个拥有你修改过的配置的软件包时出现。它是你的旧版本,被保留下来以备将来重装。

5.1. 查找并合并它们

sudo pacman -S pacman-contrib
pacdiff

pacdiff 会扫描系统中所有的 .pacnew 和 .pacsave 文件,并引导你逐一与现有配置合并,显示差异,让你能准确看到发生了什么变化。

为什么这很重要:

长期忽略这些文件,你的配置会逐渐偏离软件包实际期望的状态。通常几个月内都无害,直到某次更新假设了一个你的旧配置里没有的默认值,于是一个难以追溯到那个被遗忘配置文件的故障就出现了。

关于这两种文件的更多信息,请阅读以下指南:

6. 检查失败的服务和错误

6.1. 失败的 systemd 服务

systemctl --failed

空结果就是好结果:所有已启用的服务都在上次启动时成功启动。任何列在这里的服务都值得用 journalctl -u service-name 继续排查。

6.2. 审查 pacman 日志

less /var/log/pacman.log

值得定期浏览,尤其在一次有问题的更新之后。它完整记录了每个软件包的安装、移除或升级操作,并带有时间戳。

6.3. 别忘了仍在运行的进程

库的更新不会对已经在运行的程序生效。例如,一个开了好几天的浏览器,在重启之前,内存里使用的仍是旧版本。

定期重启——而不仅是在内核更新之后——是确保每个运行中的进程真正运行在你刚安装的版本上的最简单方法。

7. 建议的执行频率

一个超过六个月没有更新的系统,往往会在最终的那次更新里一次性面对几十个累积的 .pacnew 文件和数 GB 的缓存,使得那次迟来的追赶式更新比任何一次每周更新都危险得多。少量多次胜过久积大更。

常见问题(FAQ)

问:移除所有孤立软件包安全吗?

答:通常安全。pacman -Qdt 命令只会列出当前没有任何东西依赖的软件包。罕见的例外是:某个软件包因 pacman 无法察觉的原因被手动保留(例如你针对它编译内核模块),却从未被标记为“显式安装”。如果你对某个软件包拿不准,先弄清楚它是什么再移除,不要盲目地把整个列表管道传给删除命令。

问:如果一直忽略 .pacnew 文件会怎样?

答:不会立刻怎样。你的旧配置会照常工作。风险是累积的:每忽略一个 .pacnew 文件,就多一处系统实际配置与当前软件包版本期望之间的偏差,这个差距最终会在未来某次无关的更新中引发一个令人困惑的故障。

问:pacman 缓存塞满了磁盘,现在怎么办?

答:立即运行 sudo paccache -rk2 回收空间,然后按第 4 步设置 paccache.timer,避免再次发生。如果你现在就要腾出空间、也不在乎降级安全,sudo pacman -Scc 会彻底清空缓存,但你会失去回滚任何已安装软件包的能力。

问:Arch 到底应该多久更新一次?

答:通常建议每周一次。频率足够高,使任何单次更新都规模很小、出问题时容易排查;频率又足够低,不至于成为每天的例行杂事。间隔数月才更新,往往会带来那种一次更新“全都坏了”的戏剧性体验,因为几十处变更同时落地,而不是一次一两处。

资源