新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/15 1:31:56来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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