使用 bash 修改 /etc/export 的工作示例是什么?
例子:
我想确保以下规则存在且有效:
/export/home 2400:123::/32(rw,no_root_squash)
它应该:
- 仅在尚不存在时添加(以任何形式)
- 如果部分存在,则应更新现有条目(例如选项更新)
现有文件中可能的语法:
多个空格和不同的选项
/export/home 2400:123::/32(rw,no_root_squash,no_subtree_check)
同一行上有多个允许
/export/home 2400:123::/32(rw,no_root_squash,no_subtree_check) 2400:321::/32(rw,no_root_squash,no_subtree_check)
除了以上的组合之外。
最初我想使用 augeas 来实现此目的,但 /etc/exports 文件中的 IPv6 地址存在错误。
/etc/exports 文件应该允许独立修改而不破坏脚本(这应该确保只有有问题的规则是正确和有效的,而保留其余规则)
答案1
如果你不能使用 Augeas 和 Puppet,我会这样做:
if grep -qF '^/export/home' /etc/exports;then
sed -i \
's@^/export/home.*$@/export/home 2400:123::/32(rw,no_root_squash)@'\
/etc/exports
else
echo '/export/home 2400:123::/32(rw,no_root_squash)' >> /etc/exports
fi
但要小心:这假设任何导出规则都/export/home
可以被您给定的定义替换。
答案2
我发现 Augeas 的 /etc/exports 镜头已针对主干中的 IPv6 进行了修复,并且可以手动导入:
https://github.com/hercules-team/augeas/blob/master/lenses/exports.aug
将此文件放入,/usr/share/augeas/lenses/
使其出现在默认镜头上。