AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 686687
Accepted
Guy Langston
Guy Langston
Asked: 2022-01-18 02:35:33 +0800 CST2022-01-18 02:35:33 +0800 CST 2022-01-18 02:35:33 +0800 CST

核心 linux 命令是否有统一的标准输出数据格式(用于一致/易于解析)?

  • 772

似乎每个核心 Linux 命令都有不同的标准输出格式。此外,其他脚本/应用程序并不总是容易/安全/一致地解析这些格式。

是否有包装器或规范或库提供统一/一致的输出以便于解析(如 JSON 或 UniqueName:Value 编码)?

示例 1:ps -A

    PID TTY          TIME CMD
    558 tty1     00:00:00 startx
    576 tty1     00:00:00 xinit
    577 tty1     00:00:37 Xorg
    590 tty1     00:00:01 awesome
   8281 pts/0    00:00:00 ps

示例 2:lshw / lscpu

虽然lshw是键:值输出,但很难解析成唯一的键:值对。

cedar
    description: Computer
    width: 64 bits
    capabilities: smp vsyscall32
  *-core
       description: Motherboard
       physical id: 0
     *-memory
          description: System memory
          physical id: 0
          size: 7936MiB
     *-cpu
          product: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
          vendor: Intel Corp.
          physical id: 1
          bus info: cpu@0
          size: 2611MHz
          capacity: 3GHz
<SNIP>

示例 3:ls -l

total 36
drwxr-xr-x  2 guy guy 4096 Nov 19 08:41 Desktop
drwxr-xr-x  2 guy guy 4096 Dec 26 13:37 Downloads
drwxr-xr-x  3 guy guy 4096 Nov  7 19:39 go
drwxr-xr-x  6 guy guy 4096 Jan 15 12:42 play
drwxr-xr-x 12 guy guy 4096 Jan 16 19:27 repo
drwxr-xr-x  3 guy guy 4096 Oct 15 18:39 RiderProjects
drwxr-xr-x  8 guy guy 4096 Jan 13 17:38 scripts
drwxr-xr-x 12 guy guy 4096 Jan 10 16:48 source
drwxr-xr-x  6 guy guy 4096 Jan  4 14:31 temp

例 4。file /bin/bash

/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6c75f9f0f273cf6549f078b042c0a3f5a04f0357, for GNU/Linux 4.4.0, stripped

替代方案:通用外壳对象模型

PowerShell Core等一些 shell具有通用的内部对象模型,用于在函数之间进行一致的数据配对。有类似 linux core utils 的东西吗?

相关问题

  • 如何提倡 GNU 为所有 CLI 命令添加“--json”参数以使其符合要求?
  • https://unix.stackexchange.com/a/515886/457338

有用的评论

  • lshw, lscpu,ps不是 GNU coreutils Stéphane Chazelas 的一部分
  • coreutils 不是单数:GNU、toybox(Android)或busybox(大多数其他)
coreutils
  • 3 3 个回答
  • 75 Views

3 个回答

  • Voted
  1. Best Answer
    Philip Couling
    2022-01-25T06:46:23+08:002022-01-25T06:46:23+08:00

    正如Taqras 所指出的,这里的简单答案是“不”。从历史上看,*nix 操作系统的“the”API 一直是 C API(如 man 2 而不是 man 1 中所述)。通用核心 shell 接口真正有用的唯一地方就是无法访问 C API 的语言......我的意思是在 shell 脚本中。

    shell 的主要功能是作为用户界面。

    不可避免地,shell 已经不仅仅是一个简单的 UI。能够将命令粘合在一起,从一个命令中获取参数以在另一个命令中使用是非常有用的......但是当您正在寻找强大的解析和通用接口时,是时候转向已经设计好的成熟的编程语言了从一开始就作为一种编程语言。

    简而言之,创建通用外壳接口的市场压力并不大。

    那些想要快速简单的脚本用少量代码完成某事的人将使用 shell(Bash 等)。那些想要编写具有良好 API 的健壮程序的人倾向于转向 Python 之类的语言或 Go 或 C 之类的编译语言。


    ls通常不鼓励顺便解析 的输出。最好在外壳本身内使用通配符。

    • 2
  2. Taqras
    2022-01-18T04:09:21+08:002022-01-18T04:09:21+08:00

    “通用内部对象模型”——并不是真正的 shell 属性;它是底层操作系统的属性。

    在 Windows 中,您有CIM或WMI之类的东西。

    在 Linux 中,命令倾向于输出纯文本,或多或少是有序格式的——正如@GMaster 评论的那样,有一些工具可用于处理输出的文本。这意味着您通常会将命令连接在一起,并将它们别名为简短的,如果这是您经常做的事情。

    • 1
  3. Artem S. Tashkinov
    2022-01-18T04:03:36+08:002022-01-18T04:03:36+08:00

    您假设所有这些实用程序几乎是同时编写的,或者是由同一个人编写的,或者是为了易于解析。事实并非如此。这些实用程序产生了截然不同类型的信息,因此没有人想到统一它们的输出。最后,XML/JSON 和其他格式相对较新,而最初的 Unix 实用程序是在 30 多年前编写的,当时处理能力很低,存储成本很高。XML 和 JSON 都有 21 年的历史了。

    是否有包装器或规范或库提供统一/一致的输出以便于解析(如 JSON 或 UniqueName:Value 编码)?

    据我所知,没有人这样做过。欢迎使用补丁。

    • 0

相关问题

  • `-dD` 对 `uniq` 意味着什么?

  • `stat` 输出格式:截断日期字段

  • dircolors 文件中的“MISSING”指令是什么意思?

  • 为什么 df 和 df -h 显示不同的值?df -h 如何进行计算?

  • md5sum 在校验和前面加上 '\'

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve