tail -f 实时监控日志,less 回溯翻页;tail -f 卡住常因无新写入、权限不足或日志轮转,应改用 -f;less 搜索受限于缓存,可用 +g 加载全文或 -i 忽略大小写;排错动线为 tail 定位异常→less 查上下文→grep 关联日志。

查日志别硬翻,tail 和 less 各干各的活:实时看用 tail -f,回溯翻页用 less;混着用或强行 cat 大文件,八成卡死或漏关键行。
tail -f 为啥总卡住或没输出?
不是命令坏了,是日志没新内容写入、权限不够、或者文件被轮转(logrotate)后 tail 还盯在旧 inode 上。
- 确认日志正在写入:
ls -l /var/log/syslog看修改时间,再date对比 - 权限问题常见于
/var/log/audit/或容器内日志,用sudo tail -f /var/log/audit/audit.log - 轮转后失效:加
-F(大写 F)代替-f,它会自动跟踪新文件名(比如app.log.1→app.log) - 别用
tail -f | grep "ERROR"直接过滤——可能丢行,加--line-buffered或改用stdbuf -oL tail -f file | grep "ERROR"
less 查大日志时为啥按 G 跳不到底、/ 搜索失灵?
less 默认不加载全文件,而是边读边显示,所以“到底”只是当前已读部分的末尾;搜索也只在已缓存内容里生效。
- 打开就加载全部(慎用):
less +G /var/log/journal.log,+G 表示启动后跳末尾,但超大文件会卡住几秒到几十秒 - 搜索前先定位范围:用
g跳开头,G跳当前缓存末尾,50%跳中间,再/ERROR搜 - 大小写敏感默认开启,搜 ERROR 但日志写 error?加
-i:less -i /var/log/messages - 查看二进制或非 UTF-8 日志(如某些 Java 应用)会乱码,加
-r强制原样输出控制字符
tail 和 less 配合查错的实际动线
线上出问题,没人从头 cat 几百 MB 的日志。真实排错是“先瞄尾巴,再定点翻查,最后交叉验证”。
- 先
tail -n 50 /var/log/nginx/error.log看最近 50 行有没有明显报错(比如connect() failed) - 如果看到某条错误带时间戳
[2024-05-20T14:22:33],立刻less +/2024-05-20T14:22:33 /var/log/nginx/error.log定位上下文 - 发现疑似请求 ID
req_id=abc123,再用grep "abc123" /var/log/nginx/access.log | head -20关联访问日志 - 注意:
tail -f不支持反向搜索,less不能实时追加——别指望一个命令解决所有
真正麻烦的从来不是命令怎么敲,而是日志本身没开调试级别、时间没同步、多个服务日志混在一起又没打 tag。这些地方一塌糊涂,tail 和 less 再熟也没用。










