我正在尝试捕获 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