awk '{print $1}' nginx访问日志文件所在路径 | sort | uniq -c | sort -n -k 1 -r | head -n 100
比如:
cat /usr/local/nginx/log/nginx.access.log |awk '{print $1}'|sort|uniq -c|sort -n -k 1 |tail -n 100
或者:
awk '{print $1}' /usr/local/nginx/log/nginx.access.log |awk '{print $1}'| sort | uniq -c | sort -n -k 1 -r | head -n 100
nginx日志文件第一列为访问IP地址,用AWK截取出IP地址,然后用sort命令进行排序 sort命令会对每列第一个字符进行比较,如果相同则比较第二个字符,以此类推 排序之后用uniq命令进行IP数值统计,-c表示统计相同内容行出现的次数 -n表示根据字符串数值比较 -k 1表示对第一列进行排序 -r表示反序 排列后用head命令取前面100个IP,如果是后面100个就是tail -n 100
sort 将文件进行排序并输出sort(选项)(参数)
选项-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符; +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
uniq命令 用于报告或忽略文件中的重复行,一般与sort命令结合使用。 语法uniq(选项)(参数)
选项-c或——count:在每列旁边显示该行重复出现的次数;
-d或--repeated:仅显示重复出现的行列;
-f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
-s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
-u或——unique:仅显示出一次的行列;
-w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。
如果要对某个访问量过大的IP进行禁止访问,比如爬虫
在/usr/local/nginx/conf
目录下创建 black目录,然后创建blacklist.conf
文件 如下格式输入禁止访问的 IP deny 123.123.123.123 deny 125.125.125.125 然后在nginx.conf配置文件的http字段添加include black/blacklist.conf内容,重新加载nginx配置文件即可 systemctl reload nginx