Arch Linux 基础命令

本文记录 Arch Linux 中 pacman、AUR、Btrfs 和 fastfetch 的基础命令。命令使用普通用户执行,需要系统权限时配合 sudo

命令中的 <PACKAGE><FILE_PATH><BTRFS_UUID> 等内容是占位符,执行前需要替换为真实值。

pacman

pacman 是 Arch Linux 的软件包管理器,负责查询、安装、更新和卸载官方仓库中的软件包。详细说明参见 ArchWiki pacman

搜索软件包

在已同步的官方仓库数据库中搜索包名和描述:

pacman -Ss <KEYWORD>

只搜索已经安装的软件包:

pacman -Qs <KEYWORD>

搜索结果会显示仓库、包名、版本、安装状态和描述。

查看软件包信息

查看官方仓库中的包信息:

pacman -Si <PACKAGE>

查看本地已安装包的信息:

pacman -Qi <PACKAGE>

查看本地包的配置文件及其修改状态:

pacman -Qii <PACKAGE>

输出可用于确认软件包版本、依赖、安装原因、安装时间和可选依赖。

安装软件包

安装官方仓库中的软件包:

sudo pacman -S <PACKAGE>

如果不确定当前仓库数据库和系统是否处于同一更新状态,先完成系统升级并安装:

sudo pacman -Syu <PACKAGE>

安装后验证:

pacman -Q <PACKAGE>

输出应包含包名和已安装版本。

不要使用 sudo pacman -Sy <PACKAGE>。该命令只刷新仓库数据库并安装单个包,可能让新软件包与旧系统库混用,形成 Arch 不支持的部分升级。

更新系统

同步仓库数据库并完整更新系统:

sudo pacman -Syu

更新前安全查看当前版本和仓库最新版本:

checkupdates

checkupdatespacman-contrib 提供。输出格式如下:

包名 当前版本 -> 最新版本

检查 AUR 包更新:

paru -Qua

更新前应查看 Arch Linux News,确认是否需要人工处理配置或兼容性变化。

卸载软件包

只删除目标包:

sudo pacman -R <PACKAGE>

删除目标包及不再被其他包需要的依赖:

sudo pacman -Rs <PACKAGE>

删除目标包、无用依赖,并且不保留包管理器维护的配置为 .pacsave

sudo pacman -Rns <PACKAGE>

验证包已经删除:

pacman -Q <PACKAGE>

预期输出为找不到该软件包。

pacman 不会删除应用运行后在 ~/.config~/.cache~/.local/share~/.local/state 中创建的用户数据。

不要在不清楚依赖关系时使用:

sudo pacman -Rsc <PACKAGE> sudo pacman -Rdd <PACKAGE>

-Rsc 可能递归删除依赖目标包的其他软件,-Rdd 会跳过依赖检查。

查询文件所属包

查询本地文件由哪个已安装包提供:

pacman -Qo <FILE_PATH>

例如:

pacman -Qo /usr/bin/pacman

输出应包含拥有该文件的包名和版本。

查询尚未安装的软件包中哪个包提供指定文件,需要先同步文件数据库:

sudo pacman -Fy pacman -F <FILE_NAME>

列出软件包文件

列出本地包安装的全部文件:

pacman -Ql <PACKAGE>

列出仓库包包含的文件:

pacman -Fl <PACKAGE>

这些命令适合确认程序入口、桌面文件、systemd 单元和配置文件路径。

检查软件包完整性

检查包记录的文件是否存在:

pacman -Qk <PACKAGE>

执行更完整的文件检查:

pacman -Qkk <PACKAGE>

正常结果应显示文件总数,并且没有缺失文件。配置文件被用户修改时可能显示 altered,需要结合用途判断,不能直接认定为损坏。

查看显式安装包

列出显式安装且当前不作为其他包依赖的软件:

pacman -Qet

只输出包名:

pacman -Qqet

这些命令适合导出重装系统时需要恢复的软件清单。

