내가 할 때
systemctl list-units --all --state=loaded
각 셀의 출력을 열로 얻습니다.
UNIT LOAD ACTIVE SUB DESCRIPTION
UNIT
입력과 출력 만 있으면 됩니다 .
추가를 시도했지만 --property=UNIT
여전히 모든 열이 인쇄됩니다. 시도했지만 --output=json-pretty
성공하지 못했습니다.
출력에서 특정 단위를 일치시켜야 하는데 정규 표현식이 실패하므로 문자열을 쉽게 비교할 수 있도록 단위 목록만 가져오면 도움이 될 것입니다.
내가 사용하는 정규식은 다음과 같습니다fgrep "input_from_user".service
정규식이나 명령에 대한 제안 사항이 있나요?
답변1
JSON 출력이 있으면 jq
Python이나 JSON을 이해하는 모든 도구를 사용할 수 있습니다. 예를 들어 필터링을 사용합니다 jq
.
systemctl list-units --output json |
jq -r --arg pattern input_from_user '.[].unit | select(test($pattern))'
이는 문서화되어 있지 않지만2020년 5월에 추가된 내용입니다테이블 형식 출력을 JSON으로 변환하는 일반적인 기능은 , 및 에서 git grep output_table
작동해야 함을 의미합니다 .list-units
list-unit-files
list-machines
예:
% systemctl list-units --output json | jq -r --arg pattern network '.[].unit | select(test($pattern))'
network-online.target
network.target
답변2
다음 한 줄로 시도해 보세요.
systemctl show '*' --state=loaded --property=Id --value --no-pager | grep . | sort | uniq
설명하다
systemctl
show
명령 제공:'*'
(내 관찰에 따르면) 모든 단위를 선택하십시오. 그렇지 않은'*'
경우systemctl show
에만전시하다관리하는 장치가 아닌 시스템 관리자 자체에 대한 정보입니다.--state=loaded
해당 항목만 선택단위어느 것입니까?짐을 실은질문에 지정된 상태(...선택한 각 장치의 로드 상태를 추가하여 출력에 추가할 수 있음--property=LoadState
)--property=Id
추가됨회사 이름(Id
)출력하다(또한 참조--property
문서).--value
속성 삭제열쇠출력에는 속성만 표시됩니다.가치(즉,Id=foo.service
가 된다foo.service
)--no-pager
호출기를 사용하지 않음을 나타냅니다 . (... 파이프라인에서 자동으로 사용된다는 것을 알지 못한systemctl
경우 추가됨 )systemctl
systemctl show ...
그런 다음 출력을 파이프하십시오... | grep . | sort | uniq
.grep .
빈 개행 문자를 필터링하세요. 이는 다운스트림 처리를 더욱 강력하게 만듭니다.sort
모든 장치 이름을 알파벳순으로 정렬uniq
각 단위 이름이 최대 한 번만 나열되는지 확인하세요(만약의 경우에 대비해 추가).