Linux 日志查看技巧:从 tail 到 journalctl 的实用入门
为什么要学会看日志
线上服务出问题时,第一反应往往是“去看日志”。日志是系统和应用留下的“黑匣子”记录:什么时候发生了什么、是谁触发的、错在哪里,答案大多藏在日志里。掌握几个核心命令,能让你在排障时少走很多弯路。
一、tail:只看最新内容
tail 默认显示文件最后 10 行,配合 -f 参数可以实时跟踪新写入的内容,这是排障时最常用的姿势:
查看文件末尾 20 行:tail -n 20 /var/log/syslog
实时跟踪日志输出,按 Ctrl+C 退出:tail -f /var/log/nginx/error.log
同时跟踪多个文件:tail -f /var/log/nginx/access.log /var/log/nginx/error.log
小技巧:-F(大写)比 -f 更“执着”,即使日志文件被轮转(rotate)重建,它也会继续跟踪新文件,适合长期观察。
二、less:交互式翻阅大文件
当日志文件有几百 MB 时,直接 cat 会刷屏。less 支持前后翻页和搜索:less /var/log/syslog。进入后常用按键:/ 输入关键字搜索、n 跳到下一个匹配、N 上一个、g 回到开头、G 跳到末尾、q 退出。加上 +F 参数,less 也能像 tail -f 一样实时跟踪:less +F /var/log/syslog,按 Ctrl+C 可切换回浏览模式。
三、grep:从海量日志里捞针
日志量大时,先过滤再查看,grep 的几个高频用法:
只看 ERROR 行并显示行号:grep -n "ERROR" app.log
忽略大小写并统计出现次数:grep -ci "timeout" app.log
看错误行及其前后 5 行上下文:grep -C 5 "ERROR" app.log
反向过滤,排除健康检查的心跳日志:grep -v "healthcheck" access.log | less
把 grep 和 tail -f 组合起来,就是实时错误监控:tail -f app.log | grep --line-buffered "ERROR"。
四、journalctl:systemd 时代的统一入口
现代 Linux 发行版大多用 systemd 管理服务,journalctl 可以查询所有服务的日志:
查看某个服务的日志:journalctl -u nginx.service
实时跟踪:journalctl -u nginx.service -f
只看今天的报错:journalctl -p err --since today
按时间倒序,先看最新的:journalctl -u docker.service -r
五、一个完整的排障小案例
假设网站突然返回 502,可以这样一步步缩小范围:第一步,tail -n 50 /var/log/nginx/error.log 看 Nginx 报了什么错;第二步,如果是上游超时,用 journalctl -u backend.service --since "10 minutes ago" 看后端服务最近的日志;第三步,用 grep -n "OutOfMemory" /var/log/syslog 确认是不是内存不足导致进程被杀;第四步,找到根因后,用 grep -C 10 把关键错误的前后上下文保存下来,方便复盘。
小结
想看最新内容用 tail -n/-f;文件太大用 less 翻页加搜索;日志太多用 grep 先过滤;systemd 服务用 journalctl -u/-f/-p。把这四个工具练熟,日常 80% 的日志排查场景都能覆盖。建议把常用组合记成 shell 别名,排障效率会再上一个台阶。
- 点赞
- 收藏
- 关注作者
评论(0)