我正在尝试从 bind 的 named.conf 文件中删除现有的区域记录(在 centos 7 版本上)。
区域记录如下所示:
zone "example.com" IN {
type master;
file "example.com.zone";
};
命令:
sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf
删除该记录(正如所料)。
接下来,我创建了以下具有可执行权限的 shell 脚本 (rm-zone.sh) 来执行相同的工作:
#!/bin/sh
[ $# -lt 1 ] && {
echo "usage: $0 <domain>"
exit 1
}
domain=$1
sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf
rndc reload
echo Zone: $domain deleted successfully
当我以 root 身份登录并运行命令时:
./rm-zone.sh example.com
我看到消息“区域 example.com 已成功删除”,但该区域仍然在我的 named.conf 文件中...
再次,当我从 cli 给出上述命令时:
sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf
该区域已被正确删除!
显然 shell 脚本有问题,但还没能找出问题所在...
如果您对我在此处遗漏的内容有任何想法,我将不胜感激!
答案1
尝试
sed -nie "/\"$domain\"/,/^\};"'$/d;p;' /etc/named.conf
代替
sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf
单引号禁用 shell 对 或\|
的解释$domain
。
答案2
关于你正在解决的实际问题,我认为可能值得研究使用rndc addzone
/rndc delzone
(依赖于allow-new-zones
选项)允许自动添加/删除区域,而不是named.conf
自己编写脚本进行修改。
虽然我不确定你的脚本到底出了什么问题,但是它的编写方式无论发生什么,它都会顺利通过并在最后无条件地打印“已成功删除”消息。
也许set -ex
在脚本早期添加有助于排除故障?(-e
总体来说这可能是一个好主意?)
保留某种备份也是明智之举,以便在发生故障时可以恢复,并且也许可以调用named-checkconf
它来检查新文件是否合理?