首页/新闻资讯/正文详情

jc 解析 /etc/passwd:将 Linux/macOS 用户账户数据库转为 JSON 的完整指南

发布时间:2026/9/26 10:14:41 来源:云帆数科 栏目:资讯中心
jc 解析 /etc/passwd:将 Linux/macOS 用户账户数据库转为 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点击查看免费下载/etc/passwd是 Linux、macOS 等类 Unix 系统上最基础的账户信息文件但它的冒号分隔文本格式并不适合脚本与自动化工具直接消费。本文围绕 jc 项目中专为该文件设计的解析器jc.parsers.passwd见 jc/parsers/passwd.py 与其文档 docs/parsers/passwd.md讲解如何通过 CLI 与 Python 模块两种方式把/etc/passwd的输出转换成结构化的 JSON / 字典列表并深入解析其源码实现、Schema 与边界行为。读完本文你将能在 Shell 管道中直接jq查询用户信息也能在自己的 Python 脚本中复用该解析逻辑。一、解析器定位为什么需要把 /etc/passwd 转成 JSON/etc/passwd的每一行记录一个账户字段之间以冒号:分隔例如 CentOS 7.7 上的一行来自测试夹具 tests/fixtures/centos-7.7/passwd.outroot:x:0:0:root:/root:/bin/bash逐字段拆分后含义如下字段含义示例值username登录用户名rootpassword密码占位真实哈希存于/etc/shadow通常为x或*xuid用户 ID整数0gid主组 ID整数0comment账户备注 / GECOS 信息可能为空roothome家目录路径/rootshell登录 Shell/bin/bash该文件在不同发行版/系统上的风格差异很大CentOS 以x占位密码、部分行 comment 为空如joeuser:x:1000:1000:joeuser:/home/joeuser:/bin/bash与postfix:x:89:89::/var/spool/postfix:/sbin/nologinmacOS如 tests/fixtures/osx-10.14.6/passwd.out则以*占位、注释带有空格如System Administrator并存在-2这类负 UID。jc 的 passwd 解析器就是要统一处理这些差异输出一致的 JSON 结构。二、CLI 用法一行命令把 /etc/passwd 变成 JSON2.1 基本用法与 jc 的其他解析器一致passwd 解析器通过管道读取输入$ cat /etc/passwd | jc --passwd2.2 美化输出-p添加-ppretty选项可以获得带缩进的 JSON便于阅读$ cat /etc/passwd | jc --passwd -p [ { username: nobody, password: *, uid: -2, gid: -2, comment: Unprivileged User, home: /var/empty, shell: /usr/bin/false }, { username: root, password: *, uid: 0, gid: 0, comment: System Administrator, home: /var/root, shell: /bin/sh }, ... ]这是文档 docs/parsers/passwd.md 中给出的真实输出形态。注意 macOS 上的nobody账户 uid/gid 为-2表明该解析器不仅限于 Linux也覆盖 darwin 平台。2.3 原始模式-r保留字符串类型默认处理模式下uid与gid会被转换为整数而-rraw模式返回未经转换的原始字符串$ cat /etc/passwd | jc --passwd -p -r [ { username: nobody, password: *, uid: -2, gid: -2, comment: Unprivileged User, home: /var/empty, shell: /usr/bin/false }, ... ]对比可见默认模式输出uid: -2raw 模式输出uid: -2。-p与-r可以组合使用-r只影响类型转换不影响格式化。2.4 与 jq 联动直接查询用户转换后即可接入jq做条件查询、字段投影等操作例如列出所有可登录用户Shell 不以nologin/false结尾$ cat /etc/passwd | jc --passwd | jq -r .[] | select(.shell | contains(nologin) | not) | \(.username):\(.uid):\(.home)三、Python 模块用法在脚本中调用 parse()在 Python 中通过 jc 的统一入口jc.parse()调用该解析器传入/etc/passwd的文本内容即可import jc with open(/etc/passwd, r, encodingutf-8) as f: passwd_file_output f.read() result jc.parse(passwd, passwd_file_output) # result 为 List[Dict]例如 result[0][username]返回值为字典列表符合下文 Schema。四、Schema输出数据结构parse()与 CLI 的输出均为 JSON 数组每个元素对应/etc/passwd中的一行键名与类型如下节选自 docs/parsers/passwd.md[ { username: string, password: string, uid: integer, gid: integer, comment: string, home: string, shell: string } ]要点处理模式下uid、gid为integerraw 模式下为string其余五个字段在两种模式下均为 stringcomment 可为空字符串如 CentOS 上的postfix行解析结果为comment: 参见夹具 tests/fixtures/centos-7.7/passwd.json。五、解析器信息与兼容性jc/parsers/passwd.py顶部的info类集中声明了解析器元数据属性值说明version1.4解析器版本description/etc/passwd file parser解析器描述author / author_emailKelly Brazil / kellyjonbrazilgmail.com作者信息compatible[linux, darwin, aix, freebsd]兼容平台tags[file]解析器标签文件类型解析器也就是说该解析器兼容linux、darwinmacOS、aix、freebsd四个平台这与测试夹具覆盖的 centos-7.7、ubuntu-18.04、osx-10.14.6 等系统相对应。jc.parse(passwd, ...)会通过jc.utils.compatibility()jc/utils.py校验当前运行平台若平台不在compatible列表中且未指定quietTrue会向 STDERR 输出警告提示该平台输出不受支持。六、源码级实现剖析解析流程与边界处理parse(data, rawFalse, quietFalse)的实现位于 jc/parsers/passwd.py核心流程如下6.1 前置校验jc.utils.compatibility(__name__, info.compatible, quiet) jc.utils.input_type_check(data)compatibility()按上文所述输出平台兼容性警告quietTrue时静默input_type_check()要求data必须是str否则抛出TypeError参见 jc/utils.py。6.2 清理与逐行拆分cleandata list(filter(None, data.splitlines())) if jc.utils.has_data(data): for entry in cleandata: if entry.startswith(#): continue fields entry.split(:)三个值得注意的边界处理空行剔除filter(None, data.splitlines())去掉所有空白行注释跳过以#开头的行被直接continue跳过——macOS 的/etc/passwd头部带有大段#注释见 tests/fixtures/osx-10.14.6/passwd.out 前 10 行这一处理保证注释不会污染输出空输入保护has_data()检查输入是否含非空白字符空输入时直接返回空列表[]。6.3 字段映射按位置拆分后七列分别映射到固定键名output_line[username] fields[0] output_line[password] fields[1] output_line[uid] fields[2] output_line[gid] fields[3] output_line[comment] fields[4] output_line[home] fields[5] output_line[shell] fields[6]6.4 类型转换_processint_list {uid, gid} for entry in proc_data: for key in entry: if key in int_list: entry[key] jc.utils.convert_to_int(entry[key])处理模式下仅uid、gid两个键参与整数转换。jc.utils.convert_to_int()jc/utils.py会先剥离字符串中的非数字字符保留-与.因此 macOS 的-2能正确转为整数-2。若转换失败值无法解析为数字返回None。6.5 raw 与处理模式的分流if raw: return raw_output else: return _process(raw_output)rawTrue直接返回字符串版本否则经过_process()类型转换后返回。这与 CLI 的-r选项一一对应。七、测试验证多平台夹具与空输入仓库为 passwd 解析器提供了完整的单元测试 tests/test_passwd.py覆盖空输入jc.parsers.passwd.parse(, quietTrue)断言结果为[]CentOS 7.7输入 tests/fixtures/centos-7.7/passwd.out对照 tests/fixtures/centos-7.7/passwd.jsonUbuntu 18.04同样有配套的.out/.json夹具macOS 10.14.6输入为带大量#注释与负 UID 的 tests/fixtures/osx-10.14.6/passwd.out对照 tests/fixtures/osx-10.14.6/passwd.json。这些夹具直接印证了本文前述的注释跳过、负整数转换、空 comment 等边界行为。需要注意的是/etc/passwd中的口令字段在现代系统上仅为占位符x或*真实密码哈希存放于需要特权的/etc/shadow中因此该解析器并不涉及任何敏感信息读取。八、实战小结jc --passwd把原本需要awk -F:手工拆列的/etc/passwd变成了一等公民的 JSON 数据结构适用场景包括用jq快速统计各 Shell 的用户分布、查找 UID 为 0 的账户在 Python 自动化脚本中通过jc.parse(passwd, ...)直接获得字典列表免去手写文本解析跨平台审计脚本同一份解析逻辑在 Linux 与 macOS 上输出结构一致便于统一处理。原始模式-r适合需要保留原始字符串语义如处理超大 UID 或特殊格式的场景默认处理模式则更适合数值运算与比较。想进一步了解 jc 的整体用法与其余解析器可查阅仓库根目录的 README.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 的 group 解析器将 /etc/group 用户组文件转换为 JSON 的完整实战指南jc 的 group 解析器将 /etc/group 用户组文件转换为 JSON 的完整实战指南 本指南深入讲解 jc 项目内置的 group 解析器文档位开发工具一个下午跑通抖音无水印下载工具从 0 到批量下载的实操记录一个下午跑通抖音无水印下载工具从 0 到批量下载的实操记录 这篇文章记录我用 douyin downloader 完成一次抖音无水印下载的全过程装依赖、配开发工具jc 解析 certbot 命令输出将证书与账户信息转换为 JSON 的完整指南jc 解析 certbot 命令输出将证书与账户信息转换为 JSON 的完整指南 certbot Lets Encrypt 客户端的输出是面向人类阅读的开发工具上一篇如何用Tsuru PaaS平台实现企业级多云架构应用部署完整指南下一篇Taskcafe完整指南10个技巧掌握开源看板任务管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Bangumi 第三方客户端安装指南:三分钟跑起 bgm.tv 追番应用
Bangumi 第三方客户端安装指南:三分钟跑起 bgm.tv 追番应用

