新闻详情

新闻详情

首页 / 资讯中心 / 详情

jc 解析 `dpkg -l` 输出:将 Debian 系软件包列表转换为 JSON 的完整指南

发布时间:2026/9/25 6:48:54来源:尧图网络
jc 解析 `dpkg -l` 输出:将 Debian 系软件包列表转换为 JSON 的完整指南
开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载dpkg -l是 Debian/Ubuntu 系系统上查询软件包安装状态的经典命令但其文本表格输出难以直接用于脚本判断与自动化处理。jc 的dpkg_l解析器可以将dpkg -l的输出转换为结构化的 JSON/YAML/字典并附带desired、status、error等派生字段让你可以像处理普通数据一样处理软件包列表。读完本文你将掌握dpkg_l的 CLI 用法、模块化调用方式、输出 Schema 与状态码映射原理并能用 jq 完成“统计已安装软件包”“筛选残留配置文件”等实战任务。背景为什么需要解析dpkg -ldpkg -l的输出是一张固定列宽的对齐表格每行包含两字符状态码、软件包名、版本号、架构与描述。这种格式适合人眼阅读却不适合脚本字段按空格切分时描述列可能含空格版本号可能被截断而且状态码如ii、rc、uWR的含义需要额外解释。jc 的dpkg_l解析器jc/parsers/dpkg_l.py专门解决这一问题它把表格规整为字典列表并把状态码翻译成可读的desired/status/error字段。避免字段截断设置 COLUMNS 环境变量dpkg -l的输出宽度受终端列数影响默认宽度下版本号和描述会被截断描述后会出现...。文档明确建议在调用前将COLUMNS设为一个较大的值$ COLUMNS500 dpkg -l | jc --dpkg-lCOLUMNS500会告知 dpkg 按 500 列宽度排版从而避免字段被截断。仓库测试用例中专门包含dpkg-l-columns500.out与dpkg-l-columns500.json两个 fixture见 tests/test_dpkg_l.py验证了宽列输出下的解析正确性。在管道场景中该写法只影响本次命令不会污染当前 shell。基本用法CLI 方式管道输入输出 JSON$ dpkg -l | jc --dpkg-l或让 jc 直接调用命令借助magic_commands自动关联解析器$ jc dpkg -l第二种写法之所以可行是因为解析器元数据中声明了magic_commands [dpkg -l]jc/parsers/dpkg_l.pyjc CLI 会据此把命令与解析器自动匹配相关逻辑位于 jc/cli.py。注意该解析器仅兼容 Linuxcompatible [linux]。模块方式在 Python 中通过jc.parse()调用import jc result jc.parse(dpkg_l, dpkg_command_output)jc.parse()的第一个参数是解析器名称dpkg_l第二个参数为dpkg -l的原始文本输出返回值为字典列表。输出 Schema 与字段含义处理后的输出遵循如下结构[ { codes: ii, name: accountsservice, version: 0.6.45-1ubuntu1.3, architecture: amd64, description: query and manipulate user account information, desired: install, status: installed, error: reinstall required } ]各字段含义字段类型说明codesstring原始两字符或三字符状态码原样保留namestring软件包名versionstring软件包版本号architecturestring软件包架构如amd64、alldescriptionstring软件包描述可能带...截断标记desiredstring期望状态仅非 raw 模式unknown/install/remove/purge/holdstatusstring当前状态仅非 raw 模式not installed/installed/config-files/unpacked/failed config/half installed/trigger await/trigger pendingerrorstring错误状态仅非 raw 模式且存在时reinstall requireddesired、status、error三个字段是 jc 从状态码中派生出来的映射逻辑见下文“状态码解码原理”。实战示例完整示例处理模式$ dpkg -l | jc --dpkg-l -p [ { codes: ii, name: accountsservice, version: 0.6.45-1ubuntu1.3, architecture: amd64, description: query and manipulate user account information, desired: install, status: installed }, { codes: rc, name: acl, version: 2.2.52-3build1, architecture: amd64, description: Access control list utilities, desired: remove, status: config-files }, { codes: uWR, name: acpi, version: 1.7-1.1, architecture: amd64, description: displays information on ACPI devices, desired: unknown, status: trigger await, error: reinstall required }, { codes: rh, name: acpid, version: 1:2.0.28-1ubuntu1, architecture: amd64, description: Advanced Configuration and Power Interface..., desired: remove, status: half installed }, { codes: pn, name: adduser, version: 3.116ubuntu1, architecture: all, description: add and remove users and groups, desired: purge, status: not installed } ]原始模式示例-r加-rraw只做表格结构化不做状态码翻译因此输出中只有codes而没有desired/status/error$ dpkg -l | jc --dpkg-l -p -r [ { codes: ii, name: accountsservice, version: 0.6.45-1ubuntu1.3, architecture: amd64, description: query and manipulate user account information }, { codes: rc, name: acl, version: 2.2.52-3build1, architecture: amd64, description: Access control list utilities } ]CLI 中-ppretty控制输出缩进美化-rraw控制是否跳过状态码派生选项解析见 jc/cli.py。解析原理从表格到字典dpkg_l.parse()的核心流程jc/parsers/dpkg_l.py可分为三步定位表头并清洗逐行扫描输入找到包含Architecture的表头行后开始记录数据将表头DesiredUnknown/Install/Remove/Purge/Hold | StatusNot/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?中的||/替换为列名codes对应原始状态码列并整体转为小写跳过这类分隔线同时过滤空行。表格结构化清洗后的行交给通用工具jc.parsers.universal.simple_table_parse()jc/parsers/universal.py按空白切分。该工具以表头作为键、按列拆分数据行且描述列允许含空格切分时保留剩余部分最终生成原始字典列表raw_output。状态码派生非 raw 模式下调用_process()完成字段翻译见下一节。parse(data, rawFalse, quietFalse)的签名中quiet用于抑制兼容性警告解析器还会通过jc.utils做输入类型校验非字符串输入会报错与数据存在性检查空输入时直接返回[]测试test_dpkg_l_nodata验证了这一行为。状态码解码原理desired / status / error 的映射Debian 软件包状态码的第一位表示期望状态Desired第二位表示实际状态Status可能出现的第三位是错误标志Err。_process()中的映射表如下码desired 值码status 值uunknownnnot installediinstalliinstalledrremovecconfig-filesppurgeuunpackedhholdffailed confighhalf installedwtrigger awaitttrigger pending第三位错误标志仅有一个r→reinstall required。实现时_process()对每条记录执行desired, status, *err list(entry[codes].lower())分别查表得到desired、status若存在第三位且命中错误映射则写入error。以示例中的uWR为例小写后为uwr映射为desiredunknown、statustrigger await、errorreinstall requiredrh则映射为desiredremove、statushalf installed。这也是示例中codes列与desired/status/error字段一一对应的来源。状态码解读速查表dpkg -l输出中的常见状态组合对应到 jc 派生字段codesdesiredstatus典型含义iiinstallinstalled已安装且运行正常rcremoveconfig-files已删除但残留配置文件pnpurgenot installed已彻底清除rhremovehalf installed安装过程中断处于半安装状态uWRunknowntrigger await状态未知、等待触发器且需要重装iUinstallunpacked已解包但未完成配置这一速查表可以直接与 jq 组合使用。例如统计系统中已安装的软件包数量$ dpkg -l | jc --dpkg-l | jq [.[] | select(.status installed)] | length筛选出残留配置文件、值得清理的软件包$ dpkg -l | jc --dpkg-l | jq .[] | select(.status config-files) | .name查找某个软件包是否已安装$ dpkg -l | jc --dpkg-l | jq .[] | select(.name openssh-server) | {version, status}解析器的元数据与测试保障解析器通过info类暴露元数据jc/parsers/dpkg_l.py版本1.3作者 Kelly Brazil兼容平台linux关联命令dpkg -lmagic_commands标签command测试方面tests/test_dpkg_l.py 覆盖了三条路径空输入返回[]常规 Ubuntu 18.04 输出解析dpkg-l.out→dpkg-l.jsonfixture 位于 tests/fixtures/ubuntu-18.04COLUMNS500宽列输出解析dpkg-l-columns500.out→dpkg-l-columns500.json多字符状态码含uWR第三位错误码解析dpkg-l-codes.out→dpkg-l-codes.json。其中dpkg-l-codes.json中的linux-image-*记录展示了rc状态在真实系统中的典型场景旧内核包被移除后仅残留config-files。这些用例确保解析器在字段截断、状态码带错误标志等边界情况下输出稳定。总结jc --dpkg-l把dpkg -l的文本表格变成结构化 JSON核心价值有三点一是通过COLUMNS500规避字段截断二是保留原始codes的同时派生出desired/status/error可读字段三是配合 jq 可快速完成软件包统计、残留包清理筛查等自动化任务。若你只需表格结构化、不关心状态码翻译用-r原始模式即可。更多解析器与通用用法可参阅 docs/parsers/dpkg_l.md 与 docs/readme.md。赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐jc 解析 dmidecode将 Linux 硬件信息 DMI 输出转换为 JSON 的完整指南jc 解析 dmidecode将 Linux 硬件信息 DMI 输出转换为 JSON 的完整指南 导读 dmidecode 是 Linux 系统上读取 SMB开发工具jc nmcli 解析器将 NetworkManager nmcli 输出转换为 JSON/YAML/字典的完整指南jc nmcli 解析器将 NetworkManager nmcli 输出转换为 JSON/YAML/字典的完整指南 在 Linux 网络自动化中 nmcl开发工具jc 解析器实战将 debconf-show 包配置输出转换为 JSONjc 解析器实战将 debconf show 包配置输出转换为 JSON 本指南围绕 jc 项目的 debconf show 解析器展开讲解如何把 Debi开发工具上一篇抖音批量下载工具上手指南3步跑通去水印与增量下载下一篇XFlow 开源项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenCode+Harness智能体架构:实现数据分析全流程自动化 2026/9/25 9:10:40

