在基于 Arch 的 Linux 发行版中开始使用 Pacman 命令

简介:本初学者指南向您展示了您可以在 Linux 中使用 pacman 命令做什么,如何使用它们来查找新软件包、安装和升级新软件包以及清理系统。

吃豆人 包管理器是两者的主要区别之一 Arch Linux 和其他主要发行版,如 Red Hat 和 Ubuntu/Debian。 它结合了简单的二进制包格式和易于使用的 构建系统. pacman 的目的是轻松管理包,无论是从 官方存储库 或用户自己的构建。

如果您曾经使用过基于 Ubuntu 或 Debian 的发行版,您可能使用过 apt-get 或 apt 命令。 Pacman 是 Arch Linux 中的等价物。 如果你刚刚安装了 Arch Linux,安装 Arch Linux 后要做的头几件事之一就是学习使用 pacman 命令。

在这个初学者指南中,我将解释 pacmand 命令的一些基本用法,您应该知道这些用于管理基于 Arch 的系统。

Arch Linux 用户应该知道的基本 pacman 命令

与其他包管理器一样,pacman 可以将包列表与软件存储库同步,以允许用户通过解决所有必需的依赖关系,通过简单的命令下载和安装包。

使用 pacman 安装软件包

您可以使用 pacman 命令以这种方式安装单个包或多个包:

pacman -S _package_name1_ _package_name2_ ...

-S 代表同步。 这意味着pacman首先同步

pacman 数据库根据安装原因将已安装的软件包分为两组:

  • 显式安装: 由通用 pacman -S 或 -U 命令安装的软件包
  • 依赖关系:隐式安装的软件包,因为 必需的 由另一个明确安装的软件包。

删除已安装的软件包

要删除单个包,保留其所有依赖项安装:

pacman -R package_name_

要删除任何其他已安装软件包不需要的软件包及其依赖项:

pacman -Rs _package_name_

删除不再需要的依赖项。 例如,删除了需要依赖项的包。

pacman -Qdtq | pacman -Rs -

升级包

Pacman 提供了一种更新 Arch Linux 的简单方法。 您只需一个命令即可更新所有已安装的软件包。 这可能需要一段时间,具体取决于系统的最新程度。

以下命令同步存储库数据库并更新系统的软件包,不包括不在配置存储库中的“本地”软件包:

pacman -Syu
  • S代表同步
  • y 用于刷新(本地缓存)
  • 你是系统更新

基本上是说同步到中央存储库(主包数据库),刷新主包数据库的本地副本,然后执行系统更新(通过更新所有具有较新版本的包)。

注意力!

如果您在升级前是 Arch Linux 用户,建议您访问 Arch Linux 主页 查看最新消息以了解异常更新。 如果需要人工干预,将发布适当的新闻帖子。 或者,您可以订阅 RSS订阅 或者 arch-announce 邮件列表.

还要注意查看适当的 论坛 对于任何报告的问题,在升级基础软件(例如内核、xorg、systemd 或 glibc)之前。

不支持部分升级 在诸如 Arch 和 Manjaro 之类的滚动发行版中。 这意味着当新的库版本被推送到存储库时,存储库中的所有包都需要针对库进行重建。 例如,如果两个包依赖于同一个库,仅升级一个包可能会破坏另一个依赖于旧版本库的包。

使用 pacman 搜索软件包

Pacman 使用 -Q 标志查询本地包数据库,使用 -S 标志查询同步数据库,使用 -F 标志查询文件数据库。

Pacman 可以在数据库中搜索包,包括包的名称和描述:

pacman -Ss _string1_ _string2_ ...

要搜索已安装的软件包:

pacman -Qs _string1_ _string2_ ...

要在远程包中搜索包文件名:

pacman -F _string1_ _string2_ ...

查看包的依赖树:

pactree _package_naenter code hereme_

清理包缓存

Pacman 将其下载的软件包存储在 /var/cache/pacman/pkg/ 中,并且不会自动删除旧的或卸载的版本。 这有一些优点:

  1. 它允许 降级 一个包,而不需要通过其他来源检索以前的版本。
  2. 已卸载的软件包可以轻松地直接从缓存文件夹重新安装。

但是,需要定期清理缓存以防止文件夹变大。

包缓存 (8) 脚本,在 pacman-contrib 包,删除所有已安装和卸载包的缓存版本,除了最近的 3 个,默认情况下:

paccache -r

要删除当前未安装的所有缓存包和未使用的同步数据库,请执行:

pacman -Sc

要从缓存中删除所有文件,请使用两次 clean 开关,这是最激进的方法,并且不会在缓存文件夹中留下任何内容:

pacman -Scc

安装本地或第三方包

安装不是来自远程存储库的“本地”包:

pacman -U _/path/to/package/package_name-version.pkg.tar.xz_

安装一个“远程”包,不包含在官方存储库中:

pacman -U https://www.example.com/repo/example.pkg.tar.xz

奖励:使用 pacman 解决常见错误

以下是您在使用 pacman 管理软件包时可能遇到的一些常见错误。

提交事务失败(文件冲突)

如果您看到以下错误:

error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.

发生这种情况是因为 pacman 检测到文件冲突并且不会为您覆盖文件。

解决这个问题的一个安全方法是首先检查另一个包是否拥有该文件(pacman -Qo /path/to/file)。 如果该文件由另一个包拥有,请提交错误报告。 如果该文件不属于另一个包,请重命名“存在于文件系统中”的文件并重新发出更新命令。 如果一切顺利,则该文件可能会被删除。

您可以显式运行,而不是手动重命名并稍后删除属于相关包的所有文件 pacman -S –覆盖glob包 强制 pacman 覆盖匹配 glob 的文件。

未能提交事务(无效或损坏的包)

在 /var/cache/pacman/pkg/ 中查找 .part 文件(部分下载的软件包)并将其删除。 它通常是由在 pacman.conf 中使用自定义 XferCommand 引起的。

初始化事务失败(无法锁定数据库)

当 pacman 即将改变包数据库时,例如安装一个包,它会在 /var/lib/pacman/db.lck 创建一个锁文件。 这可以防止 pacman 的另一个实例同时尝试更改包数据库。

如果 pacman 在更改数据库时被中断,这个过时的锁文件可以保留。 如果您确定没有 pacman 实例正在运行,则删除锁定文件。

检查进程是否持有锁定文件:

lsof /var/lib/pacman/db.lck

如果上述命令没有返回任何内容,您可以删除锁定文件:

rm /var/lib/pacman/db.lck

如果通过 lsof 命令输出找到持有锁文件的进程的 PID,请先将其杀死,然后删除锁文件。

我希望你喜欢我在解释基本 pacman 命令时所做的努力。 请在下方留下您的评论,不要忘记订阅我们的社交媒体。 注意安全!