El siguiente shell script muestra la velocidad actual de subida y bajada de la interfaz de red que elijas.
Copia el shell script en un fichero llamado, por ejemplo: net_speed.sh.
A continuación configuramos los permisos de ejecución:
$chmod a+x net_speed.sh
El shell script se ejecuta pasándole como primer argumento la interfaz de red que quieres monitorear:
./net_speed.sh eth0
Obtendremos una línea, al ejecutarlo, como esta:
ppp0 DOWN:15 KB/s UP:880 B/s
Este script funciona parseando el archivo /proc/net/dev y calculando la diferencia entre los bytes transmitidos o recibidos actualmente y hace un segundo.
#!/bin/bash
# Este shell script muestra la velocidad de la red, tanto de subida como de subida como de bajada. # Uso:net_speed.sh interface
# p.ej:net_speed.sh eth0
# Variables globalesinterface=$1
received_bytes=""
old_received_bytes=""
transmitted_bytes=""
old_transmitted_bytes=""
# Esta función parsea el fichero/proc/nec/dev
buscando una línea que contenga los datos de$interface
. # En esa línea, los números primero y noveno después de ':' son respectivamente los bytes recibidos y transmitidos.function get_bytes
{
line=$(cat /proc/net/dev | grep $interface | cut -d ':' -f 2 | awk '{print "received_bytes="$1, "transmitted_bytes="$9}')
eval $line
}
# Función que calcula la velocidad usando el número de bytes actual y anterior. # La velocidad se muestra en KBytes por secundo cuando es mayor o igual a 1 KByte por segundo. # Esta funció se ejecuta cada segundo.function get_velocity
{
value=$1
old_value=$2
let vel=$value-$old_value
let velKB=$vel/1000
if [ $velKB != 0 ];
then
echo -n "$velKB KB/s";
else
echo -n "$vel B/s";
fi
}
# Obtiene los valores iniciales.get_bytes
old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes
# Muestra un mensaje y espera durante un segundo.echo "Starting...";
sleep 1;
echo "";
# Bucle principal. Se repite sin fin.while true;
do
# Obtiene los nuevos valores de bytes transmitidos y recibidos.get_bytes
# Calcula las velocidades.vel_recv=$(get_velocity $received_bytes $old_received_bytes)
vel_trans=$(get_velocity $transmitted_bytes $old_transmitted_bytes)
# Muestra los resultados en la consola.echo -en "$interface DOWN:$vel_recv\tUP:$vel_trans\r"
# Actualiza los antiguos valores para realizar nuevos cálculos.calculations.old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes
# Espera un segundo.sleep 1;
done
TRADUCIDO DE:
Shell Script that shows Network Speed
De gran ayuda, sobretodo saber la ubicación del archivo /proc/net/dev, gracias!!!
ResponderEliminar