![并行运行 tshark 并查找 + 严格按时间排序的输出](https://linux22.com/image/769564/%E5%B9%B6%E8%A1%8C%E8%BF%90%E8%A1%8C%20tshark%20%E5%B9%B6%E6%9F%A5%E6%89%BE%20%2B%20%E4%B8%A5%E6%A0%BC%E6%8C%89%E6%97%B6%E9%97%B4%E6%8E%92%E5%BA%8F%E7%9A%84%E8%BE%93%E5%87%BA.png)
我正在尝试获取调试输出
- “find” 的作用
- 与网络上发生的情况相比(tshark)
因此我想并行运行这些命令并按时间对输出进行细致排序。
我这样做:
{
stdbuf -oL tshark -tad -l -n -s 9999 host x | ts '[TSRK %Y-%m-%d %H:%M:%.S]' &
sleep 5
stdbuf -oL find . -type d 2>&1 | ts '[FIND %Y-%m-%d %H:%M:%.S]' &
} >/root/out
主要问题:Tshark 输出滞后
# stdbuf -oL tshark -tad -l -n | ts '[TSRK %Y-%m-%d %H:%M:%.S]'
[TSRK 2021-08-18 17:40:56.206744] 2 2021-08-18 17:40:55.477802058 00:04:96:xx:xx:xx → ff:ff:ff:ff:ff:ff ARP 64 Who has 172.31.x.x? Tell 172.31.x.x
将 ts ( ) 的时间戳[TSRK 2021-08-18 17:40:56.206744]
与 tshark ( 2021-08-18 17:40:55.477802058
)的时间戳进行比较
输出滞后。组合日志在显示 tshark 的输出之前输出 find 的结果。而显然,网络活动必须先于 的结果find
。
我也尝试过parallel
parallel --line-buffer ::: \
'stdbuf -oL tshark -tad -l -n -s 9999 host x | ts "[TSRK %Y-%m-%d %H:%M:%.S]" ' \
'stdbuf -oL find . -type d | ts "[FIND %Y-%m-%d %H:%M:%.S]" ' \
>/root/outpar
但外部工具似乎无法修复内部工具明显的错误......结果是一样的。
我该如何正确地做到这一点?