핵심 Linux 명령에 대한 통합 표준 출력 데이터 형식이 있습니까(일관되고 쉬운 구문 분석을 위해)?

핵심 Linux 명령에 대한 통합 표준 출력 데이터 형식이 있습니까(일관되고 쉬운 구문 분석을 위해)?

모든 핵심 Linux 명령에는 서로 다른 stdout 형식이 있는 것 같습니다. 또한 다른 스크립트/응용 프로그램은 이러한 형식을 항상 쉽고 안전하게/일관되게 구문 분석할 수 있는 것은 아닙니다.

쉬운 구문 분석을 위해 균일하고 일관적인 출력을 제공할 수 있는 래퍼, 사양 또는 라이브러리가 있습니까(예: 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

대안: 일반 쉘 객체 모델

일부 껍질은 다음과 같습니다파워셸 코어기능 간의 일관된 데이터 쌍을 위한 공통 내부 개체 모델이 있습니다. Linux 핵심 유틸리티와 비슷한 것이 있습니까?

관련 질문

유용한 의견

답변1

~처럼타크라스는 지적했다, 여기서 간단한 대답은 "아니요"입니다. 역사적으로 *nix 운영 체제의 "the" API는 C API였습니다(man 1이 아닌 man 2에 설명되어 있음). 공통 코어 셸 인터페이스가 실제로 유용한 유일한 곳은 C API에 액세스할 수 없는 언어입니다... 즉, 셸 스크립트를 의미합니다.

쉘의 주요 기능은 사용자 인터페이스입니다.

쉘은 필연적으로 더 이상 단순한 UI가 아닙니다. 명령을 서로 연결하고 한 명령에서 다른 명령에 사용할 매개변수를 얻을 수 있다는 것은 매우 유용합니다... 하지만 강력한 구문 분석과 공통 인터페이스를 찾고 있다면 이제 이미 설계된 성숙한 프로그래밍으로 전환해야 할 때입니다. 언어는 다음과 같습니다. 처음부터 프로그래밍 언어로 설계되었습니다.

즉, 범용 쉘 인터페이스를 만들라는 시장 압력이 없습니다.

적은 양의 코드로 작업을 수행하기 위해 빠르고 간단한 스크립트를 원하는 사람들은 쉘(Bash 등)을 사용합니다. 좋은 API로 강력한 프로그램을 작성하려는 사람들은 Python과 같은 언어나 Go 또는 C와 같은 컴파일된 언어를 사용하는 경향이 있습니다.


부수적으로 구문 분석된 출력은 일반적으로 권장되지 않습니다 ls. 사용하기 가장 좋습니다와일드카드케이싱 자체 내에서.

답변2

"일반 내부 개체 모델" - 실제로는 쉘 속성이 아닙니다. 이는 기본 운영 체제의 속성입니다.

Windows에는 다음과 같은 것이 있습니다.CIM또는WMI.

Linux에서 명령은 다소 순서가 지정된 형식으로 일반 텍스트를 출력하는 경향이 있습니다. @GMaster가 언급했듯이 출력 텍스트를 처리하는 데 사용할 수 있는 도구가 있습니다. 이는 일반적으로 명령을 함께 연결하고 짧은 이름을 지정한다는 의미입니다(자주 그렇게 하는 경우).

답변3

이러한 유틸리티는 모두 같은 시기에 또는 같은 사람이 작성했거나 구문 분석을 쉽게 하기 위해 작성했다고 가정합니다. 그러나 실제로는 그렇지 않습니다. 이러한 유틸리티는 매우 다양한 유형의 정보를 생성하므로 누구도 해당 출력을 통합할 생각을 하지 않았습니다. 마지막으로, XML/JSON 및 기타 형식은 비교적 새로운 형식인 반면, 원래 Unix 유틸리티는 처리 능력이 낮고 저장 비용이 높았던 30년 전에 작성되었습니다. XML과 JSON은 모두 약 21년이 되었습니다.

쉬운 구문 분석을 위해 균일하고 일관적인 출력을 제공할 수 있는 래퍼, 사양 또는 라이브러리가 있습니까(예: JSON 또는 UniqueName:Value 인코딩)?

내가 아는 한, 아무도 이런 일을 한 적이 없습니다. 패치를 환영합니다.

관련 정보