在 Debian 上,Nginx 的日志(通常是 /var/log/nginx/access.log 和 error.log)本身是按时间顺序写入的,但如果你需要对日志进行排序、分析或按时间/字段整理,可以用下面几种常见方式。
Nginx 日志默认就是按时间顺序写入的,例如:
192.168.1.10 - - [10/Jan/2026:10:01:02 +0800] "GET / HTTP/1.1" 200 ...
192.168.1.10 - - [10/Jan/2026:10:01:05 +0800] "GET /index.html HTTP/1.1" 200 ...
✅ 一般不需要额外排序
Nginx 默认日志时间格式是:
[10/Jan/2026:10:01:02 +0800]
使用 sort:
sort -t'[' -k2 /var/log/nginx/access.log
解释:
-t'[':以 [ 作为分隔符-k2:按第二部分(时间)排序如果日志被合并或打乱:
sort -k4,5 /var/log/nginx/access.log
sort -k1,1 /var/log/nginx/access.log
或去重统计:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
grep "10/Jan/2026" /var/log/nginx/access.log | sort
grep "10/Jan/2026:10:" /var/log/nginx/access.log
Debian 默认使用 logrotate,旧日志是 .gz:
zcat /var/log/nginx/access.log.1.gz | sort -t'[' -k2
多个日志合并排序:
zcat /var/log/nginx/access.log.*.gz | cat - /var/log/nginx/access.log | sort -t'[' -k2
goaccess(强烈推荐)如果你是想可视化排序分析:
sudo apt install goaccess
goaccess /var/log/nginx/access.log -c
或生成 HTML 报告:
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
| 需求 | 命令 |
|---|---|
| 按时间排序 | sort -t'[' -k2 access.log |
| 按 IP 排序 | sort -k1 access.log |
| 统计访问 IP | awk + sort + uniq -c |
| 查看某天日志 | grep "10/Jan/2026" |
| 分析日志 | goaccess |
如果你愿意,可以把你的 Nginx 日志格式贴出来(nginx.conf 里的 log_format),我可以给你精确排序命令。