如何限制iftop的文字輸出?

如何限制iftop的文字輸出?

如何告訴工具iftop在文字模式下列印一次活動連線的快照而不循環?

iftop -t -i  eth2

答案1

好像沒有辦法告訴 iftop -t列印一大塊而不是循環。

作為比較: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只有當它嘗試向現在損壞的管道寫入更多內容時,它才會得到。這意味著整個命令將停止,直到iftop 生成另一個區塊(不會被列印)。這個是正常的。在這件事上進行優化iftop沒有什麼意義,它不會永遠停滯不前。比較它有何意義tail
  • 如果整個命令列印到控制台,您可能會看到輸出在區塊中間暫停。此行為與sole 的輸出不同iftop -t,其中完整的區塊出現,中間有暫停。iftop和之間的緩衝awk是罪魁禍首。在我的測試中stdbuf -oL iftop …幫助了。
  • iftop向 stderr 列印一些訊息。它們不會穿過管道,除非您使用iftop … 2>&1 | ….

相關內容