是否有一个 shell 命令可以对通过 GET 请求特定文件(或来自 url)的所有最常见 IP 进行分组?
例如用这个命令我可以对来自 ip 的请求进行分组:
cat /usr/local/apache/logs/access_log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 20
通过这个我可以搜索“MYURL”
grep 'MYURL' /usr/local/apache/logs/access_log | sort -nr | uniq -c | sort -nr -k1 | tail -n 20
我需要将这 2 个命令放在一起并打印请求“MYURL”的最常见 IP,可以吗?
PS:如果使用的日志是“/usr/local/apache/logs/error_log”而不是“access_log”,那就太好了
答案1
您已经拥有所需的所有组件 - 我很惊讶您无法自己将它们组合起来。只需将第一个管道中的第一个命令更改为第二个管道开头的 grep 即可...
grep 'MYURL' /usr/local/apache/logs/access_log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 20
我不明白为什么你想要解析error_log
而不是access_log
这样——错误日志中的行不像访问日志那样结构化。
答案2
是的,只需用管道连接两者,然后删除不需要的部分,
类似这样的事情就可以了:
grep $MYURL /usr/local/apache/logs/access_log | awk '{print $1}' | sort -nu