Bangumi 第三方客户端安装指南:三分钟跑起 bgm.tv 追番应用 【免费下载链接】Bangumi :electron: An unofficial https://bgm.tv ui first app client for Android and iOS, built with React Native. 一个无广告、以爱好为驱动、不以盈利为目的、专门做 ACG 的类似… · 2026/9/26 10:14:35

CLI-Anything:用Python统一管理命令行能力的元接口
CLI-Anything:用Python统一管理命令行能力的元接口

1. CLI-Anything 不是又一个命令行包装器,它是 CLI 能力的“操作系统级抽象”你有没有过这种体验:在终端里敲下git commit -m "fix: typo",心里却清楚——这行命令背后,是 Git 自己的解析器、状态机、对象数据库、索引文… · 2026/9/26 10:14:35

OpenPencil 全解析:开源 AI 原生设计编辑器,兼容 Figma 文件、内置 AI 且完全可编程
OpenPencil 全解析:开源 AI 原生设计编辑器,兼容 Figma 文件、内置 AI 且完全可编程

前端桌面应用AI 应用MCP 服务 【免费下载链接】open-pencil AI-native design editor. Open-source Figma alternative. 项目地址: https://gitcode.com/gh_mirrors/op/open-pencil 点击查看 免费下载 OpenPencil 是一款 MIT 许可的开源设计编辑器,主打… · 2026/9/26 10:14:35

