高效查看日志的常用命令详解
# 高效查看日志的常用命令详解
# 七种常见命令
- grep
- tail
- cat
- head
- more
- less
- zcat
| 命令 | 核心用途 | 适用场景 | 优点 | 缺点 | 典型用法示例 |
|---|---|---|---|---|---|
grep | 文本过滤/搜索 | 从日志中提取含关键词的行(如 ERROR、IP、ID) | 支持正则、可反向匹配、可统计、可高亮 | 本身不“浏览”文件,需配合其他命令 | grep -i "error" app.log,tail -f log | grep --line-buffered "Timeout" |
tail | 查看文件末尾内容 | 查看最新日志、实时监控(排障首选) | 支持 -f 实时跟踪、-F 防日志轮转 | 仅看末尾,无法回溯历史 | tail -n 100 app.log,tail -F /var/log/nginx/access.log |
cat | 全量输出文件内容 | 小文件(<1MB)快速查看 | 语法简单、输出完整 | 大文件会刷屏、卡终端、无分页 | cat config.log |
head | 查看文件开头内容 | 快速预览日志格式、起始时间等 | 简单快速 | 日常排障使用频率低 | head -n 5 app.log |
more | 基础分页查看 | 在老旧系统或简单分页需求下使用 | 比 cat 更可控 | 不能向上滚动,功能有限 | more large.log |
less | 高级分页浏览 | 大日志文件深度分析(推荐工具) | 支持搜索、跳转、上下滚动、不加载全文件 | 学习少量快捷键 | less error.log → /Exception 搜索 G 跳尾,g 跳首,q 退出 |
zcat | 查看 gzip 压缩日志 | 查看 .gz 结尾的历史日志(无需解压) | 直接读取压缩文件,节省空间和时间 | 仅支持 gzip 格式(.gz) | zcat app.log.1.gz | grep "ERROR",zcat *.gz | less |
使用建议总结:
- 实时监控:
tail -F+grep - 深度分析:
less(支持搜索和导航) - 压缩日志:
zcat或zgrep(如zgrep "ERROR" app.log.*.gz) - 快速过滤:
grep(配合-i,-v,-A/B/C,-E) - 避免滥用:
cat仅用于小文件;more已被less取代
组合示例
# 实时看错误
tail -F app.log | grep --line-buffered -i "error"
# 查看压缩日志中的异常
zcat app.log.2025-12-01.gz | less
# 全局搜索某关键词(含压缩包)
zgrep -r "user_id=123" /var/log/app/
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 1、grep 指令解析
# 基础语法
- 默认:区分大小写
- 输出:包含匹配内容的整行
grep [选项] '匹配模式' 文件...
# 示例
grep "error" /var/log/syslog
1
2
3
4
2
3
4
# 高频必备选项
| 选项 | 作用 | 示例 |
|---|---|---|
-i | 忽略大小写 | grep -i "error" log.txt |
-v | 反向匹配(显示不匹配的行) | grep -v "DEBUG" app.log |
-n | 显示行号 | grep -n "timeout" error.log |
-r / -R | 递归搜索目录(-R 会跳过二进制文件警告) | grep -r "TODO" ./src/ |
-l | 只输出匹配的文件名(不显示内容) | grep -l "main" *.c |
-c | 统计匹配行数 | grep -c "ERROR" app.log |
-E | 启用扩展正则表达式(等价于 egrep) | `grep -E "404 |
-w | 全词匹配(避免匹配子串) | grep -w "log" file.txt(不匹配 "login") |
-A N | 显示匹配行之后 N 行 | grep -A 2 "Exception" log.txt |
-B N | 显示匹配行之前 N 行 | grep -B 3 "Error" log.txt |
-C N | 显示匹配行前后各 N 行 | grep -C 1 "fail" log.txt |
组合技:grep -rnw "config" /etc/
- 在
/etc/中递归查找完整单词 "config" 并显示行号。
# 2、tail
# 命令格式
tail [参数] [文件]
1
# 常用参数
-f:持续跟踪文件新增内容(常用于实时监控日志)-F:比-f更健壮,即使文件被删除或重建,也能继续跟踪
-n <行数>:显示文件的尾部 n 行内容(默认为 10 行)-v:强制显示文件名标题,即使只查看一个文件(与-q相反)-q:不显示文件名标题(当同时查看多个文件时,抑制“==> filename <==”提示)-c <数目>:显示文件末尾的 指定字节数(适用于二进制文件或精确截取)--pid=PID(需与-f或-F合用):当指定的进程 PID 退出后,自动终止tail-s,--sleep-interval=S(需与-f或-F合用):设置 两次检查之间的休眠间隔(秒),默认为 1 秒。适用于高频率写入的日志,可降低 CPU 占用。
可利用 指令(> 或 >>)将输出重定向到新的文件,日志文件太大无法直接下载到时候,可能会用到
# 用法
可以用于实时监控日志变动
# 实时展示日志末尾内容,默认最后10行,相当于增加参数 -n 10(tail -f -n 10 server.log)
tail -f server.log
# 查看固定线程http-nio-8091-exec-7
tail -f server.log | grep 'http-nio-8091-exec-7'
# -C 选项来显示检索结果的【前后几行】,-A 选项展示检索结果【后几行】,-B选项展示检索结果【前几行】
tail -f server.log | grep -C 5 'http-nio-8091-exec-7'
# 同时查看多个日志但不显示文件头(便于脚本处理)
tail -q -n 10 *.log
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3、cat
# 命令格式
cat [参数] [文件]
1
# 常用参数
-n 或 --number:显示行号,对输出的每一行都加上行号。
-b 或 --number-nonblank:仅对非空行显示行号,空行不计数。
-s 或 --squeeze-blank:压缩连续的空白行,即相邻的空白行会被合并成一行。
-E 或 --show-ends:在每一行的末尾显示 $ 符号,用于标识行尾。
-T 或 --show-tabs:将制表符(tab)显示为 ^I,便于区分普通空格和制表符。
-A 或 --show-all:等同于 -vET 的组合,即显示控制字符(如退格符)、行尾 $ 符号以及将制表符显示为 ^I。
-v 或 --show-nonprinting:使用转义序列显示非打印字符,如控制字符。
> 文件名:重定向输出,将cat命令的输出内容写入到指定的文件中,而非打印到屏幕上。如果目标文件已存在,则会被覆盖。
>> 文件名:追加重定向,将cat命令的输出内容添加到指定文件的末尾,保留原有文件内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 用法
查看文件内容
# 最基本的用法是直接指定一个或多个文件名,cat 将依次读取并显示这些文件的内容:
cat file.txt
# 同时查看多个文件的内容:
cat file1.txt file2.txt file3.txt
# 显示行号
cat -n file.txt
# 作为数据流的一部分,`cat` 常与其他命令配合使用,如通过管道传递给 `grep` 命令进行内容搜索
cat -n file.txt | grep "search_pattern"
# 查看test.log前200行
cat test.log | head -n 200
# 查看test.log最后10行
cat test.log | tail -n 10
# 显示匹配的前后三行
cat access.log | grep "/v2/test" | grep "123456" -C 3
# 统计匹配行数
cat access.log | grep "/v2/batchGetDidStatus" | wc -l
cat http.log | grep -c '/getFileDownloadUrl'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
创建或合并文件
# 创建新文件并从键盘输入内容,按 `Ctrl+D` 结束输入
cat > new_file.txt
# 合并多个文件内容并保存到一个新的文件中
cat file1.txt file2.txt > combined_file.txt
# 追加一个或多个文件内容到已存在的文件末尾
cat file_to_append.txt >> existing_file.txt
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4、head
# 命令格式
head [参数] [文件]
1
# 常用参数
-q 隐藏文件名
-v 显示文件名
-c <数目> 显示的字节数
-n <行数> 显示的行数
1
2
3
4
2
3
4
# 用法
跟 tail 是相反的,head 是看前多少行日志
# 查询日志文件中的头10行日志
head -n 10 server.log
# 查询日志文件【除了】最后 10 行的其他所有日志
head -n -10 server.log
1
2
3
4
5
2
3
4
5
# 5、more
# 命令格式
more [参数] [文件]
1
# 常用参数
-d 或 --squeeze-blank:在显示多行空行时,将其压缩为一行。
-l 或 --lines=NUM:指定每屏显示的行数,默认值通常为系统设定的屏幕高度。
-f 或 --force:即使文件没有换行符(\n),也尝试逐行显示。
-p 或 --prompt:在每个屏幕底部显示提示信息,而不是默认的 --More--。
-c 或 --clear-screen:每次显示新屏幕前清屏。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 用法
more命令是一个简单的分页查看工具,适用于浏览长篇文本文件或命令输出。它允许用户逐屏查看内容,并提供了搜索、向上/向下滚动等功能。尽管功能相对有限,但对于大多数日常使用场景来说已经足够。- 在现代 Unix-like 系统中,
less命令提供了更多高级功能和更友好的交互方式,通常被视为more的增强替代品。不过,对于那些只需要基础分页浏览功能的用户而言,more命令依然不失为一个便捷的选择。
# 分页浏览文件内容
more 命令用于分页查看文件内容,一次显示一屏内容。当文件内容超过当前屏幕高度时,用户需要按下特定键来滚动查看后续内容。
基本用法如下:
more file.txt
1
在查看过程中,您可以使用以下按键进行操作:
空格键或回车键:向下滚动一屏内容。b或Ctrl+B:向上滚动一屏内容。/pattern:在文件中搜索指定的文本模式,按n键查找下一个匹配项,按N键查找上一个匹配项。q或Ctrl+C:退出more命令并返回到命令行。
# 控制每屏显示的行数
使用 -l 或 --lines 参数自定义每屏显示的行数:
more -l 50 file.txt
1
这将使 more 命令每屏显示 50 行内容。
# 合并并分页查看多个文件
more 命令可以接受多个文件作为参数,依次显示它们的内容:
more file1.txt file2.txt file3.txt
1
# 与管道结合使用
more 命令常用于接收其他命令的输出,通过管道 (|) 实现分页显示:
ls -l | more
1
在这个例子中,ls -l 命令列出当前目录下的详细文件信息,其输出通过管道传递给 more 命令进行分页显示。
# 6、less
# 安装
如果键入 less 指令的时候,显示下面的内容:
bash: less: command not found
1
则,需要安装 less 指令
# Ubuntu
apt-get install less
# CentOS
yum install less
# Docker
docker run cmd.cat/less less
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 命令格式
less [参数] 文件
1
# 常用选项
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 用法
# 查看文件内容
less test.log
1
2
2
在查看过程中,您可以使用以下按键进行操作:
上下方向键 或 j、k:向下或向上滚动一行。
空格键 或 PgDn:向下滚动一屏内容。
b 或 PgUp:向上滚动一屏内容。
G:跳转到文件末尾。
g 或 1G:跳转到文件开头。
/pattern:在文件中搜索指定的文本模式,按 n 键查找【下一个】匹配项,按 N 键查找【上一个】匹配项。
?pattern:在文件中反向搜索指定的文本模式,按 n 键查找【上一个】匹配项,按 N 键查找【下一个】匹配项。
h 或 ?:显示帮助信息。
q 或 Ctrl+C:退出 less 命令并返回到命令行。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 7、zcat 指令
介绍:
zcat是一个用于读取和显示 gzip 压缩文件内容的命令,无需解压即可查看原始文本内容。- 特别适合查看和搜索
.gz格式的日志文件 - 功能等价于:
gunzip -c - 输出的是解压后的内容,但不修改原文件
基本语法:
zcat [选项] 文件名.gz
用法分析:
# 搜索多个压缩日志中的关键词
zcat *.gz | grep "112233"
# 显示匹配行的前后几行
zcat access.log.2025-03-20.gz | grep -C 3 "error"
# 统计某错误出现次数
zcat *.gz | grep "Timeout" | wc -l
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 学习参考
上次更新: 2025/10/11 15:31:56