iftop のテキスト出力を制限するにはどうすればいいですか?

iftop のテキスト出力を制限するにはどうすればいいですか?

iftopテキスト モード中に、サイクルせずにアクティブな接続のスナップショットを 1 回印刷するようにツールに指示するにはどうすればよいですか?

iftop -t -i  eth2

答え1

どうやら方法はないようだ教えて iftop -t1 つのチャンクを印刷し、ループしないようにします。

比較のために: はtop -b -n 1あなたが望むことができる、関連するオプションです-n 1。 これは別のツールですが、この例はツールがオプションをサポートしている場合にどれだけ簡単にできるかを示しています(注iftop-nが、違う、無関係なオプション)。

それでも、出力を解析して最初のチャンクの後で停止することができます。私の Debian 10 では、iftop -t各チャンクは多数の文字で構成される行で終了します=。これは、^==誤検出なしでチャンクの終了を検出するのに適した正規表現のようです。

このコマンドは最初のチャンクの後に終了します。

iftop -t -i eth2 | sed '/^==/ q'

あるいは:

iftop -t -i eth2 | awk '{print; if ($0 ~ "^==") exit}'

N 番目のチャンクの後に終了するには、より複雑なコードが必要です。次の例では、N は 3 です。n=3必要に応じて調整してください。

iftop -t -i eth2 | awk -v n=3 '
   BEGIN {if (n<=0) exit}
   {
       print
       if ($0 ~ "^==") n--
       if (n<=0) exit
   }'

ノート:

  • awk(またはsed)が終了した場合、iftopすぐには通知されません。壊れたパイプにさらに何かを書き込もうとしたときにのみ通知されます。つまり、コマンド全体が 、さらに別のチャンク(印刷されない)を生成するSIGPIPEまで停止します。これは正常です。最適化iftopiftopこの問題での最適化はあまり意味がありません。永遠に停止するわけではありません。比較してください。それがどのように意味をなすのかtail
  • コマンド全体がコンソールに出力される場合、出力がチャンクの途中で停止することがあります。この動作は、完全なチャンクが一時停止を挟んで表示される sole の出力とは異なります。原因は、とiftop -tの間のバッファリングです。私のテストでは、iftopawkstdbuf -oL iftop …助けました。
  • iftopいくつかのメッセージを stderr に出力します。 を使用しない限り、それらのメッセージはパイプを通過しませんiftop … 2>&1 | …

関連情報