删除软件包

当需要彻底卸载一个软件包时,可以使用如下命令:

yay -Rns <package-name>

其中参数为:

  • R: 移除(remove)指定的包。
  • n: 不保存(no-save)依赖项。
  • s: 移除未使用的依赖项(cascade removal)。

参数

pacmanyay 的参数很相近,其中参数可以分为两类,第一类是大写的,表示 operation:

  • -S: 安装软件包
  • -R: 删除软件包
  • -U: 安装本地包
  • -Q: 查询已安装的软件包

operation 后是第二类小写参数,为 option ,用于修饰 operation ,可以使用 --help 进行命令的查询,如:

pacman -Q --help

安装特定版本

如果希望安装特定版本的包的话,可以在 ALA 下找到适合的版本,然后使用如下命令安装:

pacman -U https://archive.archlinux.org/packages/path/packagename.pkg.tar.zst

其中 zst 是一种被叫做 Zstandard 的特殊压缩包。里面是二进制文件。这个软件包是通过 PKGBUILD 文件而来的。

但我们有了一个 PKGBUILD 文件,就可以通过 makepkg 命令构建出 .pkg.tar.zst 文件。然后再通过 pacman -U 命令安装。

在传统的安装流程中, pacman 同样会缓存二进制文件,它会被放在 /var/cache/pacman/pkg/ 下。

打扫系统

pacman 的 query 功能是我们打扫系统的基础,当我们直接使用 pacman -Q ,就会列出所有的软件包,和他们的版本,如下所示:

aarch64-linux-musl 1.2.4-1
acpi 1.7-4
acpica 20240927-1
acpid 2.0.34-2
...

如果我们使用 -q 参数,那么就只会出现软件包的名称,而不会出现版本号:

python-epc
python-ordered-set
python-prettytable
python-pymupdf

这种方式的好处在于它可以作为 pacman 安装或者删除软件包的输入。

此外还有如下重要参数:

  • -t: 展示所有的“孤儿包”,即现在不作为其他包的依赖的包。
  • -e: 展示所有“主动”安装的包。
  • -d: 展示所有“被动”安装的包,即作为其他的包的依赖被安装的包。需要注意的是,这里强调的是“安装时”的被依赖了,现在可能是孤儿。

但是并不是所有的孤儿包都可以被安全地删除,比如像 EAF 这样的程序,它作为 emacs 的插件,隐式许多 python 包,这种依赖关系并不会被 pacman 监视到。

MakePkg

makepkg 用于从 源码 构建软件。更具体的说, makepkg 负责由脚本文件 PKGBUILD 构建出二进制文件 .pkg.tar.zst

我们使用 pacman 的过程,本质是下载 .pkg.tar.zst 并安装的的过程。但是软件源,本质是监控 PKGBUILD 的更新,而不是监控二进制文件的过程。

因此如果我们希望通过修改 PKGBUILD 来自定义构建过程,那么虽然我们用 pacman 可以查看它们,但是我们并不能更新它们,因为它们不来自软件源,它们的 PKGBUILD 是我们自己在维护,因此没法更新。

我们修改完 PKGBUILD 后,可以使用如下命令来安装包:

makepkg -si

其中 -s 表示下载相关依赖, -i 表示安装。