一条命令即可统计访问量最高的IP:提取IP(awk)、去重计数(sort | uniq -c)、逆序排序(sort -nr)、取前10(head -n 10);支持压缩日志(zcat)、时间段筛选(grep或awk正则)、格式化输出(printf对齐)。

直接用一条命令就能快速拿到访问量最高的 IP 排行,核心是提取、去重、计数、排序四步。
基础统计:查访问最多的前10个IP
适用于标准日志格式(IP在每行第一个字段):
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
说明:
– $1 是默认 Combined Log 格式里的客户端IP;
– uniq -c 统计重复行并前置计数;
– sort -nr 按数字逆序排(最高在前);
– head -n 10 只取前十名。
处理压缩日志(.gz)
日志轮转后常为 gzip 压缩,无需解压到磁盘:
zcat /var/log/nginx/access.log.1.gz | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
注意:
– zcat 自动识别 .gz 后缀并流式解压;
– 多个压缩包可串联:zcat access.log.{1..5}.gz | ...;
– 若报错“no such file”,先用 ls /var/log/nginx/access.log*.gz 确认实际文件名。
按时间段筛选再统计
只看某天或某小时的热门IP,用 grep 预过滤时间字段:
grep '19/Mar/2026' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
更精确到小时(如上午9点):
awk '$4 ~ /\[19\/Mar\/2026:09:[0-5][0-9]:[0-5][0-9]/ {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
说明:
– 日志第4字段($4)是带方括号的时间戳;
– 正则匹配确保只抓 09:00:00 到 09:59:59 的请求;
– 时间格式需与日志一致(如时区、分隔符)。
输出带格式的可读结果
让结果更直观,加标签和对齐:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10 | awk '{printf "IP: %-15s 访问次数: %s\n", $2, $1}'
效果示例:
IP: 203.124.56.78 访问次数: 427
IP: 192.168.10.22 访问次数: 312
提示:
– %-15s 左对齐、占15字符宽,便于阅读;
– 可替换为 column -t 自动对齐,但需确保字段无空格干扰。











