GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo debo determinar la utilización actual de la red?

Creo que ifstat te ayudará:

[[email protected] ~]# ifstat -i eth0 -q 1 1
       eth0
 KB/s in  KB/s out
 3390.26     69.69

La mejor manera de hacerlo simplemente es probablemente analizar /proc/net/dev (advertencia de que /proc no es portátil). Aquí hay un bash script que armé rápidamente que debería poder calcularlo:

#!/bin/bash

_die() {
    printf '%s\n' "[email protected]"
    exit 1
}

_interface=$1

[[ ${_interface} ]] || _die 'Usage: ifspeed [interface]'
grep -q "^ *${_interface}:" /proc/net/dev || _die "Interface ${_interface} not found in /proc/net/dev"

_interface_bytes_in_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev)
_interface_bytes_out_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev)

while sleep 1; do
    _interface_bytes_in_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev)
    _interface_bytes_out_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev)

    printf '%s: %s\n' 'Bytes in/sec'  "$(( _interface_bytes_in_new - _interface_bytes_in_old ))" \
                      'Bytes out/sec' "$(( _interface_bytes_out_new - _interface_bytes_out_old ))"

    # printf '%s: %s\n' 'Kilobytes in/sec'  "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 1024 ))" \
    #                   'Kilobytes out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 1024 ))"

    # printf '%s: %s\n' 'Megabits in/sec'  "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 131072 ))" \
    #                   'Megabits out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 131072 ))"

    _interface_bytes_in_old=${_interface_bytes_in_new}
    _interface_bytes_out_old=${_interface_bytes_out_new}
done

Tenga en cuenta que sleep no tiene en cuenta la cantidad de tiempo que lleva realizar las operaciones en el bucle while, por lo que esto es (muy ligeramente) inexacto. En mi mina de cobre de 600 MHz, el bucle tarda 0,011 segundos, una inexactitud insignificante para la mayoría de los propósitos. Tenga en cuenta también que cuando utilice las salidas de kilobyte/megabit (comentadas), bash solo entiende la aritmética de enteros.


Hay monitores de tráfico de red como vnstat que mantiene registros mensuales de su tráfico, o slurm que toma sus valores directamente de los almacenados en el núcleo. Está disponible en la mayoría de los repositorios de distribución.

Esto es lo que veo cuando ejecuto slurm -i ra0 :


Linux
  1. ¿Cómo determino si el sistema de archivos distingue entre mayúsculas y minúsculas en .net?

  2. ¿Cómo puedo determinar la utilización actual de la CPU desde el shell?

  3. ¿Cómo le das a su las variables de entorno del usuario actual?

  4. ¿Cómo obtener el sistema operativo actual en MSBuild?

  5. ¿Cómo controlo el orden de las interfaces de red?

Cómo usar el comando mtr de Linux

¿Cómo compartir archivos en la red doméstica?

¿Cómo buscar el nombre del espacio de trabajo actual?

Cómo usar el comando netstat en Linux

¿Cómo borro las estadísticas de la interfaz en Linux?

¿Cómo determinar la tasa de baudios de un puerto serie?