サーバーを設定するためにbashスクリプトをnoatime
追加したいです。fstab
/
パーティションに対してのみ安全な方法で自動化するにはどうすればよいですか?
簡単に言うと:
その行にまだbash / shellコードを使用しているものが含まれていない場合は、,noatime
2行目の文字列をその行の4番目の文字列に追加するにはどうすればよいですか?/
noatime
サンプルファイル:
# Comment
UUID=1234567890-abcdef / ext4 defaults,discard 0 1
UUID=9876543210-fedcdab /var ext4 defaults,discard 0 0
得るべきこと:
# Comment
UUID=1234567890-abcdef / ext4 defaults,discard,noatime 0 1
UUID=9876543210-fedcdab /var ext4 defaults,discard 0 0
ベストアンサー1
これにより、目的の効果を得ることができます。
awk -i inplace '$2 == "/" && !($4 ~ /noatime/) { sub(/[[:space:]]*([^[:space:]]+[[:space:]]+){3}[^[:space:]]+/,"&,noatime") }1' /etc/fstab
これはあなたが要求したよりも少し具体的です。次の,noatime
場合、4番目のフィールドに追加されます。その分野まだ含まれていないnoatime
、行全体をチェックしません。
-i inplace
Gawk専用です。サポートされていない場合、結果は新しいファイルに書き込まれます。
awk '$2 == "/" && !($4 ~ /noatime/) { sub(/[[:space:]]*([^[:space:]]+[[:space:]]+){3}[^[:space:]]+/,"&,noatime") }1' /etc/fstab > /etc/fstab.new && mv /etc/fstab{.new,}
どちらの場合も、サーバー設定スクリプトがルートとして実行されていると仮定します。
(ありがとうございます。エドモートン強力なテキスト置換のために!を使用すると、4番目のフィールドの正規表現に関連する潜在的な問題を回避できますsub
。 )