在配置samba时,我按照官方文档的建议使用了这种方法。
testparm -s smb.conf.master > smb.conf
这意味着我可以保留完整注释的版本(smb.conf.master),但我还可以获得精简版且易于人类和机器解析的 smb.conf 版本
apache 的配置文件有没有等效的方法?
答案1
我经常这样做:
grep -v'^#'apache.conf> apache-stripped.conf
如果您想要真正积极主动并删除空行:
egrep -v'^(#|$)'apache.conf>apache-stripped.conf
我应该指出,这样做的唯一原因是,如果您觉得注释令人分心,可以使您更容易阅读。Apache 当然不介意。从实时 Apache 配置中删除注释不会提高性能,除了在启动时节省几微秒的时间。
答案2
您可以使用(在 Debian 系统上通常称为 apache2ctl)测试配置文件apachectl configtest
。这是我能想到的最接近的等效方法。
编写一个脚本将 configtest 与其他程序(grep、awk、sed 等)结合起来以复制您使用 testparm 所做的事情并不会太麻烦。
就我个人而言,我发现没有注释的 httpd.conf 比有一些注释的 httpd.conf 更难阅读,您这样做有什么特殊原因吗?
答案3
这实际上是对 Insyte 的答案的评论,但我无法将其格式化为可读的评论。而且这对于评论来说太长了:)
sed -e 's/^[[:space:]]\+\(#\|\$\)/#/' apache.conf | grep -v'^#'|独特
像这样使用 sed 将会去除全行注释之前和所有行尾标记之前的空格。通过 uniq 管道将去除任何连续空行序列中除第一个空行之外的所有行(即在“段落”之间留下一个空行)。在我看来,这使其更具可读性。
在这里使用 uniq 确实存在删除任何其他连续重复行的小风险,但在实践中这不太可能成为问题。
另外,回答你关于删除单个#注释,但不删除双重##注释的问题……首先我要说的是,双重和三重#注释在配置文件中很常见,所以你可能想使用其他的东西。例如'#:'。然后使用类似这样的内容:
sed -e 's/^[[:space:]]\+\(#\|\$\)/#/' apache.conf | egrep -v '^#[^:]|#$' | uniq