OpenCode+Harness智能体架构:实现数据分析全流程自动化

最近接了个数据分析的活,数据量不大但特别杂,客户要求第二天早上就要出报告。要是按老流程,先手工清理Excel,再用Python写脚本画图,怎么也得折腾一天。这次我换了个思路,直接用OpenCode搭了个智能体&#x…

阅读更多 →
Atlas 300V 24G跑通YOLO全流程:昇腾推理卡部署实战 2026/9/25 9:10:40

Atlas 300V 24G跑通YOLO全流程:昇腾推理卡部署实战

前阵子要上一个视频检测项目,领导让我评估推理卡。预算卡得死,买不起数据中心级的A系列显卡,转了一圈发现有人在讨论Atlas 300V 24G。说实话,一开始我也有同样的疑问——这玩意儿到底算不算“运算加速卡”?它跑YOLO到底…

阅读更多 →
Atlas 300V 24G 部署 YOLO:从模型转换到推理调优的完整实践 2026/9/25 9:10:33

Atlas 300V 24G 部署 YOLO:从模型转换到推理调优的完整实践

做 AI 落地有一段时间的朋友,应该对 Atlas 这个名字不陌生。它不是某个单一型号,而是昇腾计算产品线下的统一代号,覆盖从数据中心训练卡、边缘推理卡到 SoC 模组一整条产品系列。最近很多做视觉检测的同学在群里问“atlas 部署 yolo 需要改多…

