Jak uzyskać aktualne prędkości wysyłania i pobierania w terminalu?

10

Chcę, aby terminal wyświetlał bieżące prędkości przesyłania i pobierania mojego połączenia sieciowego. Nie chcę monitorować prędkości w czasie rzeczywistym. Chcę tylko, aby wartość „statyczna” była w stanie zapisać ją w pliku.

Jak to osiągnąć?

Painbrain
źródło

Odpowiedzi:

14

Dziwnie wydaje się, że najłatwiejszym sposobem jest patrzenie /proc/net/dev. Napisałem następujące polecenie, aby porównać ten plik dwa razy (z drugim opóźnieniem), a następnie odjąć całkowitą wartość bajtów. W tym przypadku em1jest to karta sieciowa, więc po prostu zmień ją na cokolwiek, na co chcesz spojrzeć.

awk '/em1/ {i++; rx[i]=$2; tx[i]=$10}; END{print rx[2]-rx[1] " " tx[2]-tx[1]}' \
 <(cat /proc/net/dev; sleep 1; cat /proc/net/dev)

Dane wyjściowe to dwie liczby. Odebrane bajty na sekundę, a następnie wysłane bajty na sekundę.

Oli
źródło
3
No to jedziemy. Sprowadziłem to do jednego zdania z awk. Bootiful.
Oli
11

Oto odmiana doskonałego rozwiązania Oli:

awk '{if(l1){print $2-l1,$10-l2} else{l1=$2; l2=$10;}}' \
  <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)

Wypisuje ten sam wynik, co podejście Oli:

$ awk '{if(l1){print $2-l1,$10-l2} else{l1=$2; l2=$10;}}' \
>   <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)
401500 30286

Pierwsza wartość to szybkość pobierania w bajtach na sekundę, a druga to szybkość wysyłania. Możesz uzyskać format bardziej przyjazny dla człowieka dzięki:

$ awk '{if(l1){print ($2-l1)/1024"kB/s",($10-l2)/1024"kB/s"} else{l1=$2; l2=$10;}}' \
    <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)
398.771kB/s 82.8066kB/s
terdon
źródło
Uwaga: w Ubuntu 18.04 musiałem użyć wlp1s0zamiast wlan0. Nie będę edytować odpowiedzi, ponieważ wiem, że to zależy od dystrybucji.
Daniel Serodio