systemctl을 사용하여 장치 이름만 얻는 방법은 무엇입니까?

systemctl을 사용하여 장치 이름만 얻는 방법은 무엇입니까?

내가 할 때

systemctl list-units --all --state=loaded

각 셀의 출력을 열로 얻습니다.

UNIT     LOAD   ACTIVE   SUB       DESCRIPTION  

UNIT입력과 출력 만 있으면 됩니다 .

추가를 시도했지만 --property=UNIT여전히 모든 열이 인쇄됩니다. 시도했지만 --output=json-pretty성공하지 못했습니다.

출력에서 특정 단위를 일치시켜야 하는데 정규 표현식이 실패하므로 문자열을 쉽게 비교할 수 있도록 단위 목록만 가져오면 도움이 될 것입니다.

내가 사용하는 정규식은 다음과 같습니다fgrep "input_from_user".service

정규식이나 명령에 대한 제안 사항이 있나요?

답변1

JSON 출력이 있으면 jqPython이나 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-unitslist-unit-fileslist-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

설명하다

  • systemctlshow명령 제공:
    • '*'(내 관찰에 따르면) 모든 단위를 선택하십시오. 그렇지 않은 '*'경우 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각 단위 이름이 최대 한 번만 나열되는지 확인하세요(만약의 경우에 대비해 추가).

관련 정보