4. tail 与 less 技巧:实时追踪日志、分页查看与多文件追踪
日志追踪,说白了就是跟系统“聊天”。你得知道它现在在干嘛,刚才发生了什么,几个文件之间有没有关联。我干了这么多年运维,最常用的两个工具就是 tail 和 less。别看它们简单,用好了,效率能翻倍。
今天咱们就聊聊这两个命令的实战技巧。嗯,这里要注意,不是光讲参数,我会把我在项目中踩过的坑也一并说出来。
4.1 实时追踪日志:tail -f 的进阶用法
tail -f 是运维的“心电图”。你想想看,服务一跑起来,日志刷刷地滚,你总得盯着点吧?
最基本的用法:
tail -f /var/log/nginx/access.log
但光这样还不够。我习惯加上几个参数,让输出更清爽。
| 参数 | 作用 | 我的习惯用法 |
|---|---|---|
-n 100 |
从倒数第100行开始显示 | 启动时先看尾巴,别从头刷 |
-f |
保持文件打开,持续追踪新内容 | 核心参数,必加 |
--pid=PID |
当指定进程退出时,自动停止追踪 | 配合脚本自动化时用 |
-s 2 |
每隔2秒检查一次文件变化 | 减少磁盘IO,服务器压力大时用 |
tail -n 200 -f。这样既能看最近的上下文,又能持续追踪。我曾经因为只用了 -f,结果错过了关键的错误栈,后来就养成了这个习惯。
4.1.1 多文件同时追踪
有时候,一个请求会经过好几个服务。比如前端 Nginx、后端 Tomcat、数据库 MySQL。你想同时看它们的日志,怎么办?
tail -f 支持多个文件:
tail -f /var/log/nginx/access.log /var/log/tomcat/catalina.out /var/log/mysql/error.log
输出的时候,每个文件前面会带上文件名标签。我个人觉得这个功能特别实用,尤其是在微服务架构下。
tail -f 可能会卡住。我曾经遇到过这个问题,排查了半天才发现是日志轮转导致的。解决方案是用 tail -F(大写F),它会跟踪文件描述符的变化,自动重新打开被轮转的文件。
4.2 日志分页查看:less 的实战技巧
less 是我最常用的日志查看器。它比 more 强太多,支持上下翻页、搜索、甚至还能实时查看。
基本用法:
less /var/log/syslog
进入 less 后,常用的快捷键:
| 快捷键 | 作用 |
|---|---|
j / k |
上下移动一行 |
Ctrl + F / B |
上下翻一页 |
/pattern |
向下搜索 pattern |
?pattern |
向上搜索 pattern |
n / N |
下一个/上一个匹配项 |
g / G |
跳到文件开头/结尾 |
F |
进入实时追踪模式(类似 tail -f) |
q |
退出 |
核心技巧: 用 less +F 可以替代 tail -f。而且 less 支持搜索,你可以在实时追踪时按 Ctrl + C 暂停,然后搜索关键字,再按 F 继续追踪。这个组合拳我每天都在用。
4.2.1 大文件处理
日志文件动不动就几个G。用 vim 打开?卡死。用 cat?刷屏。这时候 less 就是救星。
它不会一次性把文件全部加载到内存,而是按需读取。所以,哪怕文件有10G,也能秒开。
我建议你养成习惯:查看日志,优先用 less,而不是 vim 或 cat。
4.3 多文件同时追踪:组合拳
前面说了 tail -f 可以跟多个文件,less 也可以。但 less 的多文件模式更灵活。
less /var/log/nginx/access.log /var/log/nginx/error.log
进入 less 后,用 :n 切换到下一个文件,:p 切换到上一个文件。我个人觉得,如果你需要频繁切换查看,用 less 比 tail -f 更顺手。
但如果你需要同时看多个文件的实时输出,tail -f 更直观。所以,我的选择标准是:
- 实时监控多个服务 →
tail -f file1 file2 - 翻看历史日志,偶尔切文件 →
less file1 file2 - 既要实时,又要搜索 →
less +F或tail -f | less
tail -f 同时追踪了5个文件,结果终端窗口太小,文件名标签和日志内容混在一起,根本看不清。后来我改用 multitail 或者 tmux 分屏,每个窗口只追踪一个文件,清爽多了。如果你也遇到这个问题,不妨试试分屏方案。
4.4 知识体系:tail 与 less 的核心逻辑
下面这张图,是我自己总结的 tail 和 less 的使用场景。你一看就明白。
4.5 实战案例:排查一次接口超时
光说不练假把式。我讲一个真实案例。
有一次,线上反馈某个接口响应很慢。我首先用 tail -f 同时追踪 Nginx 和 Tomcat 的日志:
tail -f /var/log/nginx/access.log /var/log/tomcat/catalina.out
然后我模拟请求。看到 Nginx 日志里返回了 200,但耗时是 5 秒。Tomcat 日志里也打印了对应的请求,但没看到明显的错误。
这时候,我切换到 less 查看 Tomcat 的完整日志:
less /var/log/tomcat/catalina.out
用 /timeout 搜索关键字,发现数据库连接池超时了。嗯,问题找到了。
整个过程,我用了 tail -f 做实时监控,用 less 做深度搜索。两个工具配合,效率很高。
tail -f 追踪日志,记得在排查完后按 Ctrl + C 退出。我见过有人开着终端跑了一整天,日志刷了几十万行,最后终端卡死了。
4.6 总结
tail 和 less 是日志分析的左膀右臂。一个负责实时,一个负责翻查。你不需要记住所有参数,但一定要记住它们的核心用法和适用场景。
我个人建议,把 tail -F 和 less +F 这两个命令刻在脑子里。它们能帮你解决 80% 的日志追踪问题。