You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行grep搜索/var/log/syslog时提示“binary file matches”是否需要担忧?

执行grep搜索/var/log/syslog时提示“binary file matches”是否需要担忧?

我之前也碰到过一模一样的情况:想过滤syslog里EXT4相关的日志,结果执行命令后刚输出点内容就被提示是二进制文件了:

$ grep -E 'Sep.*EXT4' /var/log/syslog
[... some data ...]
grep: /var/log/syslog: binary file matches

一开始我尝试用cmp和strings工具排查,但这俩对UTF-8文本的支持不太好,结果不准。后来换了zgrep来定位非文本字符,终于找到问题所在:

$ \zgrep -C 2 -Pan '\x00' /var/log/syslog* |  cat -vET
/var/log/syslog.1-8236-Sep 23 11:59:12 jakub-Latitude-5431 rtkit-daemon[1824]: Successfully made thread 11652 of process 6125 owned by '1000' RT at priority 10.$
/var/log/syslog.1-8237-Sep 23 11:59:12 jakub-Latitude-5431 rtkit-daemon[1824]: Supervising 10 threads of 7 processes of 1 users.$
/var/log/syslog.1:8238:^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^...

你看,日志文件里出现了一大串^@,这其实就是空字节(null byte)——grep默认会把包含空字节这类非标准文本字符的文件判定为二进制文件,所以才会弹出那个提示。

那到底要不要担忧?

  • 如果只是偶尔出现一次这种情况,大概率是某个日志写入进程(比如syslog服务、或者当时正在打日志的rtkit-daemon这类进程)出现了短暂的异常,比如意外中断、写入时的小bug,导致误写入了一堆空字节到日志里,这种情况不用太紧张,后续日志应该会恢复正常,你可以继续观察几天。
  • 但如果频繁出现这种情况,那就要警惕了,可能是syslog服务(比如rsyslog、systemd-journald)本身有稳定性问题,或者系统里某个服务的日志模块存在异常写入的情况,这时候就需要针对性排查对应的服务状态了。

另外如果只是想继续过滤日志内容,不管它是不是二进制,可以给grep加-a参数,强制把文件当成文本处理:

grep -a -E 'Sep.*EXT4' /var/log/syslog

备注:内容来源于stack exchange,提问作者Jakub Bochenski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:53:09