Apache日志/ Grep命令帮助需要

我需要能够查看某个IP在某一天发出的所有请求。

我不熟悉grep,想知道是否有人可以帮我一把。

无论如何,我可以将search结果限制在特定的一天吗?

我喜欢awk这样的问题; 您可以在一个命令中匹配多个字段。 如果我们假定您使用的是标准的Apache日志格式,则字段1是IP地址,字段5是访问date:

$ awk '$1 ~ /8\.8\.8\.8/ && $4 ~ /15\/Dec\/2009/ { print }' /var/log/apache2/access.log 

awk处理一个文件中的每一行,并将其分割成名为$1$2variables。 您可以将它们与$2 ~ /REGEX/语法进行匹配,并且可以匹配多个字段。

Apache以荒谬的DD / Mon / YYYY格式存储date,因此您需要转义/字符,这会使匹配date稍微笨拙。

一个单独的{ print }将打印整行(awk也知道这是$0 )。 如果您只想发出特定的字段,可以将其添加到打印语句中。 如果你只想打印请求的URI,你可以这样做:

 $ awk '$1 ~ /8\.8\.8\.8/ && $4 ~ /15\/Dec\/2009/ { print $7 }' /var/log/apache2/access.log 

由于请求URI是日志中的字段7。

假设您的日志位于/var/log/apache2/access.log并假定您的Apache日志是通用或组合格式:

 $ grep "^w\.x\.y\.z" /var/log/apache2/access.log 

例如search127.0.0.1

 $ grep "^127\.0\.0\.1" /var/log/apache2/access.log 

作为上述答案的替代,没有“复杂性”(对于某些)的正则expression式。

我首先检查(尾)日志文件的date格式,如下所示:

 tail filename 127.0.0.1 - - [31/Jan/2017:18:33:08 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:09 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:12 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:13 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:14 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:15 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:16 +0100] "OPTIONS * HTTP/1.0" 200 155 127.0.0.1 - - [31/Jan/2017:18:33:17 +0100] "OPTIONS * HTTP/1.0" 200 155 

然后我简单地复制/粘贴date作为一个文字string,如下所示:

 grep "31/Jan/2017" file | grep 127.0.0.1 

或者,有时我需要缩小到一小时,所以我只是复制它的时间:

 grep "31/Jan/2017:18" file | grep 127.0.0.1