字符串命令的奇怪行为

字符串命令的奇怪行为

我正在尝试捕获 mysql 流量并将这些流量传递给 strings 命令,如下所示:

tcpdump -i any -s 0 -l -w - dst port 3306 | strings

这按预期工作并打印所有 mysql 查询,例如

select * from mytables
show databases

但是当我尝试将输出重定向到文件时,它不会将输出打印到/tmp/out文件:

tcpdump -i any -s 0 -l -w - dst port 3306 | strings > /tmp/out

有人可以解释一下上述命令的行为以及为什么它不将输出重定向到文件。

答案1

我得到了解决方案:

实际上strings命令是缓冲的。我通过使用禁用了缓冲

stdbuf -i0 -o0 -e0 command

因此,将整个命令更改为以下内容后,输出开始进入 /tmp/final 文件。

tcpdump -i any -s 0 -l -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings > /tmp/final 

参考

相关内容