吴恩达《Agent Skills with Anthropic》课程实战:用 TaoToken 统一 Key 跑通 Claude Agent SDK 配置
吴恩达《Agent Skills with Anthropic》课程实战:用 TaoToken 统一 Key 跑通 Claude Agent SDK 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 12:01:48

OpenClaw 配置文件 openclaw.json 完整参数说明:TaoToken 统一 Key 接入 gateway 配置骨架
OpenClaw 配置文件 openclaw.json 完整参数说明:TaoToken 统一 Key 接入 gateway 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 12:01:48

指纹芯片选型全攻略:从底层逻辑到量产落地避坑指南
指纹芯片选型全攻略:从底层逻辑到量产落地避坑指南

做终端产品的这些年,指纹芯片选型可能是硬件工程师和产品经理最容易吵架的地方。一颗芯片从规格书上看,像素、响应时间、功耗样样齐全,但到了产线、到了用户手里,问题全出来了。指纹芯片选型这事,真不是挑个参数好看的… · 2026/9/26 12:01:42

CSS媒体查询实战指南:从响应式原理到断点调试
CSS媒体查询实战指南:从响应式原理到断点调试

做 Web 开发这几年,我越来越觉得 CSS 媒体查询(Media Queries)是响应式设计里最绕不开、也最容易被低估的一环。很多新手一开始学 CSS 就会写media (max-width: 768px),觉得这只是“让手机端样式生效”的小技巧,但实际… · 2026/9/26 12:01:42

CSS媒体查询实战:从基础语法到断点选择与响应式布局技巧
CSS媒体查询实战:从基础语法到断点选择与响应式布局技巧

做前端的这些年,我见过太多"一套页面走天下"的项目,也见过不少到了移动端就乱成一锅粥的页面。CSS 媒体查询(Media Queries)就是解决这类问题的核心工具,它让我们能针对不同的屏幕尺寸、设备特性去定义不同的… · 2026/9/26 12:01:42

连锁门店串口设备上云:网关数量与部署位置怎么算?
连锁门店串口设备上云:网关数量与部署位置怎么算?

去年帮一个连锁烘焙品牌做设备改造,门店里的智能电表、后厨冷柜温控器、前场温湿度记录仪,清一色的串口设备。总部想远程统一监控,但设备本身没有网口,数据全靠店长每天拍照上传,数据真假且不说,光是整理就… · 2026/9/26 12:01:42

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码