更新された回答

更新された回答

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最初はフィルタとして使用できると思いましたが、明らかに引数は次のとおりです。提供するしたがって、他の種類(ターゲットまたはインストールなど)は適切にフィルタリングできません。

おすすめ記事