
¿Cómo decirle a la herramienta iftop
que imprima una vez una instantánea de las conexiones activas sin realizar ciclos mientras está en modo texto?
iftop -t -i eth2
Respuesta1
Parece que no hay manera dedecir iftop -t
para imprimir un fragmento y no hacer un bucle.
A modo de comparación: top -b -n 1
puedes hacer lo que quieras, la opción relevante es -n 1
. Es una herramienta diferente, pero este ejemplo muestra lo fácil que puede ser cuando la herramienta admite la opción (nota: iftop
se entiende -n
, pero es unadiferente, opción no relacionada).
Aún así, puedes analizar la salida y detenerte después del primer fragmento. En mi Debian 10 iftop -t
termina cada fragmento con una línea que consta de muchos =
caracteres. Parece ^==
una buena expresión regular para detectar el final de un fragmento sin falsos positivos.
Este comando sale después del primer fragmento:
iftop -t -i eth2 | sed '/^==/ q'
Alternativamente:
iftop -t -i eth2 | awk '{print; if ($0 ~ "^==") exit}'
Para salir después del enésimo fragmento necesitamos un código más complejo. En el siguiente ejemplo N es 3. Ajústalo n=3
a tus necesidades:
iftop -t -i eth2 | awk -v n=3 '
BEGIN {if (n<=0) exit}
{
print
if ($0 ~ "^==") n--
if (n<=0) exit
}'
Notas:
- Cuando
awk
(osed
) sale,iftop
no se le notifica inmediatamente. Sólo lo consigueSIGPIPE
cuando intenta escribir algo más en la tubería ahora rota. Esto significa que todo el comando se detendrá hasta queiftop
genere otro fragmento (que no se imprimirá). Esto es normal. La optimizacióniftop
en este asunto no tiene mucho sentido, no es que vaya a estancarse para siempre. Compararcómo tiene sentido paratail
. - Si el comando completo se imprime en la consola, es posible que vea que la salida se detiene a mitad del fragmento. Este comportamiento es diferente al de la salida desde sole,
iftop -t
donde aparecen fragmentos completos con pausas en el medio. La culpa la tiene la amortiguación entreiftop
y .awk
en mis pruebasstdbuf -oL iftop …
ayudó. iftop
imprime algunos mensajes en stderr. No pasarán por la tubería, a menos que usesiftop … 2>&1 | …
.