Como obter as velocidades atuais de upload e download no terminal?

10

Quero que o terminal produza as velocidades atuais de upload e download da minha conexão de rede. Não quero monitorar as velocidades em tempo real. Eu só quero um valor "estático" para poder escrevê-lo em um arquivo.

Como faço para conseguir isso?

Painbrain
fonte

Respostas:

14

Estranhamente, a maneira mais fácil parece estar olhando /proc/net/dev. Escrevi o seguinte para comparar esse arquivo duas vezes (com um segundo atraso) e depois subtrair os valores totais de bytes. Nesse caso, em1é o adaptador de rede, então mude isso para o que você precisar olhar.

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)

A saída é dois números. Bytes recebidos por segundo seguidos por bytes enviados por segundo.

Oli
fonte
3
Aqui vamos nós. Resumiu em uma declaração estranha. Bootiful.
Oli
11

Aqui está uma variação da excelente solução da 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)

Ele imprimirá o mesmo resultado que a abordagem de 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

O primeiro valor é a taxa de download em bytes por segundo e o segundo é a taxa de upload. Você pode obter um formato mais amigável ao ser humano com:

$ 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
fonte
Nota: no Ubuntu 18.04 eu tive que usar em wlp1s0vez de wlan0. Não vou editar a resposta porque sei que isso depende da distribuição.
Daniel Serodio