systemd
特定のユニットが存在するかどうかを知りたいです。
これは次のような場合に機能します。
- あらゆる種類のデバイス(サービス、ターゲット、インストール...)
- 実行中、無効、またはブロックされたデバイス
私はこれができることを知っています:
systemctl list-unit-files | grep "^my.target"
しかし、より良い方法があるはずです。
または、次のように指定してこのチェックを実行したいと思います。私のものsystemctl
他のコマンドと同様に、「.service」を指定する必要はありません。
systemctl exists my
ベストアンサー1
私はこれを行う基本的なシステム方法がわかりませんが、以下を(乱用)使用できますsystemctl list-unit-files
。
systemctl-exists() {
[ $(systemctl list-unit-files "${1}*" | wc -l) -gt 3 ]
}
これにより、次のように使用できる「テスト」関数が生成されます。
systemctl-exists my && echo my exists as a systemd unit
サフィックスを使用すると、*
systemd が指定した引数をすべての「タイプ」(サービス、ターゲット、またはインストール) と一致させることができます。この関数は、systemctl list-unit-files
一致する単位がない場合、少なくとも3行の出力を含む現在の出力にハードコードされます。
1. UNIT FILE STATE
(one or more matching unit files)
2. (a blank line)
3. "%d unit files listed."
また、同様の接頭辞を持つユニットファイルがある場合、末尾のワイルドカードは誤った肯定を引き起こす可能性があります。 「au」を検索すると、「auditd」、「autofs」などを含む愚かな情報を見つけることができます。本物の「au.service」。ご存知の方は、もっとサービス名を教えてください。それではsystemctl-exists au.service
正しいことをします。
systemctl cat
最初はフィルタとして使用できると思いましたが、明らかに引数は次のとおりです。提供するしたがって、他の種類(ターゲットまたはインストールなど)は適切にフィルタリングできません。