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

输出的时候,每个文件前面会带上文件名标签。我个人觉得这个功能特别实用,尤其是在微服务架构下。

注意: 多文件追踪时,如果某个文件被轮转(logrotate),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 的使用场景。你一看就明白。

tail 与 less 核心使用场景 日志查看需求 实时追踪 分页查看 tail -f 单文件 tail -f 多文件 less 基本查看 less +F 实时模式 选择建议 实时监控多服务 → tail -f 多文件 翻看历史日志 + 搜索 → 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% 的日志追踪问题。