Gibt wc -l /proc/net/tcp
es einen schnelleren Weg, als dies zu tun?
Ich brauche nur eine Gesamtzahl von TCP-Verbindungen.
Gibt wc -l /proc/net/tcp
es einen schnelleren Weg, als dies zu tun?
Ich brauche nur eine Gesamtzahl von TCP-Verbindungen.
Antworten:
Wenn Sie nur die Nummer erhalten möchten und keine Details benötigen, können Sie die Daten von lesen /proc/net/sockstat{,6}
. Bitte beachten Sie, dass Sie beide Werte kombinieren müssen, um die absolute Anzahl der Verbindungen zu erhalten.
Wenn Sie die Informationen aus dem Kernel selbst abrufen möchten, können Sie sie verwenden NETLINK_INET_DIAG
, um die Informationen aus dem Kernel abzurufen, ohne sie lesen zu müssen/proc
Ein schneller Weg? Auf diese Weise wird eine Antwort im Bruchteil einer Sekunde erstellt. Auf meinem Computer dauert dies 0,009 Sekunden!
Suchen Sie einen Weg, der weniger Tippen erfordert? In diesem Fall legen Sie einen Alias fest, z
alias tcpcount="wc -l /proc/net/tcp"
Sie können jetzt einfach den Aliasnamen eingeben, z. B. tcpcount
das, was ich in meinem Beispiel verwendet habe, um diese Nummer zu erhalten.
Geben Sie die Zeile ein oder fügen Sie sie zu Ihrer .bashrc-Datei hinzu, damit der Alias bei jeder Anmeldung definiert wird.
Bei einer großen Anzahl von Verbindungen kann Folgendes möglicherweise etwas schneller ausgeführt werden (und bei einer sehr kleinen Anzahl von Verbindungen etwas langsamer):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
Oder vielleicht ...
awk 'END {print NR}' /proc/net/tcp
Beide Lösungen gehen davon aus, dass "wc" nicht optimal ist, um nur die Anzahl der Zeilen zu zählen. Meine Tests zeigen, dass diese Annahme wahr ist.
Der erste geht davon aus, dass der Befehl tail wirklich gut darin ist, nicht benötigte Daten zu verwerfen, so dass er das Erstellen einer zusätzlichen Sub-Shell und die zusätzliche Bearbeitung von Umgebungsvariablen wieder wettmacht. Es nutzt die Tatsache, dass die Zeilen in / proc / net / tcp bereits nummeriert sind, um das Zählen der Zeilen zu vermeiden. Bei der endgültigen Lösung wird davon ausgegangen, dass awk gut genug zählt, um Nachteile durch das Laden eines größeren Programms gegenüber dem Erstellen mehrerer Prozesse auszugleichen. Die awk-Lösung hat den zusätzlichen Vorteil, dass sie gut in eine einfache einzeilige Alias-Definition passt (was zusätzliche Vorteile bietet, da kein Skript aufgerufen wird und somit keine zusätzlichen Shell-Prozesse gegabelt werden, was einen zusätzlichen Vorteil von Millisekunden bietet.)
/proc/net/tcp
. Sie können es versuchen netstat -n -t | wc -l
, aber ich vermute, dass netstat auch von/proc/net/tcp
netstat -nt
mit ca. 180.000 Verbindungen herzustellen. Ich sehe keinen Grund, warum es so langsam sein sollte ... (Lesen /proc/net/tcp
ist auch sehr langsam)
awk
Ansatz bedauerlicherweise langsamer ist als wc
. tail
scheint auf Augenhöhe zu sein wc
.
Verwenden Sie den ss -s
Befehl, um die detaillierte Antwort zu erhalten.
ss -s