私がするとき
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
次の1行で試してください。
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
各ユニット名が最大1回だけリストされていることを確認してください(もしそうならば追加)。