Linux 查看日志常用命令

主要命令:cat、tac、more、less、tail、head、grep、awk、sed

大数据场景:YARN、Flink、Spark、Hadoop、keepalived 日志;排查报错、OOM、任务异常、数据倾斜。

日志常见目录参考:

  • YARN 容器日志:/var/log/hadoop-yarn/
  • 系统日志:/var/log/messages
  • 应用日志:/opt/xxx/logs/*.log

1、cat 一次性全部输出日志

复制代码
cat app.log
  • 特点:一次性把文件全部打印屏幕;大日志文件严禁直接 cat,刷屏,占满终端。

  • ✅适用:小文件,几十 KB 以内

  • ❌禁止:几个 GB 的日志直接 cat,终端卡死。

    只输出最后20行

    cat app.log | tail -20

2、tac 倒序输出(cat 反过来)

复制代码
tac app.log

从日志最后一行往第一行打印

场景:报错一般在日志末尾,想看最新日志,不想翻页;

小日志文件使用。

3、more 分页查看

复制代码
more app.log

操作按键:

  • 空格:下一页
  • Enter:下一行
  • q:退出 缺点:不能往回翻,只能往下翻。 适用:中等大小日志。

4、less【生产最推荐,神器】⭐

复制代码
less app.log

常用快捷键(非常实用)

按键 作用
空格 向下翻页
b 向上翻页
j / ↓ 向下一行
k / ↑ 向上一行
G 跳到日志最后一行(看最新日志)
g 跳到第一行
/Exception 向下搜索关键字 Exception,n 下一个匹配,N 上一个
?Error 向上搜索 Error
q 退出

✅真实场景:排查 Flink/Spark 任务本地日志,日志几个 GB,less 不会一次性加载全部文件,打开速度快。

进入 less 之后直接按大写G跳到末尾,然后/OOM搜索 OOM 关键字。

复制代码
# 直接打开并定位到最后
less +G app.log

5、tail 高频!看末尾日志,实时跟踪日志

① tail -n 查看末尾 N 行

复制代码
tail -n 100 app.log
# 简写
tail -100 app.log

✅场景:程序刚报错,看日志最后 100 行,找报错堆栈。

② tail -f 实时跟踪日志(流式输出)

复制代码
tail -f app.log

实时打印文件新增内容;窗口挂住,Ctrl+C 退出。

⚠️坑:日志文件被日志轮转 (logrotate) 重命名,tail‑f会继续读旧文件,看不到新日志。

③ tail -F 【生产优先用大写 F】

复制代码
tail -F app.log

-F = follow+retry。文件被轮转、删除,会自动跟踪新建同名日志文件。

✅真实场景:观察正在运行的 Flink TaskManager、YARN NM 实时日志,日志会切割轮转,一定要用 tail -F

示例:观察 yarn nodemanager 实时日志

复制代码
tail -F /var/log/hadoop-yarn/yarn-nodemanager.log

6、head 查看日志头部

复制代码
head -n 50 app.log

看日志前 50 行;一般用于看程序启动参数、版本信息。

7、grep 过滤关键字(排查报错核心)

复制代码
# 查找包含"Exception"行
grep "Exception" app.log

# -i 忽略大小写
grep -i "error" app.log

# -n 输出行号
grep -n "OOM" app.log

# -A  after:匹配行之后输出N行;报错堆栈要往后看几行!
grep -A20 "OutOfMemoryError" app.log

# -B before:匹配行之前输出N行
grep -B10 "OutOfMemoryError" app.log

# -C context:前后各输出N行
grep -C15 "OutOfMemoryError" app.log

# -v 反向过滤,排除某些日志
grep -v "INFO" app.log   #过滤掉INFO,只看WARN ERROR

✅真实场景:排查 Reduce OOM,找异常堆栈

复制代码
grep -A30 "java.lang.OutOfMemoryError" taskmanager.log

-A30:匹配到 OOM 那一行,额外打印后面 30 行,完整看到异常栈。

grep 多文件批量查找

复制代码
# 当前目录下所有.log文件搜索关键字
grep -i "OOM" *.log

8、组合使用,生产真实命令示例

示例 1:实时跟踪日志,同时过滤错误(tail+grep)

复制代码
tail -F app.log | grep -i error

实时输出,只打印 error 日志。

示例 2:大日志,把报错部分保存出来,方便分析

复制代码
grep -A50 "Exception" huge.log > error.log

把异常相关行输出到 error.log,下载分析,不用打开几个 G 大文件。

示例 3:查看 YARN 容器日志,只看 ERROR、忽略 INFO

复制代码
cat container.log | grep -v INFO

9、awk 统计日志、提取字段

场景:日志有固定格式,统计错误数、提取 IP、时间。

复制代码
#统计error出现多少次
grep -i "error" app.log | awk '{print $0}' | wc -l

10、sed 根据行号截取日志

大日志文件,已知报错在 12000‑13000 行,截取这一段

复制代码
sed -n '12000,13000p' app.log > part.log

✅场景:less 查到报错行号,sed 截取一小段,不用处理整个 GB 级日志。

真实排错场景速查表

场景 推荐命令 说明
GB 级别大日志文件,查找 OOM 异常 less +G xxx.log 然后 /OOM 不加载全量文件,速度快
实时观察正在运行服务日志(日志会轮转切割) tail -F xxx.log 不用 tail‑f,防止日志切割看不到新日志
找到 OOM 并且需要完整异常堆栈 grep -A30 "OutOfMemoryError" xxx.log -A 带出后面堆栈信息
只想看报错,过滤掉大量 INFO 日志 grep -v "INFO" xxx.log 过滤冗余正常日志
已知报错行号,截取一小段日志 sed -n '10000,10200p' xxx.log > temp.log 导出片段,方便分析
小日志快速看最新内容 `tac xxx.log head -50` 倒序输出最新 50 行

精简版

查看日志常用:

  1. cat 适合小文件;大文件禁止 cat。
  2. less 是大日志首选,可以上下翻页、搜索关键字,不会加载全部文件。
  3. tail‑n 看末尾行;tail‑f 实时跟踪,tail‑F 支持日志轮转,生产优先用大写 F
  4. grep 用来过滤关键字, -A/-B/-C可以打印匹配行前后日志,排查异常堆栈非常有用。
  5. sed 可以按行截取大日志片段,避免操作整个超大日志文件。

小坑提醒

  1. tail -f:日志文件被 logrotate 切割重命名后,依然读取旧句柄,看不到新日志;生产一律用 tail -F
  2. 几个 GB 日志不要 cat、不要直接 vi 打开,vi 会加载全部文件,机器卡顿。优先 less /sed/grep。
  3. grep 找异常一定要带上 -A,异常堆栈都在匹配行的后面。
相关推荐
handler011 小时前
【Linux】动态库、静态库使用与原理
linux·运维·服务器·c++·c·动态库·静态库
MSTcheng.1 小时前
【Linux学习】Linux学习第四弹——Linux基本指令3
linux·windows·学习·操作系统·指令
大模型丫丫1 小时前
LangGraph + MCP(Model Context Protocol)完整讲解
java·开发语言·数据库
lemon_sjdk1 小时前
JavaFX 源码深度剖析:揭开 StringBinding 的神秘面纱
java·javafx·源码解析·绑定框架
砚底藏山河2 小时前
拉数管道设计:从一次性脚本到可重启的数据流水线(魔码量化实战 #01)
java·数据库·python·金融·maven
筝筝ba2 小时前
OpenBMC 自动化测试中的多进程陷阱:从 Execute Process 返回异常到 output.xml 损坏问题分析
xml·linux·运维·服务器·网络
饕餮争锋2 小时前
PATH路径列表介绍
java·linux·服务器
V158897262012 小时前
从滴滴模式看机器人租赁:撮合型租赁平台开发源码的调度系统设计思路
linux·前端·机器人
SimonKing2 小时前
一文终结 Java 路径加载争议:斜杠 什么时候该加,什么时候不该加
java·后端·程序员