查看孤儿依赖

列出作为依赖安装、现在不再被其他包需要的软件:

pacman -Qdt

只输出包名:

pacman -Qtdq

孤儿包只是删除候选。编译器、构建工具和命令行程序可能仍被用户直接使用,确认用途后再卸载。

将需要长期保留的包改为显式安装:

sudo pacman -D --asexplicit <PACKAGE>

查看依赖关系

查看软件包依赖树:

pactree <PACKAGE>

查看哪些软件包依赖目标包:

pactree -r <PACKAGE>

pactreepacman-contrib 提供。卸载库、运行时和系统组件前,应先查看反向依赖。

清理软件包缓存

pacman 下载的软件包保存在:

/var/cache/pacman/pkg/

查看缓存占用:

du -sh /var/cache/pacman/pkg

保留每个已安装包最近 3 个版本,删除更旧的缓存:

sudo paccache -r

保留最近 1 个版本:

sudo paccache -rk1

删除所有已经卸载软件的缓存版本:

sudo paccache -ruk0

启用每周自动清理:

sudo systemctl enable --now paccache.timer

验证计时器:

systemctl list-timers paccache.timer

保留旧版本便于降级,不建议直接清空整个 /var/cache/pacman/pkg

AUR

AUR(Arch User Repository)是由 Arch 用户维护的软件包构建脚本仓库。AUR 提供 PKGBUILD 和相关文件,而不是经过官方仓库审核的二进制包。详细说明参见 ArchWiki Arch User Repository

AUR 内容由用户提交,未经过官方仓库同等级别的审核。构建前必须阅读 PKGBUILD.install、补丁和其他附带文件。

AUR 与官方仓库的区别

官方仓库包由 pacman 直接安装:

sudo pacman -S <PACKAGE>

AUR 包通常需要:

  1. 下载 PKGBUILD 和附带文件。
  2. 审核构建过程。
  3. 下载源码或上游二进制文件。
  4. 使用 makepkg 生成 Arch 软件包。
  5. 使用 pacman -U 安装生成的软件包。

使用 paru 可以自动完成部分流程,但不能代替人工审核。

安装构建环境

AUR 默认假设系统已经安装 base-devel

sudo pacman -Syu base-devel git

验证:

pacman -Q base-devel git

makepkg 必须由普通用户运行,不能使用 root 身份直接构建。

搜索和查看 AUR 包

使用 paru 搜索:

paru -Ss <KEYWORD>

查看包信息:

paru -Si <PACKAGE>

重点确认:

  • 包名是否符合预期。
  • 上游地址是否正确。
  • 当前版本和最后更新时间。
  • 包是否被标记为过期。
  • 维护者和用户评论是否有异常说明。

下载并审核 PKGBUILD

创建独立审核目录:

mkdir -p ~/tmp/aur-review cd ~/tmp/aur-review

下载构建文件:

paru -G <PACKAGE>

该命令会在当前目录创建:

./<PACKAGE>/ ├── PKGBUILD ├── .SRCINFO └── .git/

查看构建文件:

less <PACKAGE>/PKGBUILD less <PACKAGE>/.SRCINFO

审核内容包括:

  • source 是否指向上游官方地址。
  • sha256sumssha512sums 等校验和是否合理。
  • prepare()build()package() 执行了什么命令。
  • 是否存在来源不明的下载或执行脚本。
  • 是否修改 sudoers、启动项、用户家目录或系统服务。
  • dependsmakedependsoptdepends 是否合理。

审核完成后清理临时副本:

cd ~ rm -rf -- ~/tmp/aur-review/<PACKAGE>

验证:

test ! -e ~/tmp/aur-review/<PACKAGE> && echo "审核目录已清理"

使用 makepkg 构建

ArchWiki 推荐直接克隆 AUR Git 仓库:

mkdir -p ~/builds cd ~/builds git clone https://aur.archlinux.org/<PACKAGE>.git cd <PACKAGE>

