sed: /etc/fstab の項目の置き換え

sed: /etc/fstab の項目の置き換え

私は私たちのシステムのいくつかを強化しています。強化プロセスの一環として、特定のパーティションの機能を制限するために/ etc / fstabのいくつかのエントリを更新する必要がありました。

しかし、sedインライン置換を使用して行を更新できることを願っています。以下は/ etc / fstabの現在の部分です:

# /etc/fstab
# Created by anaconda on Wed Feb 21 09:37:23 2018
/dev/mapper/vg1-lv_root /                       ext4    defaults        1 1
/dev/mapper/vg1-lv_home /home                   ext4    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0

sedコマンドを実行した後、ファイルは次のようになります。

# /etc/fstab
# Created by anaconda on Wed Feb 21 09:37:23 2018
/dev/mapper/vg1-lv_root /                       ext4    defaults        1 1
/dev/mapper/vg1-lv_home /home                   ext4    defaults,nodev        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0

デフォルトでは、ext [2-4]のすべての行(ルートパーティションではない)に "nodev"を追加する必要があります。

私が設定したsedコマンドはほとんどこれを行いましたが、何らかの理由で "/"パーティションと一致しない正規表現を取得できないため、常にその行も更新されます。

sed '/^[^#].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab

vg1-lv_rootではなく空白で囲まれた「/」を閉じたいです。以下はうまくいきますが、この解決策はあいまいなので気に入らません。

sed '/^[^#].*ext[2-4]/s/defaults/defaults,nodev/g' /etc/fstab | sed '/^[^#].*root.*ext[2-4]/s/defaults,nodev/defaults/' > /etc/fstab

ベストアンサー1

awk追加のロジックを使用して文字列を追加し、column最終出力ファイルの形式を再指定できます。/etc//tmp/フォルダへの書き込み権限があるとします。

tempfile=$(mktemp /tmp/tmpfile.XXXXXXXX)

/tmp/awkこれにより、出力を記録して元のファイルにリダイレクトできるパスに一時ファイルが作成されます。

awk '$3 ~ "ext[2-4]"{ $4=$4",nodev" }1 ' /etc/fstab | column -t > "$tempfile" && mv -- "$tempfile" /etc/fstab

そのcolumn -t部分は単に冗長であり、出力ファイルをクリーンアップせず、かさばるようにするのではなく、読みやすくするために必要です。

おすすめ記事