我正在尝试使用/etc/fstab
/ sed
修改awk
。与this question非常相似,但问题中的解决方案并非完全为我工作。
我需要将nodev
(和nosuid
)选项添加到nfs
或nfs4
挂载点。
我有工作;
awk '$4!~/nodev/&&$3~"nfs"{$4=$4",nodev"}1' OFS="\t" /etc/fstab > /etc/fstab.tmp && mv /etc/fstab.tmp /etc/fstab
awk '$4!~/nosuid/&&$3~"nfs"{$4=$4",nosuid"}1' OFS="\t" /etc/fstab > /etc/fstab.tmp && mv /etc/fstab.tmp /etc/fstab
但是,它会删除现有的空白区域并替换为单个选项卡。我的问题是:如何以较少侵入性的方式进行此更改? This answer看起来很有前途,但我不太了解它以使其适应我的使用。
我对sed
或awk
以外的解决方案持开放态度,但默认的Red Hat / CentOS环境中需要存在任何其他工具(在Kickstart的%post期间)。
答案 0 :(得分:2)
不幸的是,如果您更改任何字段,awk
确实会产生空格。但这对sed来说非常简单。如果您的sed支持\S
来表示非空格,则可以执行以下操作:
sed 's/\S\S*/&,nodev/4'
将,nodev
追加到第4列。所以试试:
sed -e '/nfs/{/nodev/!s/\S\S*/&,nodev/4}' -e '/nfs/{/nosuid/!s/\S\S*/&,nosuid/4}'
如果您的sed不允许/S
,请改用[^ ]
(确认空格和括号内的标签。)这不会限制nfs
与第3列的匹配。为读者留下了锻炼。
答案 1 :(得分:1)
即使这有点晚了 - 这是我在KickStart文件中使用的方法来改变/ etc / fstab
sed -i '/tmp\s/ s/defaults/rw,nodev,noexec,nosuid/' /etc/fstab
基本上,当它看到/tmp
后面跟着至少一个空格的行时,它会用defaults
替换单词rw,nodev,noexec,nosuid
。没有大惊小怪,没有麻烦。