/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
在后端开发中,我们经常需要直接在 Linux 服务器上查看日志、搜索关键字、定位配置文件。尤其是 Spring Boot 项目出现异常时,熟练使用文本处理和文件查找命令,可以帮助我们快速定位问题。
这一篇介绍 cat、less、head、tail、grep、find、wc,以及管道和重定向的基本用法。

1. 查看文件内容:cat
cat(Concatenate)可以读取并输出文件内容,适合查看较短的文本文件。
# 查看文件内容
cat app.log
# 同时查看多个文件
cat file1.txt file2.txt
# 显示行号
cat -n app.log
如果日志文件很大,不建议直接使用 cat,因为内容会连续输出到终端,不方便翻页和定位。这时可以使用 less。
2. 分页查看文件:less
less 可以分页查看大文件,并支持搜索和上下翻页。
less app.log
进入 less 后,常用按键如下:
| Space | 向下翻一页 |
| b | 向上翻一页 |
| ↑ / ↓ | 上下移动一行 |
| /关键字 | 从当前位置向下搜索 |
| ?关键字 | 从当前位置向上搜索 |
| n | 跳到下一个匹配项 |
| N | 跳到上一个匹配项 |
| g | 跳到文件开头 |
| G | 跳到文件末尾 |
| q | 退出 |
例如,进入日志后输入 /ERROR,就可以搜索错误日志,再按 n 查看下一个匹配位置。
3. 查看文件开头和末尾:head、tail
如果只想查看文件的一部分,可以使用 head 和 tail。
# 查看文件开头,默认 10 行
head app.log
# 查看开头 20 行
head -n 20 app.log
# 查看文件末尾,默认 10 行
tail app.log
# 查看末尾 100 行
tail -n 100 app.log
# 实时跟踪日志新增内容
tail -f app.log
其中 tail -f 在后端开发中非常常用。启动 Spring Boot 服务后,可以通过它实时观察日志输出。
如果日志文件可能被日志轮转机制替换,可以考虑使用 tail -F app.log,它会持续尝试重新打开对应文件。
4. 搜索关键字:grep
grep 用于在文件内容中搜索匹配指定模式的行,支持普通字符串和正则表达式。
# 搜索包含 ERROR 的行
grep "ERROR" app.log
# 忽略大小写
grep -i "error" app.log
# 显示匹配行的行号
grep -n "ERROR" app.log
# 统计匹配的行数
grep -c "ERROR" app.log
# 显示匹配行以及前后各 3 行
grep -C 3 "NullPointerException" app.log
# 只显示不匹配的行
grep -v "INFO" app.log
常用选项:
| -i | 忽略大小写 |
| -n | 显示行号 |
| -c | 统计匹配行数 |
| -v | 反向匹配,显示不包含匹配内容的行 |
| -C 3 | 显示匹配行及其前后各 3 行 |
| -A 3 | 显示匹配行及其后 3 行 |
| -B 3 | 显示匹配行及其前 3 行 |
| -E | 使用扩展正则表达式 |
例如,排查异常时可以执行:
grep -n -C 3 "Exception" app.log
这样不仅能找到异常所在行,还能看到附近的上下文。
5. 查找文件:find
find 用于按照文件名、类型、大小、修改时间等条件查找文件或目录。
# 在当前目录及子目录中查找指定文件名
find . -name "app.log"
# 忽略大小写查找
find . -iname "app.log"
# 查找所有 .log 文件
find /var/log -type f -name "*.log"
# 只查找目录
find . -type d -name "logs"
# 查找大于 100MB 的文件
find /var/log -type f -size +100M
# 查找最近 7 天内修改过的文件
find . -type f -mtime -7
常用条件:
| -name | 按名称匹配,区分大小写 |
| -iname | 按名称匹配,不区分大小写 |
| -type f | 只查找普通文件 |
| -type d | 只查找目录 |
| -size +100M | 查找大于 100MB 的文件 |
| -mtime -7 | 查找最近 7 天内修改过的文件 |
注意:find 后面的起始路径决定搜索范围。例如 find . 表示从当前目录开始搜索,find /var/log 表示从 /var/log 开始搜索。
6. 统计文件内容:wc
wc(Word Count)可以统计文件的行数、单词数和字节数。
# 统计行数、单词数和字节数
wc app.log
# 只统计行数
wc -l app.log
# 只统计单词数
wc -w app.log
# 只统计字节数
wc -c app.log
例如,统计日志中有多少行包含 ERROR:
grep "ERROR" app.log | wc -l
7. 管道和重定向:把命令组合起来
Linux 命令的强大之处,在于可以将多个命令组合使用。
管道 |:把前一个命令的标准输出,作为后一个命令的标准输入。
# 搜索 ERROR,并统计匹配行数
grep "ERROR" app.log | wc -l
# 查看日志中最新的 20 条 ERROR
grep "ERROR" app.log | tail -n 20
重定向 > 和 >>:将命令输出写入文件。
# 将搜索结果写入 error.log,覆盖原内容
grep "ERROR" app.log > error.log
# 将搜索结果追加到 error.log 末尾
grep "WARN" app.log >> error.log
需要注意:
- > 会覆盖目标文件原有内容。
- >> 会追加到目标文件末尾。
- | 传递的是命令输出,不是把前一个命令的结果保存成文件。
8. 实战:快速定位 Spring Boot 异常日志
假设 Spring Boot 项目的日志位于 /opt/app/logs/app.log,现在接口出现异常,需要定位 NullPointerException。
可以按下面步骤排查:
# 1. 找到日志文件
find /opt/app -type f -name "*.log"
# 2. 实时查看日志
tail -f /opt/app/logs/app.log
# 3. 搜索异常关键字并显示行号
grep -n "NullPointerException" /opt/app/logs/app.log
# 4. 查看异常前后各 3 行
grep -n -C 3 "NullPointerException" /opt/app/logs/app.log
# 5. 统计日志中 ERROR 的数量
grep -c "ERROR" /opt/app/logs/app.log
# 6. 将异常日志提取到单独文件
grep -n "Exception" /opt/app/logs/app.log > exception.log
实际排查时,通常先通过 tail -f 观察最新日志,再用 grep 搜索关键字,最后结合上下文判断异常原因。
9. 常见注意事项
- 查看小文件可以使用 cat,查看大文件优先使用 less。
- tail -f 适合实时观察日志,但不会自动帮你分析异常。
- grep 搜索的是文件内容,find 查找的是文件或目录,两者用途不同。
- 使用 > 时要小心,它会覆盖目标文件。
- 在生产环境执行 find / 等全盘搜索可能耗时较长,建议尽量缩小搜索目录。
总结
Linux 中常用的文本处理与文件查找命令:
| cat | 输出文件内容 |
| less | 分页查看文件 |
| head | 查看文件开头 |
| tail | 查看文件末尾、跟踪日志 |
| grep | 搜索文本内容 |
| find | 按条件查找文件和目录 |
| wc | 统计行数、单词数和字节数 |
| ` | ` |
| > / >> | 覆盖或追加写入文件 |
对于后端开发来说,tail、grep、find 和管道组合尤其重要。熟练使用它们,就能在没有 IDE 的 Linux 服务器上完成很多日志定位和文件排查工作。




