Bagaimana cara mendapatkan kecepatan unggah dan unduhan saat ini di terminal?

10

Saya ingin terminal untuk menampilkan kecepatan unggah dan unduh saat ini dari koneksi jaringan saya. Saya tidak ingin memantau kecepatan secara real time. Saya hanya ingin nilai "statis" untuk dapat menuliskannya dalam file.

Bagaimana saya mencapainya?

Otak yang sakit
sumber

Jawaban:

14

Anehnya cara termudah tampaknya memandang /proc/net/dev. Saya telah menulis yang berikut ini untuk membandingkan file itu dua kali (dengan jeda kedua) dan kemudian untuk mengurangi nilai total byte. Dalam hal ini em1adalah adaptor jaringan jadi ubahlah itu menjadi apa pun yang perlu Anda lihat.

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)

Outputnya adalah dua angka. Menerima byte per detik diikuti oleh byte yang dikirim per detik.

Oli
sumber
3
Itu dia. Rebus menjadi satu pernyataan awk. Bootiful.
Oli
11

Berikut variasi pada solusi luar biasa 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)

Ini akan mencetak hasil yang sama dengan pendekatan 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

Nilai pertama adalah kecepatan unduhan dalam byte per detik dan yang kedua adalah kecepatan unggah. Anda bisa mendapatkan format yang lebih ramah manusia dengan:

$ 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
sumber
Catatan: pada Ubuntu 18.04 saya harus menggunakan wlp1s0bukan wlan0. Saya tidak akan mengedit jawaban karena saya tahu ini tergantung pada distro.
Daniel Serodio