如何限制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 的输出不同,sole 的输出中会出现完整的块,中间会有暂停。这要归咎于和iftop -t之间的缓冲。在我的测试中iftopawkstdbuf -oL iftop …幫助了。
  • iftop将一些消息打印到 stderr。除非您使用,否则它们不会通过管道iftop … 2>&1 | …

相关内容