sort 和 uniq 命令这两个工具组合在一起,能将杂乱无章的日志文件转化为清晰可读的分析统计,帮你快速发现问题的核心。
sort
uniq
要理解它们的强大之处,关键在于掌握以下几点:
sort 文件名 | uniq -c
uniq -c
sort -rn
下面是 sort 和 uniq 最实用的一些选项:
-n
-r
-u
sort | uniq
-k
sort -k2
-c
-d
-i
分析 SSH 暴力破解:从安全日志 /var/log/auth.log 中找出尝试登录失败最多的 IP。
/var/log/auth.log
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn
统计 Web 服务状态:快速汇总 Nginx 访问日志 /var/log/nginx/access.log 中的 HTTP 状态码(如 200、404、500),以评估服务健康状况。
/var/log/nginx/access.log
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
审计高频命令:分析你的 ~/.bash_history 文件,看看自己最常用的命令是哪些。
~/.bash_history
history | awk '{print $2}' | sort | uniq -c | sort -rn
移除文件重复行:快速、简单地清理文本文件中的重复行。
sort -u 输入文件 > 输出文件
定位异常模式:在日志中找出完全相同的、重复出现的请求或记录,常用来发现爬虫或异常流量。
sort 日志文件 | uniq -d
从单个管道开始验证:构建复杂命令时,建议从第一个管道 grep 或 awk 开始,确认输出正确后再逐步添加后续管道,这能快速定位问题。
grep
awk
养成事后检查习惯:使用 -c 统计时,所有行的计数之和应等于原始文件的总行数,你可以用 wc -l 命令来验证,确保统计无误。
wc -l
进阶:处理超大文件:如果你的日志文件非常大(例如 GB 级别),可以先使用 split 命令分块处理,或者用临时文件保存中间结果以提升处理效率。
split
进阶:多维排序:如果需要在按计数排序的同时,对相同计数的条目进行字母排序,可以解锁更精细的分析维度。
... | sort -t' ' -k1,1rn -k2
参数解释:-t' ' 指定以空格作为列分隔符;-k1,1rn 指定以第一列为排序依据,rn 表示数值降序;-k2 指定当第一列相同时,按第二列字母顺序排序,以此类推。
-t' '
-k1,1rn
rn
-k2