我试图用grep打印/var/log/auth.log中的所有根访问尝试。但是似乎grep并没有处理整个文件,相反,grep在某个时候停止了:
> less /var/log/auth.log | grep Accepted
Apr 10 08:32:43 sshd[16845]: Accepted password for root from ... port 49061 ssh2
Apr 10 09:42:38 sshd[15451]: Accepted password for root from ... port 48990 ssh2
Apr 10 10:11:17 sshd[21592]: Accepted password for root from ... port 48686 ssh2
Apr 10 12:09:03 sshd[5757]: Accepted password for root from ... port 62535 ssh2
Apr 11 18:12:12 sshd[1804]: Accepted password for root from ... port 40765 ssh2
Apr 11 18:12:30 sshd[1884]: Accepted password for root from ... port 40808 ssh2
Apr 11 18:13:46 sshd[2063]: Accepted password for root from ... port 40735 ssh2
Apr 11 19:58:44 sshd[17103]: Accepted password for root from ... port 40684 ssh2
Apr 11 20:48:06 sshd[24583]: Accepted password for root from ... port 40466 ssh2
Binary file (standard input) matches正如我们所看到的,只有在4月11日之前才有条目。因此,如果我尝试以下命令:
> less /var/log/auth.log | grep "Apr 12"
Binary file (standard input) matches什么都没有印出来。但是在文件/var/log/auth.log中,"Apr 12“条目是存在的,我们可以看到如果运行这个命令(我还通过使用cat打印整个文件来证明这一点):
> less /var/log/auth.log | grep -c "Apr 12"
4297我不明白我的第一个grep命令做错了什么。
发布于 2018-04-12 16:31:33
若要强制grep将具有二进制内容的文件视为ASCII,请使用其-a标志:
grep -a 'Apr 12' /var/log/auth.log这是一个非标准的选项,但在GNU grep和grep on OpenBSD中实现(可能还有其他的BSD)。
当GNU grep处理的数据包含nul字节时,或者当它被错误地为当前区域设置编码时,grep将把它作为二进制处理。对于-a或--binary-files=text,GNU grep将被迫将此类数据作为文本处理。请参阅GNU --binary-files手册中的grep选项的文档。
grep通常拒绝输出二进制数据,因为它可能“如果输出是终端,并且终端驱动程序将其中的一些解释为命令,则会产生严重的副作用”。(引用自手册)。
https://unix.stackexchange.com/questions/437345
复制相似问题