pkgcli: PackageKit 的命令行界面
摘要
介绍了 pkgcli,一个全新的 PackageKit 命令行客户端,提供人性化命令、彩色输出、JSON 脚本模式以及更好的国际化支持,取代了已有十年历史的 pkcon。
<p><a href="https://lobste.rs/s/dq7toq/pkgcli_command_line_interface_for">评论</a></p>
查看缓存全文
缓存时间: 2026/06/15 00:49
# PackageKit 更友好的命令行界面 – Ximions 博客
来源:https://blog.tenstral.net/2026/06/introducing-pkgcli-a-nicer-command-line-interface-for-packagekit.html
近二十年来,PackageKit(https://github.com/PackageKit/PackageKit)包管理抽象层一直使用 `pkcon` 作为其命令行客户端。`pkcon` 能完成任务,但它更像是一个用于 PackageKit 守护进程的“测试”前端,而非为日常使用设计的工具。重点一直放在 GUI 工具、自动系统更新、GUI 应用管理器等其他前端上。它的命令名称几乎与 D-Bus API 一一对应(`get-details`、`get-updates`、`get-depends`),输出非常朴素,也没有用于脚本的机器可读模式。最重要的是,它近十年来没有任何开发,因此 `pkcon` 一直停留在那个时代的原始状态。
由于 PackageKit 将发生大量变化,而在 2025/2026 年,从命令行测试守护进程并与它配合工作已经不太愉快,我决定在去年作为 Sovereign Tech Agency(https://www.sovereign.tech/)的研究员,将这一工具现代化。`pkgcli` 是 PackageKit 新的命令行客户端。它从头构建,既适合交互式使用,也易于脚本驱动。
## 为什么要开发新工具?
当然,我本可以扩展 `pkcon` 而非引入新工具。但问题在于,`pkcon` 实用程序存在已久,其命令行 API 已经固化严重,与其修改它并可能破坏大量依赖其特性的脚本,不如引入新工具。对于在其脚本和工作流程中需要 `pkcon` 的用户,仍可选择性地编译它。
`pkgcli` 的目标及现有功能如下:
- **人性化的命令名称。** 动词描述任务的方式,而非 1:1 镜像 D-Bus API:`show`、`search`、`list-updates`、`what-provides`,而非 `get-details` 等。
- **默认可读、彩色输出**(同时尊重 `NO_COLOR`(https://no-color.org/)并优雅降级)。
- **真正的脚本模式。** 全局 `--json` 标志在可能时输出 JSONL(https://jsonlines.org/)而非完全人类可读输出,便于脚本使用。
- **合理的默认值。** 更改了一些默认值,例如元数据缓存过期时间,或默认启用未使用依赖的自动清理。这与其他工具和前端当前的默认值更一致。我们还以略有不同、更易读的方式打印包信息。
- **更好地处理国际化文本。** 文本现在应在终端窗口中正确对齐,非英语语言环境(尤其是中文/日文)下不应再出现完全混乱的文本输出。
## 为什么不叫 `pkgctl`?
最初,这个工具名为 `pkgctl`,以匹配其他常见的跨发行版工具名称。但该名称已被一个 Arch 特定的发行版开发工具(https://man.archlinux.org/man/pkgctl.1)占用。当这个问题被提出后,我们决定在下一个版本中将工具重命名为 `pkgcli`,以避免在 Arch Linux 上产生名称冲突。
## 示例!
以下是一些使用新工具的示例(其中一些包含了 `pkgcli` 打印的摘要输出)。
搜索名称或描述中包含字符串“editor”的内容,然后查看其中一个结果的详细信息:
```
$ pkgcli search editor
Querying [████████████████████████████████████████] 100%
▣ ace-of-penguins 1.5~rc2-7.amd64 [debian-testing-main]
▣ acorn-fdisk 3.0.6-14.amd64 [debian-testing-main]
▣ ardour 1:9.2.0+ds-1.amd64 [debian-testing-main]
✔ audacity 3.7.7+dfsg-1.amd64 [manual:debian-testing-main]
✔ audacity-data 3.7.7+dfsg-1.all [auto:debian-testing-main]
▣ augeas-tools 1.14.1-1.1.amd64 [debian-testing-main]
▣ emacs 1:30.2+1-3.all [debian-testing-main]
▣ gedit 48.1-9+b1.amd64 [debian-testing-main]
▣ gedit-common 48.1-9.all [debian-testing-main]
▣ gedit-dev 48.1-9+b1.amd64 [debian-testing-main]
[...]
$ pkgcli show nano
Package: nano
Version: 9.0-1
Summary: small, friendly text editor inspired by Pico
Description: GNU nano is an easy-to-use text editor originally designed as
a replacement for Pico, the ncurses-based editor from the non-free mailer
package Pine.
[...]
URL: https://www.nano-editor.org/
Group: publishing
Installed Size: 2.9 MB
Download Size: 646.0 KB
```
仅在包名称中搜索(而非描述):
```
$ pkgcli search name python3
```
检查更新。`refresh` 更新元数据,然后 `list-updates` 报告可用更新:
```
$ pkgcli refresh && pkgcli list-updates
Loading cache [████████████████████████████████████████] 100%
▲ cme 1.048-1.all [debian-testing-main]
▲ gir1.2-gdm-1.0 50.1-2.amd64 [debian-testing-main]
▲ imagemagick 8:7.1.2.24+dfsg1-1.amd64 [debian-testing-main]
▲ imagemagick-7-common 8:7.1.2.24+dfsg1-1.all [debian-testing-main]
▲ imagemagick-7.q16 8:7.1.2.24+dfsg1-1.amd64 [debian-testing-main]
▲ libdlrestrictions1 0.22.0.amd64 [debian-testing-main]
▲ libfftw3-bin 3.3.11-1.amd64 [debian-testing-main]
▲ libfftw3-dev 3.3.11-1.amd64 [debian-testing-main]
```
探索包之间的关系:
```
$ pkgcli list-depends inkscape # 列出 inkscape 依赖的包
$ pkgcli list-requiring libappstream5 # 列出需要 libappstream5 的包
```
查找提供某功能的包,这里是 AV1 GStreamer 解码器:
```
$ pkgcli what-provides "gstreamer1(decoder-video/x-av1)"
✔ gstreamer1.0-plugins-bad 1.28.3-1.amd64 [auto:debian-testing-main]
```
大多数命令也可以有 JSON 输出!在任何查询上附加 `--json`,并将结果直接输入 `jq`(https://jqlang.github.io/jq/)。每行是一个独立的 JSON 对象:
```
$ pkgcli --json list-updates | jq -r '.name'
cme
gir1.2-gdm-1.0
imagemagick
imagemagick-7-common
imagemagick-7.q16
libdlrestrictions1
libfftw3-bin
libfftw3-dev
libfftw3-double3
```
## 试试看
从 PackageKit 1.3.4 开始,`pkgcli` 默认与 PackageKit 的其他部分一起构建。如果你的发行版提供了足够新的 PackageKit,它应该已经在你的 `PATH` 中。你可以阅读其手册页 `man pkgcli` 了解更多信息。非常欢迎反馈、错误报告和补丁(https://github.com/PackageKit/PackageKit/pulls)。
相似文章
Kane CLI
Kane CLI 让开发者可以直接从终端运行自然语言浏览器和移动应用测试。
@github: Copilot CLI 现在有了新的终端用户界面。可以直接在终端中访问你的 issues、pull requests 和 gists。
GitHub 的 Copilot CLI 现在有了新的终端用户界面,用户可以直接从终端访问 issues、pull requests 和 gists。
HKUDS/CLI-Anything
CLI-Anything 是一个开源框架,能够自动为任何软件生成命令行界面,使其对 AI 智能体可访问。它包含一个社区构建的 CLI 中心,并支持多种 AI 智能体平台。
@huang_chao4969: 我们刚刚发布了CLI-Anything技术报告 CLI-Hub达到新里程碑:约100个CLI · 35个类别 · 20万+代理…
CLI-Anything是一个面向代理的CLI平台,它将应用程序转化为供AI代理使用的命令行工具集。技术报告详细介绍了CLI-Hub,这是一个拥有近100个CLI、涵盖35个类别以及超过20万次代理驱动CLI调用的注册中心。
@ArizePhoenix: PXI(Phoenix Intelligence)现可在终端中运行!您现在无需离开终端即可使用PXI。这与…
PXI(Phoenix Intelligence),这款AI代理此前仅可在浏览器中使用,现可通过CLI包@arizeai/phoenix-cli在终端中作为交互式聊天使用。