Obtenha a velocidade atual da rede no bash

2

Existe um método para obter a velocidade atual da rede (assim como eu posso obter com «nload») em um script bash? Eu colocaria apenas uma variável na velocidade no momento em que o script está sendo executado. Ex: «./script.sh» produziria «Em: 50Ko / s | Para fora: 25Ko / s ».

Obrigado :)

    
por tux1124 04.03.2015 / 19:56

2 respostas

4

cat /proc/net/dev mostra quantos bytes foram transferidos em cada interface.

Você pode pegar algumas amostras e calcular os kilobytes atuais por segundo?

Aqui está um script que encontrei e modifiquei um pouco traffic.sh . Copie-o para algum lugar no seu PATH e altere as permissões para 755 chmod 755 traffic.sh

O uso é

traffic.sh eth0

Imprime

 Transmitted: 5352K
 Received: 13M
 Total: 19M
 Sleeping 3 to calculate speed...
 Current speed: 690B/s
    
por 04.03.2015 / 20:09
0

Abaixo está um script que funciona na maioria dos roteadores Linux embarcados, como os compatíveis com Ubiquiti e OpenWRT, e obtém seus detalhes em / proc / net / dev.

(e fácil de mudar para pacotes, etc.)

#!/bin/sh

SLP=1 # output / sleep interval
DEVICE=$1
IS_GOOD=0
for GOOD_DEVICE in 'grep \: /proc/net/dev | awk -F: '{print $1}''; do
    if [ "$DEVICE" = $GOOD_DEVICE ]; then
        IS_GOOD=1
        break
    fi
done

if [ $IS_GOOD -eq 0 ]; then
    echo "Device not found. Should be one of these:"
        grep ":" /proc/net/dev | awk -F: '{print $1}' | sed s@\ @@g 
    exit 1
fi

while true; do

LINE='grep $1 /proc/net/dev | sed s/.*://';
RECEIVED1='echo $LINE | awk '{print $1}''
TRANSMITTED1='echo $LINE | awk '{print $9}''
TOTAL=$(($RECEIVED1+$TRANSMITTED1))

sleep $SLP

LINE='grep $1 /proc/net/dev | sed s/.*://';
RECEIVED2='echo $LINE | awk '{print $1}''
TRANSMITTED2='echo $LINE | awk '{print $9}''
SPEED=$((($RECEIVED2+$TRANSMITTED2-$TOTAL)/$SLP))
INSPEED=$((($RECEIVED2-$RECEIVED1)/$SLP))
OUTSPEED=$((($TRANSMITTED2-$TRANSMITTED1)/$SLP))

printf "In: %12i KB/s | Out: %12i KB/s | Total: %12i KB/s\n" $(($INSPEED/1024)) $(($OUTSPEED/1024)) $((($INSPEED+$OUTSPEED)/1024)) ;

done;

Copie o texto acima para a área de transferência e, em seguida, em uma sessão de terminal no seu roteador:

$ cat > /tmp/n.sh

depois: Ctrl + V (ou clique direito / Colar)

depois: Ctrl + D

$ chmod +x /tmp/n.sh

$ /tmp/n.sh eth0

Você também pode colá-lo em um bloco de notas e depois repetir o que precede, se precisar editá-lo - nem todos os roteadores incorporados têm um editor! Certifique-se de copiar tudo, desde o # no topo até o final; na parte inferior.

Você pode ter que mudar o / bin / bash para / bin / sh ou vice-versa. Há outro exemplo que usa / sys aqui: Como obter estatísticas de rede em tempo real no Linux com o formato KB / MB / Bytes e para a porta específica ou o processID do aplicativo?

Fonte: link

    
por 23.05.2018 / 18:56