我有一台大约有 300 个虚拟主机的服务器。当我想确保特定的 httpd.conf 文件已加载到虚拟主机配置中并且语法正确时,我会运行apachectl -S
。但问题是,我得到了大量的输出。
我曾尝试apacectl -S | grep 'foo'
并使apachectl -S > foo.txt
这些数据更易于管理,但命令的输出不利于 grepping 或推送到文本文件中。
当我尝试时apachectl -S | grep 'foo'
,它只是返回整个输出apachectl -S
。
当我尝试时apachectl -S > foo.txt
,foo.txt 是一个空文件。
这可能与服务器的配置方式有关,因为我能够在本地机器上成功执行 grep。
有什么建议么?
答案1
apachectl 的输出被发送到 stderr。您使用的命令试图过滤 stdout。要以您描述的方式使用 grep,请将 stderr 重定向到 stdout,如下所示:
apachectl -S 2>&1 | grep 'blah'
答案2
哈哈,看起来这个问题已经在 Stack Overflow 上得到回答了:
https://stackoverflow.com/questions/6505932/how-to-filter-apache-virtual-host-listing-using-grep
因为apachectl -S
(实际上是的包装器httpd -S
)通过 STDERR 发送其输出,所以我需要将 STDERR 重定向到 STDOUT,然后对其进行 grep。
apachectl -S 2>&1 | grep 'foo'
谢谢,SO!