取得特定日期(2月28日)的日志,请求次数排名前10的ip
[root@VM_206_197_centos nginx]# awk '$4 ~ /^\[28\/Feb\/2016/' access.log.20160227 |cut -d ' ' -f1 |sort |uniq -c |sort -nr |head -10
799 61.51.185.242
598 101.39.6.9
567 115.29.113.101
567 115.28.203.70
567 112.124.127.44
566 121.41.117.242
118 113.46.133.64
110 223.21.157.181
106 222.129.188.20
99 101.39.58.243
分析如下:
awk '$4 ~ /^\[28\/Feb\/2016/' access.log.20160227 awk默认是根据空格对一行进行分割,$4是得到分割后的第四个,即日期部分比如[28/Feb/2016:00:00:02,根据正则表达式,得到日期部分匹配2016年2月28日的全部记录。
cut -d ' ' -f1对于全部记录,按照空格,得到ip地址。
sort是根据全部行进行排序,因为取得都是ip,根据ip排序后,一样的ip就临近在一起了。
uniq -c是根据全部行去重,前提是重复记录要相邻,前一个命令sort即是做这个的。
sort -nr是根据全部的行,进行排序,-n是表示根据数字排序,-r是倒序。
head -10是取前十名。
上面命令执行后,得到了前10的ip,查旬排名第一的ip的全部799个请求
awk '$4 ~ /^\[28\/Feb\/2016/' access.log.20160227 |awk '$1 ~ /^61.51.185.242/‘
[root@VM_206_197_centos nginx]# awk '$4 ~ /^\[28\/Feb\/2016/' access.log.20160227 |cut -d ' ' -f1 |sort |uniq -c |sort -nr |head -10
799 61.51.185.242
598 101.39.6.9
567 115.29.113.101
567 115.28.203.70
567 112.124.127.44
566 121.41.117.242
118 113.46.133.64
110 223.21.157.181
106 222.129.188.20
99 101.39.58.243
分析如下:
awk '$4 ~ /^\[28\/Feb\/2016/' access.log.20160227 awk默认是根据空格对一行进行分割,$4是得到分割后的第四个,即日期部分比如[28/Feb/2016:00:00:02,根据正则表达式,得到日期部分匹配2016年2月28日的全部记录。
cut -d ' ' -f1对于全部记录,按照空格,得到ip地址。
sort是根据全部行进行排序,因为取得都是ip,根据ip排序后,一样的ip就临近在一起了。
uniq -c是根据全部行去重,前提是重复记录要相邻,前一个命令sort即是做这个的。
sort -nr是根据全部的行,进行排序,-n是表示根据数字排序,-r是倒序。
head -10是取前十名。
上面命令执行后,得到了前10的ip,查旬排名第一的ip的全部799个请求
awk '$4 ~ /^\[28\/Feb\/2016/' access.log.20160227 |awk '$1 ~ /^61.51.185.242/‘
根据状态码进行请求次数排序
cat access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -nr
awk '{print $9}' access.log | sort | uniq -c | sort -nr
上例显示有404请求,接下来是如何找到这些请求的URL
awk '($9 ~ /404/)' access.log | awk '{print $7}' | sort | uniq -c | sort -r
请求指定url的全部ip地址
awk -F\" '($2 ~ "/wp-admin/install.php"){print $1}' access.log | awk '{print $1}' | sort | uniq -c | sort -r
URL的请求数顺序,可以打出前10名
awk -F\" '{print $2}' access.log |awk '{print $2}'|sort|uniq -c|sort -nr|head -n 10
url包含xyz
awk -F\" '($2 ~ "ref"){print $2}' access.log | awk '{print $2}' | sort | uniq -c | sort -r