阅读更多 →
Java+SSM+Flask高校就业管理系统设计与实现 2026/9/25 9:10:20

Java+SSM+Flask高校就业管理系统设计与实现

又是一年毕业季,高校就业管理系统的需求量又上来了。不管是做课程设计还是毕业设计,这套“基于JavaSSMFlask的高校就业管理系统”都算是一个比较经典的题目。它既不是纯Java的SSM项目,也不是纯Python的Flask项目,而是把两者结合起…

阅读更多 →
open-code-review实战:从审查规范到团队协作的完整指南 2026/9/25 9:10:20

open-code-review实战:从审查规范到团队协作的完整指南

提到 code review,很多人第一反应就是"走个过场":代码写完丢给同事看一眼,回一句 LGTM,合入完事。我刚工作的前两年也是这么干的,直到一次线上事故把锅甩到某个 review 通过的提交上,才意识到这玩…

阅读更多 →
MariaDB 10.5二进制包部署指南:从解压到升级的完整实践 2026/9/25 9:10:13

MariaDB 10.5二进制包部署指南:从解压到升级的完整实践

简介:本资源为MariaDB 10.5.11在Linux x86_64平台上的完整安装包,面向需要在Linux服务器上部署开源关系型数据库的运维人员、后端开发者及数据库学习者。MariaDB由MySQL创始人Michael Widenius主导开发,保持开源与高度MySQL兼容,适…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