GN⁺: JC, 인기 있는 커맨드라인 도구들의 출력을 JSON으로 변환
(github.com/kellyjonbrazil)JCJSON 변환기 요약
-
jc
는 CLI 도구, 파일 타입, 일반 문자열의 출력을 JSON 형식으로 변환하여 스크립트에서 더 쉽게 파싱할 수 있게 함. -
dig
명령어의 예시를 통해 JSON 형식으로 변환된 출력을 확인할 수 있으며, 이를jq
나jello
같은 도구로 추가 처리 가능. - 파이썬 라이브러리로도 사용 가능하며, 이 경우 JSON 대신 파이썬 딕셔너리, 딕셔너리 리스트 또는 딕셔너리의 게으른 반복 가능 객체를 반환.
JCJSON 변환기 설치 방법
-
pip
, OS 패키지 저장소, 바이너리 다운로드를 통해 설치 가능. - 다양한 리눅스 배포판, macOS, FreeBSD에서 사용 가능한 설치 명령어 제공.
JCJSON 변환기 사용 방법
-
STDIN
에서 파이프된 입력을 받아 이전 명령어의 출력을STDOUT
으로 JSON 형식으로 출력. - "매직" 구문을 사용하여 명령어 앞에
jc
를 붙여 변환하거나/proc
파일 경로 앞에 사용 가능. - 다양한 파서 옵션과 슬라이스 기능을 통해 출력 포맷 조정 및 특정 라인 처리 가능.
JCJSON 변환기의 특징
- 기본 및 원시 데이터 표현 제공, 스키마에 따라 알려진 숫자를 int/float JSON 값으로 변환.
-
--raw
옵션 또는raw=True
파라미터를 사용하여 원시, 전처리된 JSON 접근 가능. - 스트리밍 파서를 통해 대량의 명령어 출력을 메모리 효율적으로 처리.
JCJSON 변환기의 중요성
- 유닉스 철학을 21세기에 적용하려는 프로젝트의 동기와 사용 사례들을 블로그 포스트와 인터뷰에서 확인할 수 있음.
- Bash 스크립팅, Ansible, Saltstack, Nornir, FortiSOAR 등 다양한 환경에서 명령어 출력 파싱에 유용.
JCJSON 변환기의 호환성
- 일부 파서는 플랫폼에 구애받지 않고 작동하며, 플랫폼 특정 출력을 변환하는 파서는 호환성 경고 메시지를 생성할 수 있음.
- 모든 파서 정보는
jc -ap
를 실행하여 확인 가능.
JCJSON 변환기 기여 방법
- 코드나 파서 추가/개선에 대한 기여 환영,
jc/parsers/foo.py
또는jc/parsers/foo_s.py
를 템플릿으로 사용하여 풀 리퀘스트 제출 가능.
GN⁺의 의견
이 글에서 가장 중요한 것은 jc
가 다양한 명령어, 파일 타입, 문자열의 출력을 JSON으로 변환하여 프로그래밍적으로 처리할 수 있게 해준다는 점이다. 이는 개발자들이 데이터를 더 쉽게 다룰 수 있게 하며, 특히 유닉스와 리눅스 환경에서 스크립팅을 할 때 유용하다. 이 글이 흥미로운 이유는 jc
가 소프트웨어 개발과 시스템 관리에서의 자동화와 효율성을 크게 향상시킬 수 있는 도구이기 때문이다.
Hacker News 의견
-
FreeBSD에서
libxo
라이브러리를 사용하여 명령어 출력을 JSON 형식으로 변환하는 문제 해결-
ls
명령어는 지원되었으나 제거된 사례 존재 - 모든 유틸리티에서 지원되지 않음
- PowerShell은 기본적으로 구조화된 출력 제공
- Unix/Linux에서도
--json
플래그 표준화 필요성 제기
-
-
유지보수의 어려움에 대한 우려 표현
- 버전 관리, 명령어 플래그 변경 등 유지보수가 어려울 것으로 예상
-
--<CMD>
툴 사용법이 도움말/매뉴얼을 복잡하게 만들 수 있음
-
Nushell이라는 도구 소개
- 쉘 자체로서 구조화된 데이터를 제공하는 접근 방식
-
CLI 도구들이 JSON 출력을 지원하는 것에 대한 긍정적인 평가
- 실제로 JSON 형식이지만 복잡하거나 불필요한 경우가 많아 실용성에 의문
-
jc
도구의 사용법에 대한 의견-
jc dig example.com
이dig example.com | jc --dig
보다 나은 주 사용법이어야 함
-
-
PowerShell에서 모든 출력이 객체로 되어 있는 것에 대한 선호도 표현
- Bash 스크립트 작성 시 해당 기능이 그리워짐
-
jc
도구 유지보수를 맡는 이에 대한 존경 표현 -
--json
옵션을 받아들이는 현대적인 유닉스 명령어 도구 목록에 대한 질문- 해당 정보를 저장소에 추가하는 것이 유용할 수 있음
-
유닉스의 설계 결함에 대한 지적
- 명령어 프로그램이 호출 프로그램에게 정수형 종료 코드만을 출력
- GUI 프로그램이 명령어 프로그램을 호출할 때 제한적인 정보를 얻음
-
textfsm
을 사용하지 않은 것에 대한 의외의 표현- 네트워크 장비의 CLI 출력을 파싱하는 데
textfsm
이 널리 사용됨
- 네트워크 장비의 CLI 출력을 파싱하는 데