
Wie kann ich dem Tool mitteilen, iftop
dass es im Textmodus einmalig einen Snapshot der aktiven Verbindungen ohne Durchlaufen ausdrucken soll?
iftop -t -i eth2
Antwort1
Es scheint, als gäbe es keine Möglichkeit,erzählen iftop -t
um einen Block zu drucken und nicht zu schleifen.
Zum Vergleich: top -b -n 1
kann tun, was Sie wollen, die relevante Option ist -n 1
. Es ist ein anderes Werkzeug, aber dieses Beispiel zeigt, wie einfach es sein kann, wenn das Werkzeug die Option unterstützt (Anmerkung: iftop
versteht -n
, aber es ist einanders, nicht verwandte Option).
Sie können die Ausgabe dennoch analysieren und nach dem ersten Block anhalten. In meinem Debian 10 iftop -t
wird jeder Block mit einer Zeile beendet, die aus vielen Zeichen besteht =
. Dies scheint ^==
ein guter regulärer Ausdruck zu sein, um das Ende eines Blocks ohne falsche Positivergebnisse zu erkennen.
Dieser Befehl wird nach dem ersten Block beendet:
iftop -t -i eth2 | sed '/^==/ q'
Alternative:
iftop -t -i eth2 | awk '{print; if ($0 ~ "^==") exit}'
Um nach dem N-ten Block zu beenden, benötigen wir komplexeren Code. Im folgenden Beispiel ist N gleich 3. Passen Sie den Code n=3
Ihren Bedürfnissen an:
iftop -t -i eth2 | awk -v n=3 '
BEGIN {if (n<=0) exit}
{
print
if ($0 ~ "^==") n--
if (n<=0) exit
}'
Anmerkungen:
- Wenn
awk
(odersed
) beendet wird,iftop
wird nicht sofort benachrichtigt. Es wirdSIGPIPE
nur benachrichtigt, wenn versucht wird, etwas mehr in die jetzt kaputte Pipe zu schreiben. Das bedeutet, dass der gesamte Befehl ins Stocken gerät, bisiftop
ein weiterer Block generiert wird (der nicht gedruckt wird). Das ist normal. Eine Optimierungiftop
in dieser Hinsicht macht wenig Sinn, es ist ja nicht so, als würde es für immer ins Stocken geraten. Vergleichen Siewie es Sinn macht fürtail
. - Wenn der gesamte Befehl auf der Konsole ausgegeben wird, kann es sein, dass die Ausgabe mitten im Block pausiert. Dieses Verhalten unterscheidet sich von der Ausgabe von sole,
iftop -t
wo vollständige Blöcke mit Pausen dazwischen erscheinen. Die Ursache dafür ist die Pufferung zwischeniftop
undawk
. In meinen Testsstdbuf -oL iftop …
geholfen. iftop
druckt einige Meldungen auf stderr. Sie werden nicht durch die Pipe geleitet, es sei denn, Sie verwendeniftop … 2>&1 | …
.