Linux grepコマンドで「バイナリファイル (標準入力) に一致しました 」の対応

Linux
この記事は約7分で読めます。

ASUSルーター RT-AX56UのシステムログをSyslogサーバーとしても利用しているRaspberry Piに転送しています。

このログをgrepしたときに、「バイナリファイル (標準入力) に一致しました」と最終行に表示されました。

テキスト処理をするときに、この一行が表示されると非常に邪魔ですので、「バイナリファイル (標準入力) に一致しました」が表示されないようにしなければなりません。

英語表記だと、Binary file (standard input) matches です。

 

事象

こんな感じで表示されます。

pi@pi:/var/log$ cat /var/log/remote-syslog.1 | grep -i ntp
Oct 18 10:23:25 RT-AX56U ntp: start NTP update
Oct 18 22:23:23 RT-AX56U ntp: start NTP update
Oct 19 10:23:20 RT-AX56U ntp: start NTP update
Oct 19 22:23:18 RT-AX56U ntp: start NTP update
Oct 20 10:23:16 RT-AX56U ntp: start NTP update
Oct 20 22:23:14 RT-AX56U ntp: start NTP update
Oct 21 10:23:12 RT-AX56U ntp: start NTP update
バイナリファイル (標準入力) に一致しました
pi@pi:/var/log$ 

grepした結果をパイプで次のコマンドに渡す場合に邪魔です。

 

 

対応

grepのオプション a を使います。

-a は、バイナリファイルをテキストファイルとみなして処理します。
–binary-files=text オプションと同じ意味のようです。

知りませんでした。

pi@pi:/var/log$ cat /var/log/remote-syslog.1 | grep -ia ntp
Oct 18 10:23:25 RT-AX56U ntp: start NTP update
Oct 18 22:23:23 RT-AX56U ntp: start NTP update
Oct 19 10:23:20 RT-AX56U ntp: start NTP update
Oct 19 22:23:18 RT-AX56U ntp: start NTP update
Oct 20 10:23:16 RT-AX56U ntp: start NTP update
Oct 20 22:23:14 RT-AX56U ntp: start NTP update
Oct 21 10:23:12 RT-AX56U ntp: start NTP update
Oct 21 16:35:32 192.168.1.250 [4C: E6:76:XX:XX:XX] WZR-HP-G302H ntpclient: start ntpclient 
Oct 21 16:35:33 192.168.1.250 [4C: E6:76:XX:XX:XX] WZR-HP-G302H ntpclient: probe_count=0  hostname=ntp.nict.jp  cycle_time=43200 
Oct 21 22:23:09 RT-AX56U ntp: start NTP update
Oct 22 11:27:14 192.168.1.250 [4C: E6:76:XX:XX:XX] WZR-HP-G302H ntpclient: ntp server address 61.205.120.130 
Oct 22 11:27:15 192.168.1.250 [4C: E6:76:XX:XX:XX] WZR-HP-G302H ntpclient: SUCCESS: set time :  Thu Oct 22 11:27:14 2020 
Oct 22 14:18:08 192.168.1.250 [4C: E6:76:XX:XX:XX] WZR-HP-G302H ntpclient: start ntpclient 
Oct 22 14:18:09 192.168.1.250 [4C: E6:76:XX:XX:XX] WZR-HP-G302H ntpclient: probe_count=0  hostname=ntp.nict.jp  cycle_time=43200 
Oct 22 23:17:21 RT-AX56U ntp: start NTP update
Jan  1 12:01:05 192.168.1.253 NTP: NTP Server Start
Jan  1 12:01:05 192.168.1.253 NTP: NTP Connection Failed => Hostname: ntp.nict.jp
Oct 23 11:17:18 RT-AX56U ntp: start NTP update
Jan  2 00:02:10 192.168.1.253 NTP: NTP Server Start
Jan  2 00:02:10 192.168.1.253 NTP: NTP Connection Failed => Hostname: ntp.nict.jp
Oct 23 23:17:16 RT-AX56U ntp: start NTP update
Jan  2 12:03:15 192.168.1.253 NTP: NTP Server Start
Jan  2 12:03:15 192.168.1.253 NTP: NTP Connection Failed => Hostname: ntp.nict.jp
Oct 24 11:17:14 RT-AX56U ntp: start NTP update
May  5 14:05:21 RT-AX56U ntp: start NTP update
Oct 24 13:23:45 RT-AX56U rc_service: ntp 1865:notify_rc restart_diskmon
Oct 24 13:25:34 RT-AX56U hour monitor: ntp sync fail, will retry after 120 sec
May  5 14:05:21 RT-AX56U ntp: start NTP update
Oct 24 17:20:10 RT-AX56U rc_service: ntp 1796:notify_rc restart_diskmon
Oct 24 17:21:59 RT-AX56U hour monitor: ntp sync fail, will retry after 120 sec
Jan  3 12:05:25 192.168.1.253 NTP: NTP Server Start
Jan  3 12:05:25 192.168.1.253 NTP: NTP Connection Failed => Hostname: ntp.nict.jp
Oct 25 05:20:08 RT-AX56U ntp: start NTP update
Jan  4 00:06:29 192.168.1.253 NTP: NTP Server Start
Jan  4 00:06:29 192.168.1.253 NTP: NTP Connection Failed => Hostname: ntp.nict.jp
Oct 25 17:20:05 RT-AX56U ntp: start NTP update
Jan  4 12:07:34 192.168.1.253 NTP: NTP Server Start
Jan  4 12:07:34 192.168.1.253 NTP: NTP Connection Failed => Hostname: ntp.nict.jp
Oct 26 05:20:03 RT-AX56U ntp: start NTP update
pi@pi:/var/log$ 

-aを付けていないときは、テキストファイルとして扱われていなかったためでしょうか。検索できたレコードが増えました。

ファイルの文字コード形式に注意を払わないと、正しい結果が得られないですね。

これは気を付けなければなりません。

ちなみに、検索対象ファイルの /var/log/remote-syslog.1 は、nkf -g で文字コードを確認したら、ASCIIでした。

pi@pi:/var/log$ nkf -g /var/log/remote-syslog.1
ASCII
pi@pi:/var/log$ 

 

以上、「バイナリファイル (標準入力) に一致しました」が出たときの対処法でした。

コメント

タイトルとURLをコピーしました