私の/etc/fstabファイルに次の行があります。
#
# /etc/fstab
# Created by anaconda on Sun Aug 23 14:32:22 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-rootlv / xfs defaults 0 0
UUID=af74c8xz-e6ec-2387-b2xe-cdc32519a69f /boot xfs defaults 0 0
UUID=GH4E-B04C /boot/efi vfat defaults,uid=0,gid=0,umask=0077,shortname=winnt 0 0
#/dev/mapper/rootvg-homelv /home xfs defaults 0 0
/dev/mapper/rootvg-optlv /opt xfs defaults 0 0
#/dev/mapper/rootvg-tmplv /tmp xfs defaults 0 0
/dev/mapper/rootvg-usrlv /usr xfs defaults 0 0
/dev/mapper/rootvg-varlv /var xfs defaults 0 0
/dev/mapper/rootvg-homelv /home xfs nodev 1 2
/dev/mapper/rootvg-tmplv /tmp xfs defaults,nodev,nosuid,noexec 1 2
tmpfs /dev/shm tmpfs nodev,nosuid,noexec 0 0
UUID=34g5et-fg55-40er-bx8u-9fhe47f986ab /datadisk ext4 defaults,nofail 1 2
/dev/disk/cloud/azure_resource-part1 /mnt auto defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig 0 2
/home
2つの項目があります/tmp
。/home
andのコメントを外し/tmp
、他の行と行/home
をコメントアウトする必要があります/tmp
。
したがって、最終ファイルは次のようになります。
#
# /etc/fstab
# Created by anaconda on Sun Aug 23 14:32:22 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-rootlv / xfs defaults 0 0
UUID=af74c8xz-e6ec-2387-b2xe-cdc32519a69f /boot xfs defaults 0 0
UUID=GH4E-B04C /boot/efi vfat defaults,uid=0,gid=0,umask=0077,shortname=winnt 0 0
/dev/mapper/rootvg-homelv /home xfs defaults 0 0
/dev/mapper/rootvg-optlv /opt xfs defaults 0 0
/dev/mapper/rootvg-tmplv /tmp xfs defaults 0 0
/dev/mapper/rootvg-usrlv /usr xfs defaults 0 0
/dev/mapper/rootvg-varlv /var xfs defaults 0 0
#/dev/mapper/rootvg-homelv /home xfs nodev 1 2
#/dev/mapper/rootvg-tmplv /tmp xfs defaults,nodev,nosuid,noexec 1 2
tmpfs /dev/shm tmpfs nodev,nosuid,noexec 0 0
UUID=34g5et-fg55-40er-bx8u-9fhe47f986ab /datadisk ext4 defaults,nofail 1 2
/dev/disk/cloud/azure_resource-part1 /mnt auto defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig 0 2
次の2つのコマンドを試しましたが、特に2番目のコマンドsed
でより多くの一致を見つけたので、必要なものよりも多くの行をコメントアウトしました。
sed -i '/defaults,nodev,nosuid,noexec/ s/^/#/' /etc/fstab
sed -i '/nodev/ s/^/#/' /etc/fstab
この目標を達成する方法は?
答え1
GNU Sedメソッド、
sed -Ei '/home|tmp/{s/^#//;t;s/^/#/}' file
/home|tmp/
行が一致するhome
かtmp
、{s/^#//;t;s/^/#/}
#
行の先頭から削除します。存在しない場合から始まる行を置き換えます#
。
Awkの代替
awk '$2 ~ /home|tmp/{ if (!( sub(/^#/, "") )) $1="#"$1} 1' file
$2 ~ /(home|tmp)/
2番目のフィールドに、home
またはがtmp
含まれている場合if (!( sub(/^#/, "") ))
#
行の先頭でaを見つけて削除します。ジョブが失敗した場合(#
行に開始がないため)$1="#"$1
#
行の先頭にaを追加します。
1
結果行を印刷します。
Gawkがある場合は、フラグを追加して-i inplace
ファイルを内部で編集できますが、出力をファイルにリダイレクトし、すべてが正常であることを確認してから元のファイルを上書きする方が良いことに気づきました。
答え2
特に複数のホストでこれを行う必要がある場合は、ansibleモジュールlineinfileを使用してください。https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html