ファイルに複数行を追加しますが、すでに存在する場合はスキップします。

ファイルに複数行を追加しますが、すでに存在する場合はスキップします。

私はLinuxを使用するときに多くの設定ファイルを扱い、セットアッププロセスを自動化するのが好きなので、自動化されたシェルスクリプトの生成を利用します。

複数行のコードをファイルの末尾に一緒に具体的に追加する迅速で効率的な方法を探したいのですが、コード行が完全に一緒に存在することを確認している場合はスキップします。スクリプトを再実行し続けると、繰り返しのテキストブロックがファイルに追加されたくありません。

たとえば、私は最近SSHキーだけを厳密に受け入れ、パスワードの使用を防ぐようにOpenSSHを設定しました。しかし、今使用したいです。マッチオプションを使用すると、特定のIPアドレスサブネットでのみパスワードを使用できます。次の行を追加したいと思います。/etc/ssh/sshd_config文書:

Match Address 192.168.0.0/16
    PasswordAuthentication yes
    PermitRootLogin yes

これらのコード行がすでに存在する場合は、そのテキストブロックが設定ファイル全体に存在するかどうかを確認します。

grepを使用して単一の文字列を検索できますが、パスワード認証そしてrootユーザーログインを許可するパラメータは一致オプションによって異なります。

grep -qxF 'PasswordAuthentication yes' "/etc/ssh/sshd_config" || echo "PasswordAuthentication yes" >> "/etc/ssh/sshd_config"

私はLinuxに初めてアクセスしたときに設定ファイルをバックアップし、heredocs全体をそのファイルに保存しました。明らかに、構成ファイルは常に必要なもので上書きされ、元のファイルは安全であるため、必要に応じて何度もこれを行うことができます。

関連情報