我试图用defaults
defaults,nodev
replacedefaults
defaults,nodev
为/
, /home
, /opt
, /tmp
, /var
。
但是,对于swap
和proc
defaults
设置不应该改变。
这是/etc/fstab
文件:
/dev/rootvg/swap swap swap defaults 0 0 /dev/rootvg/sysroot / ext3 defaults 1 1 /dev/sda1 /boot ext3 acl,user_xattr 1 2 /dev/rootvg/home /home ext3 defaults 1 2 /dev/rootvg/opt /opt ext3 defaults 1 2 /dev/rootvg/tmp /tmp ext3 defaults 1 2 /dev/rootvg/var /var ext3 defaults 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs noauto 0 0 debugfs /sys/kernel/debug debugfs noauto 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0
我希望这个sed
命令对你有帮助
sed '/proc\|swap/!s/defaults/&,nodev/' /etc/fstab
输出:
/dev/rootvg/swap swap swap defaults 0 0 /dev/rootvg/sysroot / ext3 defaults,nodev 1 1 /dev/sda1 /boot ext3 acl,user_xattr 1 2 /dev/rootvg/home /home ext3 defaults,nodev 1 2 /dev/rootvg/opt /opt ext3 defaults,nodev 1 2 /dev/rootvg/tmp /tmp ext3 defaults,nodev 1 2 /dev/rootvg/var /var ext3 defaults,nodev 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs noauto 0 0 debugfs /sys/kernel/debug debugfs noauto 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0
注意:如果你想在文件中使用-i
选项进行更改
你可以使用{
来组合两个正则表达式地址:
/^\//{/swap/!s/defaults/defaults,nodev/}
更详细地说:
#!/bin/sed /^\//{ /swap/!s/defaults/defaults,nodev/ }
所以在以/
开头的行上,如果那行不包含swap
,那就进行替换。
实际上,对于那个特定的文件,所有的磁盘文件系统都是ext3
,所以你可以简化为
/ext3/s/defaults/defaults,nodev/
看来你想改变所有的ext3
文件系统的选项。 然后你可以:
sed '/ext[2-4]/s/defaults/&,nodev/' file
用这一行,它将在ext2, 3, 4
上应用替代。 你可以调整它,如果你想,例如ext3仅用于ext3。 但是,这可能并不总是给你正确的结果,因为正则表达式被使用。
如果你必须做某些挂载点的替换,我会使用awk检查列,我也不会使用正则表达式。