tcpdumpの出力をgrepして一部を切り取りたいのですが、以下のコマンドは機能しません。
tcpdump ... | grep -i --line-buffered "..." | cut -d'&' -f1,2
何が問題なのか知っていますか? tcpdumpがリアルタイムデータを生成するためだと思いますが、この問題を解決する方法がわかりません。
答え1
tcpdumpでこのオプションを使用してください-l
。
-l は標準出力がラインバッファリングされるようにします。これは、キャプチャされたデータを表示したい場合に便利です。たとえば、
tcpdump -l | tee dat'' or
tcpdump -l> dat&tail -f dat ''です。
マンページに明確に記載されています。
tcpdump -l ... | grep -i "..." | cut -d'&' -f1,2
答え2
バックグラウンドプロセスでは、出力をtcpdump
ファイルにパイプし、tail -F <file> --pid=$!
それを使用して追跡できます。
そのように
tcpdump ... > tcpdump.log 2>&1 &
tail -F tcpdump.log --pid=$! | grep -i --line-buffered "..." | cut -d '&' -f1,2