Odpowiedzi:
Jeśli chcesz tylko uzyskać numer i nie potrzebujesz żadnych szczegółów, możesz odczytać dane /proc/net/sockstat{,6}
. Pamiętaj, że musisz połączyć obie wartości, aby uzyskać bezwzględną liczbę połączeń.
Jeśli chcesz uzyskać informacje z samego jądra, możesz użyć, NETLINK_INET_DIAG
aby uzyskać informacje z jądra bez konieczności odczytywania go z/proc
Szybszy sposób? W ten sposób powstaje odpowiedź w ułamku sekundy, w rzeczywistości zajmuje to 0,009 sekundy na moim komputerze!
Szukasz sposobu, który wymaga mniej pisania? W takim przypadku ustaw alias, np
alias tcpcount="wc -l /proc/net/tcp"
Możesz teraz po prostu wpisać alias, np. tcpcount
To, co użyłem w moim przykładzie, aby uzyskać ten numer.
Wpisz wiersz lub dodaj go do swojego .bashrc, aby alias był definiowany przy każdym logowaniu.
W przypadku dużej liczby połączeń następujące czynności mogą działać nieco szybciej (i nieco wolniej w przypadku bardzo małej liczby połączeń):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
Albo może ...
awk 'END {print NR}' /proc/net/tcp
Oba te rozwiązania zakładają, że „wc” nie jest zbyt optymalne do zliczania liczby linii. Moje testy pokazują, że to założenie jest prawdziwe.
Pierwszy opiera się na założeniu, że polecenie tail jest naprawdę dobre w usuwaniu niepotrzebnych danych, do tego stopnia, że rekompensuje to tworzenie dodatkowej podpowłoki i wykonywanie dodatkowej pracy na zmiennych środowiskowych. Wykorzystuje fakt, że linie w / proc / net / tcp są już ponumerowane, aby wyeliminować konieczność liczenia linii. Ostateczne rozwiązanie zakłada, że awk liczy się wystarczająco dobrze, aby zrównoważyć wszelkie niedogodności wynikające z załadowania większego programu w porównaniu do tworzenia wielu procesów. Rozwiązanie awk ma tę dodatkową zaletę, że ładnie pasuje do prostej, jednoliniowej definicji aliasu (co daje dodatkowe korzyści polegające na tym, że nie ma wywoływanego skryptu, a zatem nie rozwidla się dodatkowych procesów powłoki, co daje dodatkową korzyść w postaci miliardowych sekund).
/proc/net/tcp
. Możesz spróbować netstat -n -t | wc -l
, ale zgaduję, że netstat również czyta z/proc/net/tcp
netstat -nt
około 180 000 połączeń zajmuje teraz więcej niż minutę . Nie widzę powodu, dla którego powinien być tak wolny ... (czytanie /proc/net/tcp
jest również bardzo wolne)
awk
podejście jest znacznie wolniejsze niż wc
. tail
wydaje się być na równi wc
.
Użyj ss -s
polecenia, aby uzyskać szczegółową odpowiedź.
ss -s