日志是排查系统问题、监控程序运行状态的核心依据。本文总结 Linux 环境下查看、过滤、分析日志的常用命令与技巧,涵盖基础查看、关键字搜索、实时监控等场景。
一、基础日志查看命令
适用于快速浏览日志内容,根据文件大小选择合适工具。
1. cat:直接输出完整日志
- 功能:一次性显示文件全部内容(适合 小文件,如几 KB~ 几十 MB)。
- 语法:
bash
cat [选项] 日志文件路径 - 常用选项:
-n:显示行号;-b:只给非空行显示行号。
- 示例:
bash
# 显示系统日志全部内容(带行号) cat -n /var/log/syslog # 显示 Nginx 访问日志前 5 行(结合 head 更高效) cat /var/log/nginx/access.log | head -n 5
2. head:查看日志开头部分
- 功能:默认显示文件前 10 行,适合查看日志初始化信息(如程序启动参数、配置加载日志)。
- 语法:
bash
head [-n 行数] 日志文件路径 - 示例:
bash
# 显示应用日志前 20 行 head -n 20 /var/log/application.log # 显示系统日志前 5 行(默认 10 行,可省略 -n) head -5 /var/log/messages
3. tail:查看日志结尾 / 实时监控
- 功能:默认显示文件最后 10 行,核心用于查看最新日志或 实时监控新增内容(如程序运行时的动态输出)。
- 语法:
bash
# 查看结尾 tail [-n 行数] 日志文件路径 # 实时监控(新增内容会动态输出) tail -f 日志文件路径 - 示例:
bash
# 显示 Nginx 错误日志最后 30 行 tail -n 30 /var/log/nginx/error.log # 实时监控应用日志(按 Ctrl+C 退出) tail -f /var/log/app/debug.log # 实时监控并过滤关键字(结合 grep,见下文) tail -f /var/log/syslog | grep -i "error"
4. more:简单分页查看
- 功能:按屏幕分页显示内容(适合 中小文件),支持逐页 / 逐行滚动。
- 语法:
bash
more 日志文件路径 - 操作快捷键:
- 空格:翻到下一页;
- Enter:向下滚动一行;
q:退出查看。
- 示例:
bash
# 分页查看用户登录日志 more /var/log/auth.log
5. less:高效分页与交互(大文件首选)
- 功能:按需加载内容(不一次性读取全文件),支持搜索、跳转行号,是 大文件(几百 MB~GB 级) 查看的最佳选择。
- 语法:
bash
less 日志文件路径 - 核心操作快捷键(进入
less后使用):操作 快捷键 下翻一页 PageDown 或空格键 上翻一页 PageUp 向下滚一行 ↓ 或 j 向上滚一行 ↑ 或 k 搜索关键字(向下) / 关键字 + Enter 搜索关键字(向上) ? 关键字 + Enter 跳转到下一个匹配 n 跳转到上一个匹配 N 跳转到文件开头 gg 跳转到文件末尾 G 跳转到第 N 行 N + G(如 100G 到 100 行) 退出 q - 示例:
bash
# 查看大型应用日志(支持中途搜索) less /var/log/huge_service.log
二、日志过滤与关键字搜索(grep)
grep 是日志分析的核心工具,用于从日志中精准定位包含特定关键字的内容。
基本语法
bash
grep [选项] "关键字" 日志文件路径
常用选项与场景
| 选项 | 功能描述 | 示例 | |
|---|---|---|---|
-i | 忽略大小写(匹配 Error/ERROR/error) | grep -i "error" /var/log/app.log | |
-n | 显示匹配行的行号 | grep -n "timeout" /var/log/syslog | |
-v | 反向过滤(排除包含关键字的行) | grep -v "debug" /var/log/app.log | |
-A N | 显示匹配行及之后 N 行(上下文) | grep -A 3 "failed" /var/log/auth.log(显示 failed 行及后 3 行) | |
-B N | 显示匹配行及之前 N 行 | grep -B 2 "500" /var/log/nginx/error.log | |
-C N | 显示匹配行及前后各 N 行 | grep -C 2 "warning" /var/log/messages | |
-E | 支持扩展正则(多关键字 “或” 逻辑) | `grep -E "error | warning"/var/log/syslog`(匹配 error 或 warning) |
进阶组合:多条件过滤
-
多关键字 “与” 逻辑:用管道
|组合多个grep,只保留同时满足所有条件的行。bash
# 查找包含 "error" 且包含 "2023-10-01" 的日志行 grep "error" /var/log/app.log | grep "2023-10-01" -
递归搜索目录下所有日志:用
-r选项搜索某个目录下所有文件中的关键字。bash
# 递归搜索 /var/log 目录下所有文件中包含 "database" 的行 grep -r "database" /var/log/
三、特殊场景处理
1. 处理包含特殊字符的关键字
如果关键字包含空格、引号或正则符号(如 . *),用双引号包裹即可:
bash
# 搜索包含 "failed to connect"(带空格)的行
grep "failed to connect" /var/log/network.log
# 搜索包含 "user=*"(带通配符)的行(需用 -F 关闭正则解析)
grep -F "user=*" /var/log/auth.log
2. 大日志文件高效分析
- 优先用
less打开(避免cat一次性加载导致卡顿); - 结合
grep先过滤再查看,减少数据量:bash
# 先过滤出包含 error 的行,再用 less 分页查看 grep "error" /var/log/huge.log | less
3. 按时间范围过滤日志
如果日志包含时间戳(如 2023-10-01 14:30:00),可结合 grep 或 sed 按时间筛选:
bash
# 查找 2023-10-01 14:00 到 15:00 之间的日志
grep "2023-10-01 14:" /var/log/app.log | grep -v "2023-10-01 14:00" # 排除 14:00 前的部分
四、常用命令速查表
| 需求场景 | 推荐命令 |
|---|---|
| 查看日志全部内容(小文件) | cat 日志文件 |
| 查看日志前 N 行 | head -n N 日志文件 |
| 查看日志最后 N 行 | tail -n N 日志文件 |
| 实时监控日志新增内容 | tail -f 日志文件 |
| 大文件分页 + 搜索 | less 日志文件(进入后用 / 搜索关键字) |
| 查找包含关键字的行 | grep "关键字" 日志文件 |
| 查找关键字并显示上下文 | grep -C 3 "关键字" 日志文件 |
| 排除包含关键字的行 | grep -v "关键字" 日志文件 |
通过以上命令组合,可高效处理绝大多数日志分析场景。根据日志大小、关键字复杂度选择合适工具,能显著提升问题排查效率。


4682

被折叠的 条评论
为什么被折叠?



