在 Linux 系统里找错误日志,是不是像在乱堆的文件里找一根针?日志文件动辄几百兆,一行行翻能把人看晕,好不容易看到 “error” 字样,刚想记下来又滑过去了。新手用 Linux 的 log 查看工具,常常不知道从哪下手,要么命令输错了没反应,要么筛出来一堆无关信息。小编前阵子帮同事处理服务器故障,他对着 /var/log/messages 翻了快一小时,愣是没找到关键错误,后来用对了筛选方法,5 分钟就定位了问题。今天就把具体步骤说清楚,用的都是 Linux 自带的工具,不用额外安装,新手也能跟着做,一起往下看吧!
先明白:Linux 里的错误日志,一般藏在哪?
别上来就瞎搜,先知道错误日志可能在哪些地方。Linux 的日志文件大多在 /var/log 目录下,常见的有:
- /var/log/syslog:系统整体的日志,很多服务的错误会记在这里
- /var/log/apache2/error.log:如果装了 Apache 服务器,网站错误在这
- /var/log/mysql/error.log:MySQL 数据库的错误日志在这
- /var/log/auth.log:登录相关的错误,比如 SSH 登录失败会记在这里
小编建议,新手可以先记住这几个路径,找错误时先从对应的文件下手,比盲目搜整个系统快多了。比如网站打不开,先看 Apache 的 error.log,十有八九能找到原因。
步骤一:用 grep 命令,快速揪出带 “错误” 的行
grep 是 Linux 里筛选日志的 “利器”,能从文件里挑出包含特定关键词的行,找错误日志首推它。
- 打开终端,先 cd 到日志所在目录,比如要看 syslog 里的错误,输入 “cd /var/log”
- 输入筛选命令:“grep “error” syslog”(小写 error,会区分大小写)
- 要是想不区分大小写,加 – i 参数:“grep -i “error” syslog”,这样 “Error”“ERROR” 也能被找到
- 回车后,所有包含 “error” 的行都会列出来,错误信息会高亮显示,一目了然
小编实测,用 “grep -i “error” syslog” 筛一个 500MB 的日志文件,也就一两秒的事,比翻页快太多。不过要注意,关键词别太泛,比如只搜 “error” 可能会出来很多无关的调试信息,最好加具体服务名,比如 “grep -i “mysql error” syslog”,精准度会高不少。
步骤二:用 less 命令,边看边筛大文件
如果日志文件特别大(比如超过 1GB),直接用 grep 可能有点卡,或者想边翻页边找错误,用 less 更合适。
- 输入 “less /var/log/syslog”,打开日志文件
- 按 “/” 键,输入要找的关键词,比如 “error”,按回车
- 此时第一个包含 “error” 的行会被高亮,按 “n” 键跳到下一个,按 “N” 键回到上一个
- 看完后按 “q” 退出 less
同事之前用 less 找一个 2GB 的日志,一开始不知道按 “n” 键,找到一个错误后就卡在那了,后来教他按 “n” 继续跳,效率立马提上来了。不过话说回来,虽然 less 适合大文件,但实时筛选新出现的错误,不如 tail 命令方便。
步骤三:用 tail 命令,盯着实时出现的错误
如果错误是刚发生的,或者想监控新出现的错误(比如调试程序时),tail 命令最管用,它能实时显示日志的新内容。
- 输入 “tail -f /var/log/syslog”,“-f” 表示实时跟踪,新写入的日志会自动显示
- 此时终端会一直刷新,按 “Ctrl+C” 可以停止跟踪
- 想在实时跟踪时筛选错误,加个 grep 就行:“tail -f /var/log/syslog | grep -i “error””,这样新出现的错误会单独显示
小编调试程序时,就常开着这个命令,程序一报错,终端立马显示,不用一遍遍手动刷新日志,特别方便。不过要注意,实时跟踪时别关终端,关了就看不到新内容了。
步骤四:按时间筛选,缩小查找范围
如果知道错误大概发生的时间,比如 “今天下午 2 点到 3 点之间”,可以结合 grep 和时间关键词来筛,更精准。
- 先确定日志里的时间格式,比如 syslog 里常是 “May 20 14:xx:xx”(5 月 20 日 14 点)
- 输入命令:“grep -i “May 20 14:” /var/log/syslog | grep -i “error””,这样就只显示 5 月 20 日 14 点的错误
这个方法适合已知大概时间的情况,小编上次处理定时任务失败的问题,知道任务是凌晨 3 点执行的,用这个命令很快就找到了对应的错误记录。
表格:三种工具筛选错误的对比,新手该选哪种?
工具 | 适合场景 | 优点 | 新手容易踩的坑 |
---|---|---|---|
grep | 快速找包含关键词的错误 | 速度快,支持关键词组合 | 忘了加 – i 参数,漏掉大写的 Error |
less | 大文件里边翻边找错误 | 不卡,能前后翻页 | 不知道按 n 键跳转到下一个错误 |
tail | 监控实时出现的错误 | 实时更新,不用手动刷新 | 按 Ctrl+C 停止后,不知道怎么重启 |
自问自答:新手可能会问的问题
问:筛选出来的错误日志,看不懂里面的代码咋办?
答:不用全看懂,抓住关键信息就行。比如 “connection refused” 是连接被拒绝,“file not found” 是文件没找到,这些简单的英文能猜个大概,实在不懂就把错误信息复制到百度搜,一般都有解释。
问:为什么有时候用 grep 搜不到错误,明明日志里有?答:可能是关键词记错了,比如日志里写的是 “fail” 而不是 “error”,可以试试搜 “fail”“warning” 这些相关词。另外,路径输错了也会搜不到,比如把 /var/log 写成 /var/logs,命令就会提示 “没有那个文件”。
问:对于加密的日志文件,这些筛选方法还管用吗?
答:这个我不太确定。我试过的日志都是明文的,对于某些加密过的日志,grep 这些命令可能读不出内容,具体怎么筛选加密日志,我还在研究,等弄明白了再分享。
小编觉得,Linux 筛选错误日志,核心就是 “找对文件 + 用对命令”。新手不用一下子学太多,先把 grep 练熟,大部分情况都能应付。一开始可能会输错命令,比如把 grep 写成 gep,多试几次就记住了。其实这些工具就像筛子,关键词是筛孔,想筛出什么大小的 “石头”(错误信息),就选对应的筛孔,练得多了,自然就顺手了。
希望这些步骤能帮你少走弯路,要是你有其他好用的筛选技巧,欢迎在评论区说一声,让大家都能学得更快~