再次审核文件后,安装依赖并构建:

makepkg -s

构建成功后,当前目录会生成类似文件:

<PACKAGE>-<VERSION>-<ARCH>.pkg.tar.zst

查看将要生成的软件包文件名:

makepkg --packagelist

构建并在成功后安装:

makepkg -si

删除构建产生的临时目录:

makepkg -c

-r 会删除构建时安装且不再需要的依赖:

makepkg -sr

这些依赖在下次更新时可能需要重新安装,不应默认每次使用。

使用 pacman 安装本地包

安装 makepkg 生成的软件包:

sudo pacman -U <PACKAGE_FILE>.pkg.tar.zst

验证:

pacman -Q <PACKAGE> pacman -Qkk <PACKAGE>

使用 paru 安装和更新

构建并安装 AUR 包:

paru -S <PACKAGE>

更新官方仓库和 AUR 包:

paru -Syu

只查看 AUR 更新:

paru -Qua

只更新 AUR 包:

paru -Sua

安装前仍应阅读 paru 展示的 PKGBUILD 差异。

查看外来软件包

列出不在当前官方仓库中的已安装包:

pacman -Qm

该列表通常包含 AUR 包和手动安装的本地包,但不代表每个包仍然存在于 AUR。

清理 paru 构建缓存

查看总占用:

du -sh ~/.cache/paru

查看各包占用:

