0

我正在尝试创建一个小脚本,/var通过修改/etc/fstab文件将 noexec 和 nosuid 添加到分区。

目前,/etc/fstab除分区外,还包含 /var/log/var分区。

当我运行我的脚本时,对/var/var/log. 我只想在/var分区中添加“noexec”和“nosuid”。

这是我写的

#cat test.sh
#!/bin/bash
egrep -q  '/var/.+noexec' /etc/fstab || sed -ri '/\/var/ s/defaults/defaults,noexec/' /etc/fstab
egrep -q  '/var/.+noexec' /etc/fstab || sed -ri '/\/var/ s/defaults,nodev/defaults,nodev,noexec/' /etc/fstab
egrep -q  '/var/.+nosuid' /etc/fstab || sed -ri '/\/var/ s/defaults/defaults,nosuid/' /etc/fstab
  1. 当前 /etc/fstab 条目 wrt /var 和 /var/log 如下所示,
cat /etc/fstab

/dev/mapper/system-var  /var                    ext4    defaults,nodev        1 2

/dev/mapper/system-varlog /var/log                ext4    defaults,nodev        1 2
  1. 运行脚本后,输出如下,
/dev/mapper/system-var  /var                    ext4    defaults,nosuid,noexec,nodev        1 2

/dev/mapper/system-varlog /var/log                ext4    defaults,nosuid,noexec,nodev        1 2
  1. 预期输出如下所示,
cat /etc/fstab

/dev/mapper/system-var  /var                    ext4    defaults,nosuid,noexec,nodev        1 2

/dev/mapper/system-varlog /var/log                ext4    defaults,nodev        1 2
4

1 回答 1

0

最简单的方法是在 grep 模式中添加一个 traling 空格字符,/var如下所示:

egrep '/var\s' /etc/fstab

\s代表许多 REGEX 实现(sed、perl...)中的空格,它由空格、制表符和一些其他字符组成。

于 2019-09-17T12:34:47.170 回答