私は私たちのシステムのいくつかを強化しています。強化プロセスの一環として、特定のパーティションの機能を制限するために/ 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
部分は単に冗長であり、出力ファイルをクリーンアップせず、かさばるようにするのではなく、読みやすくするために必要です。