使用 Grep 命令而不指定某个目录

使用 Grep 命令而不指定某个目录

您可以使用该grep命令而不指定目录路径吗?

例子:

$ sudo grep "filename" /

我也尝试过这个:

 sudo find / -type f grep -l "filename"

还是没有运气。

基本上我正在搜索LoadModuleApache2 配置文件中指定的位置。我以为它在这里:/etc/apache2/apache2.conf但事实并非如此。

答案1

Grep 希望您给它一个文件名或文件名列表。它不采用路径作为参数。因此,你的第一次尝试可以写成

sudo grep searchstring /*

搜索紧邻根目录下的所有文件。 (这可能不是您想要的。)

编辑:GNU grep 实际上可以递归搜索,所以你可以这样做

sudo grep -r searchstring /

在第二种情况下,您误解了 find 的工作原理。-type需要一个参数告诉它要查找什么类型的文件,并且之后仅添加“grep”不会执行任何操作。但是,您可以告诉它对找到的每个文件执行命令,这可能就是您正在寻找的内容。就像这样:

sudo find / -type f -exec grep -l searchstring {} \;

意思{}是“文件的名称”,并且\;意思是“命令现在完成”。

答案2

珍妮的回答是最笼统的。您应该能够找到您需要的东西

grep -r -i '^[[:space:]]*LoadModule' /etc/apache2

为了迂腐,您还应该 grep 查找并记下 apache2 目录结构之外的任何“include”指令。

为此,您可以尝试获取打开的文件列表apache2ctl -t以检查配置,如下所示:

APACHE_HTTPD='ltrace -s4096 -e open@libapr* apache2' apache2ctl -t 2>&1 |
  cut -d\" -sf2 |
  grep -v /dev/ |
  sort -u |
  xargs -rd '\n' grep -i '^[[:space:]]*LoadModule'

相关内容