Linux 新手入门:用 grep 在日志里把报错找出来

举报
yd_292135771 发表于 2026/11/08 09:42:52 2026/11/08
【摘要】 前面几篇学会了看服务状态、发请求、查磁盘,接下来最常用的一招,是在日志里找报错。服务出问题时,日志往往已经把原因写下来了,关键是你得会把它翻出来——grep 就是干这个的。先看最简单的用法,在一个文件里找包含某个词的行:grep "error" /var/log/sysloggrep 后面跟要找的词,再跟文件名,命中的行会原样打印出来。词要加引号,里面有空格或特殊字符也不会被拆散。找不到东西...

前面几篇学会了看服务状态、发请求、查磁盘,接下来最常用的一招,是在日志里找报错。服务出问题时,日志往往已经把原因写下来了,关键是你得会把它翻出来——grep 就是干这个的。

先看最简单的用法,在一个文件里找包含某个词的行:

grep "error" /var/log/syslog

grep 后面跟要找的词,再跟文件名,命中的行会原样打印出来。词要加引号,里面有空格或特殊字符也不会被拆散。找不到东西时它什么也不输出,先别急着下结论,可能是词写错了,也可能是日志根本不在这个文件里。

报错的写法五花八门,error、Error、ERROR 可能同时出现。加 -i 忽略大小写,一次全找出来:

grep -i "error" /var/log/syslog

只想知道有没有、而不想看全文时,加 -c 只数行数:

grep -c -i "error" /var/log/syslog

数字是 0,说明这个文件里确实没有;数字突然比平时大很多,说明出问题的时间点就在附近。先数数、再细看,是个省时间的好习惯。

日志里真正有用的往往不是报错本身,而是它前后发生了什么。-B 2 显示命中行前面的 2 行,-A 2 显示后面的 2 行:

grep -i -B 2 -A 2 "error" /var/log/syslog

这样能看到报错前系统在做什么、报错后服务又做了什么,定位比只看一行准得多。两个选项可以只用一个,也可以一起用。

很多时候要找的不是一个词,而是一类东西。比如只看某个服务的记录,用它的名字过滤:

grep "nginx" /var/log/syslog

再比如把两个条件叠起来:先找出今天的,再在里面找报错。管道可以把两次过滤串起来:

grep "Nov 8" /var/log/syslog | grep -i "error"

前一个 grep 的输出直接变成后一个的输入,不用先存中间文件。排查时这类组合很常见:先按时间或服务名缩小范围,再按报错词精确定位。

还有两个新手容易踩的坑。第一,grep 默认只在单个文件里找,目录下的日志是按日期分开的,一个个翻很慢——加 -r 可以递归搜整个目录:

grep -r -i "error" /var/log/

第二,有些日志文件很大,直接搜会等很久,先用 tail 只看最后几百行,再在里面找:

tail -n 200 /var/log/syslog | grep -i "error"

服务刚出问题时,答案基本都在日志的最后一段里,没必要从头翻起。

总结一下排查顺序:先用 grep -i 找报错词,再用 -B、-A 看上下文,范围太大就用管道两次过滤或 tail 先截尾。配合前面学过的 systemctl 看状态、journalctl 看服务日志,报错从哪来、发生前发生了什么,基本就能拼出一幅完整的图。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。