Linux查看日志最常用高效方式是tail+grep+awk组合:tail实时跟踪(如tail -f /var/log/syslog),grep条件筛选(如grep "Failed password"),awk提取字段(如awk '{print $1,$7,$9}'),三者管道串联可精准定位问题、过滤噪音、提取关键信息。

Linux 查看日志最常用、最高效的方式,就是 tail + grep + awk 这个组合。它不依赖图形界面,适合服务器环境,能快速定位问题、过滤噪音、提取关键字段。
实时跟踪最新日志(tail -f)
服务正在运行时想看新产生的日志,用 tail -f 最直接:
-
tail -f /var/log/syslog—— Ubuntu/Debian 系统的综合日志 -
tail -f /var/log/messages—— CentOS/RHEL 的系统消息日志 -
tail -f /var/log/nginx/access.log—— 实时观察 Nginx 访问请求
按 Ctrl+C 可退出跟踪。加 -n 50(如 tail -n 50 -f)可先显示最近 50 行再持续追加。
带条件筛选日志行(grep 配合 tail 或 cat)
光看最新几行不够?需要找特定内容,比如错误、某个 IP 或接口路径:
-
tail -n 200 /var/log/auth.log | grep "Failed password"—— 查最近 200 行中的登录失败记录 -
grep "500" /var/log/nginx/error.log | tail -n 10—— 找出所有 500 错误,再取最后 10 条 -
zgrep "Connection refused" /var/log/syslog.1.gz—— 直接搜索压缩过的旧日志(需 gzip 支持)
加 -i 忽略大小写,-v 反向匹配(排除某类日志),--color=always 让关键词高亮更醒目。
提取结构化字段(awk 拆解日志列)
很多日志是空格或空格+括号分隔的(如 Nginx access.log、systemd journal 输出),awk 能精准取字段:
-
awk '{print $1, $7, $9}' /var/log/nginx/access.log—— 提取 IP、请求路径、状态码(默认空格分隔) -
journalctl -u nginx | awk -F' ' '{print $1,$2,$3,$NF}'—— 用空格切分 systemd 日志,打印时间+最后一列(通常是状态) -
awk -F'\\[|\\]|"' '/ERROR/ {print $2, $4}' app.log—— 自定义分隔符(中括号和引号),提取 ERROR 行里的时间和模块名
注意:字段编号从 $1 开始;$NF 表示最后一列;正则匹配用 /pattern/ 包裹。
三者串联,解决典型排查场景
实际排障中,往往一步到位组合使用:
- 查某 IP 最近 10 次 404 请求:
tail -n 500 /var/log/nginx/access.log | grep "192.168.1.100" | grep "404" | awk '{print $7}' | head -n 10 - 看 Python 应用报错堆栈的最后一段(含文件名和行号):
tail -n 300 app.log | grep -A 5 "Exception\|Traceback" | awk -F':| ' '/py:/ {print $1 ":" $2}' | tail -n 3 - 统计每分钟访问量(假设第一列是 [12/Jan/2024:14:23:05):
awk '{print substr($4,2,15)}' access.log | sort | uniq -c | sort -nr | head -n 5
管道(|)是灵魂,把前一个命令输出变成后一个的输入,层层聚焦。
基本上就这些。不用记全参数,先掌握 tail -f、grep "关键词"、awk '{print $1,$3}' 这三个核心用法,再根据日志格式微调,就能覆盖 90% 的日常日志查看需求。