du -sh ~/.cache/paru/clone/* 2>/dev/null | sort -hr

清理单个包的构建缓存:

rm -rf -- ~/.cache/paru/clone/<PACKAGE>

验证:

test ! -e ~/.cache/paru/clone/<PACKAGE> && echo "构建缓存已清理"

该操作不会卸载已经安装的软件,也不会删除应用用户配置。下次更新时,paru 会重新下载构建文件。

Btrfs

Btrfs 是支持写时复制、子卷、快照、校验和与透明压缩的 Linux 文件系统。基础管理命令由 btrfs-progs 提供,详细说明参见 ArchWiki BtrfsBtrfs 官方文档

Btrfs 快照与原数据位于同一文件系统,不是独立备份。磁盘损坏、文件系统损坏或设备丢失可能同时影响原数据和快照。

查看文件系统类型

查看根目录和家目录使用的文件系统:

findmnt / findmnt /home

查看块设备、UUID 和文件系统:

lsblk -f

只有文件系统类型显示为 btrfs 时,才能使用后续 Btrfs 命令。

查看文件系统信息

显示已发现的 Btrfs 文件系统:

sudo btrfs filesystem show

查看指定挂载点的空间分配:

sudo btrfs filesystem usage /

查看设备和数据类型占用:

sudo btrfs device usage /

Btrfs 的数据、元数据和系统块组分别分配,df 的结果不能完整反映内部空间分配。

查看子卷

列出挂载点下的子卷:

sudo btrfs subvolume list /

查看当前挂载子卷的信息:

sudo btrfs subvolume show /

查看默认子卷:

sudo btrfs subvolume get-default /

挂载顶层子卷

Btrfs 顶层子卷的 ID 固定为 5。先从 lsblk -f/etc/fstab 确认文件系统 UUID,再执行:

sudo mkdir -p /mnt/btrfs-top sudo mount -o subvolid=5 UUID=<BTRFS_UUID> /mnt/btrfs-top

验证:

findmnt /mnt/btrfs-top sudo btrfs subvolume list /mnt/btrfs-top

输出应显示顶层中的 @@home 或系统实际使用的子卷名称。

创建子卷

在顶层挂载点创建子卷:

sudo btrfs subvolume create /mnt/btrfs-top/<SUBVOLUME>

验证:

sudo btrfs subvolume show /mnt/btrfs-top/<SUBVOLUME>

删除子卷前必须确认其中数据不再需要:

sudo btrfs subvolume delete /mnt/btrfs-top/<SUBVOLUME>

创建只读快照

为根子卷创建只读快照:

sudo btrfs subvolume snapshot -r \ /mnt/btrfs-top/@ \ /mnt/btrfs-top/@snapshot_$(date +%Y%m%d)

如果 /home 使用独立子卷:

sudo btrfs subvolume snapshot -r \ /mnt/btrfs-top/@home \ /mnt/btrfs-top/@home_snapshot_$(date +%Y%m%d)

-r 表示创建只读快照,降低快照被意外修改的风险。

查看快照

列出名称中包含 snapshot 的子卷:

sudo btrfs subvolume list /mnt/btrfs-top | grep snapshot

查看快照详情:

sudo btrfs subvolume show \ /mnt/btrfs-top/@snapshot_<SNAPSHOT_DATE>

其中 <SNAPSHOT_DATE> 使用 YYYYMMDD。只读快照的输出应包含:

Flags: readonly

从快照恢复文件

恢复单个文件前先比较当前文件和快照文件:

diff -u \ /etc/<RELATIVE_PATH> \ /mnt/btrfs-top/@snapshot_<SNAPSHOT_DATE>/etc/<RELATIVE_PATH>

确认需要恢复后复制:

sudo cp \ /mnt/btrfs-top/@snapshot_<SNAPSHOT_DATE>/etc/<RELATIVE_PATH> \ /etc/<RELATIVE_PATH>

复制后检查权限和所有者:

stat /etc/<RELATIVE_PATH>

应用配置文件还应执行对应语法检查,再重载服务。

从快照创建可写子卷

只读快照不能直接作为需要修改的工作子卷。由快照创建新的可写子卷:

sudo btrfs subvolume snapshot \ /mnt/btrfs-top/@snapshot_<SNAPSHOT_DATE> \ /mnt/btrfs-top/@restored_<SNAPSHOT_DATE>

验证新子卷:

sudo btrfs subvolume show \ /mnt/btrfs-top/@restored_<SNAPSHOT_DATE>

输出不应包含 readonly 标志。

恢复根子卷

根子卷正在使用时不能直接替换。整盘回滚应从 Arch 安装介质或其他救援环境执行。错误操作可能导致系统无法引导或丢失快照之后的数据。

在救援环境中挂载 Btrfs 顶层子卷后,先保留当前根子卷:

sudo mv \ /mnt/btrfs-top/@ \ /mnt/btrfs-top/@broken_$(date +%Y%m%d)

从只读快照创建新的可写根子卷:

sudo btrfs subvolume snapshot \ /mnt/btrfs-top/@snapshot_<SNAPSHOT_DATE> \ /mnt/btrfs-top/@

回滚前必须确认:

  • 快照对应当前根子卷。
  • /home 是否为独立子卷。
  • 引导器和 /etc/fstab 是否依赖特定子卷名称。
  • 快照之后的数据是否需要保留。

创建新根子卷后检查 /etc/fstab 和引导配置,再重启验证。

删除快照

确认不再需要回滚后删除根快照:

sudo btrfs subvolume delete \ /mnt/btrfs-top/@snapshot_<SNAPSHOT_DATE>

删除家目录快照:

sudo btrfs subvolume delete \ /mnt/btrfs-top/@home_snapshot_<SNAPSHOT_DATE>

验证快照已经消失:

sudo btrfs subvolume list /mnt/btrfs-top | grep snapshot

卸载顶层子卷

操作结束后卸载临时挂载:

sudo umount /mnt/btrfs-top sudo rmdir /mnt/btrfs-top

验证:

findmnt /mnt/btrfs-top

没有输出表示临时挂载已经清理。

查看空间使用

查看 Btrfs 文件系统的整体使用情况:

sudo btrfs filesystem usage /

查看块组分配:

sudo btrfs filesystem df /

查看常规文件系统空间:

df -h /

三个命令关注的层次不同。空间异常时应结合查看,不只依赖 df

执行数据校验

启动在线 scrub:

sudo btrfs scrub start /

查看进度和结果:

sudo btrfs scrub status /

scrub 会读取数据和元数据并验证校验和。存在冗余副本时,可以尝试从正确副本修复损坏数据。

谨慎使用 btrfs check

先卸载目标文件系统,再执行只读检查:

sudo umount <MOUNT_POINT> sudo btrfs check --readonly <BLOCK_DEVICE>

<MOUNT_POINT> 是目标文件系统的挂载点,<BLOCK_DEVICE> 是对应块设备。不要对正在使用的根文件系统直接执行该操作,应从 Arch 安装介质或其他救援环境检查。

不要在没有明确恢复方案时使用 btrfs check --repair。该选项可能进一步破坏文件系统,只有在官方文档或有经验的维护人员明确指导下才考虑。

fastfetch

fastfetch 用于读取并显示操作系统、内核、桌面环境、硬件和资源信息。它主要使用 C 编写,并支持 JSONC 配置。详细说明参见 fastfetch 官方仓库

安装 fastfetch

Arch Linux 官方仓库提供 fastfetch

sudo pacman -Syu fastfetch

验证:

fastfetch --version

输出应包含 fastfetch 版本。

查看系统信息

使用默认配置:

fastfetch

不显示 Logo:

fastfetch --logo none

只显示指定模块:

fastfetch -s os:kernel:uptime:packages:shell:display:wm:cpu:gpu:memory:disk

模块使用冒号分隔。

查看帮助

查看全部命令行参数:

fastfetch --help

查看模块帮助:

fastfetch -h <MODULE>

查看模块格式字段:

fastfetch -h <MODULE>-format

例如查看 GPU 格式字段:

fastfetch -h gpu-format

查看可用模块

使用包含全部支持模块的预设:

fastfetch -c all.jsonc

某些模块依赖额外工具、权限或硬件支持,无法检测时会显示错误或空结果。

将指定模块结果输出为 JSON:

fastfetch -s <MODULE1>:<MODULE2> --format json

JSON 输出适合脚本处理或检查 fastfetch 实际检测到的字段。

生成配置文件

生成最小配置:

fastfetch --gen-config

默认保存到:

~/.config/fastfetch/config.jsonc

验证:

ls -l ~/.config/fastfetch/config.jsonc

生成包含全部可选项的配置:

fastfetch --gen-config-full \ ~/.config/fastfetch/config-full.jsonc

完整配置适合查询可用字段,不建议直接作为日常配置使用。

指定显示模块

一个基础 JSONC 配置示例:

{ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", "modules": [ "title", "separator", "os", "host", "kernel", "uptime", "packages", "shell", "display", "wm", "cpu", "gpu", "memory", "disk" ] }

配置文件保存后运行:

fastfetch

fastfetch 会自动读取默认配置文件。

自定义模块输出

只显示 GPU 名称:

{ "modules": [ { "type": "gpu", "format": "{name}" } ] }

对应的临时命令:

fastfetch -s gpu --gpu-format '{name}'

具体格式字段通过以下命令查询:

fastfetch -h gpu-format

使用指定文本或图片文件作为 Logo:

fastfetch -l <LOGO_PATH>

不显示 Logo:

fastfetch -l none

修改内置 ASCII Logo 的颜色:

fastfetch \ --logo-color-1 red \ --logo-color-2 green

图片显示方式取决于终端支持的图像协议。显示异常时先使用 ASCII Logo确认配置本身正常。

指定配置文件

使用指定 JSONC 配置:

fastfetch -c <CONFIG_PATH>

例如:

fastfetch -c ~/.config/fastfetch/config.jsonc

测试配置语法和运行效果后,再将其设置为默认配置。

检查第三方配置

fastfetch 支持 Command 模块,该模块可以执行任意 Shell 命令。复制第三方配置前搜索:

grep -n '"type"[[:space:]]*:[[:space:]]*"command"' <CONFIG_PATH>

发现 Command 模块时,继续检查它将执行的命令。不要直接运行来源不明的 fastfetch 配置。