Как ограничить вывод текста 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и . В моих тестахawkstdbuf -oL iftop …помогло.
  • iftopвыводит некоторые сообщения в stderr. Они не пройдут через конвейер, если вы не используете iftop … 2>&1 | ….

Связанный контент