使用grep查找包含字符串的文件

时间:2012-06-29 22:48:46

标签: unix

我的htdocs文件夹中的.htaccess文件不起作用。我在访问文件名时尝试重定向到Google。我想知道我的httpd.conf的设置在哪里,所以我可以启用mod_rewrite。我做了以下UNIX命令,以查明我的硬盘驱动器上是否存在httpd.conf文件:

find * -name "httpd.conf"

该文件不存在。我想也许还有另一个控制mod_rewrite的文件。我想看看任何目录中是否存在“AllowOverride”。我输入了以下UNIX命令:

grep -r "AllowOverride" *

但它很难阅读,因为它打印出如此多的文件夹。文件夹附带的消息是“权限被拒绝”或“没有这样的文件或目录”。如何只获取包含AllowOverride的文件的文件路径?

3 个答案:

答案 0 :(得分:5)

许多Unix和类似系统提供locate(1)命令,该命令使用数据库来加速查找单个文件。试试这个:

locate httpd.conf

当然,请注意,Apache配置存储在各种名称的文件中;我见过apache.confhttpd.confhttpd2.conf,然后是/etc/apache2/conf.d/的巨大堆 - 整个目录结构用于配置Apache。您的分发可能会有所不同。

也许apachectl configtest会显示路径? (目前我的机器上没有安装,所以我不能轻易测试。)

答案 1 :(得分:4)

尝试此命令:

 find / -name "httpd.conf" 2>1 | grep -v "Permission denied"

2>1个渠道stderrstdout,以便两者都可以通过管道输入grep实用程序。 grep反过来将打印任何没有字符串“Permission denied”的行(-v否定/反转搜索字符串的匹配)

如果您不将stderr重定向到stdout,则stderr到控制台的输出将绕过命令行的其余部分。

你可以通过追加扩展上述命令行:

| grep -v "No such file or directory" 

如果那个字符串出现了,你也想要抑制它。

这告诉你all about io redirection。这是一个很好的quick summary

答案 2 :(得分:0)

使用以下内容:

  find / -type f -exec grep -n "AllowOverride" {} \; -print 2>/dev/null

要从根目录扫描包含“AllowOverride”字符串的文件,如果要在特定目录中运行搜索,请改用以下内容:

  find /path/to/directory -type f -exec grep -n "AllowOverride" {} \; -print 2>/dev/null

输出应仅打印包含指定字符串的文件以及匹配行的编号