Je pense que ifstat vous aidera :
[[email protected] ~]# ifstat -i eth0 -q 1 1 eth0 KB/s in KB/s out 3390.26 69.69
La meilleure façon de le faire simplement est probablement d'analyser /proc/net/dev
(attention, /proc
n'est pas transportable). Voici un bash
script que j'ai rapidement mis en place qui devrait pouvoir le calculer :
#!/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
Gardez à l'esprit que sleep
ne tient pas compte du temps nécessaire pour effectuer les opérations dans la boucle while, donc c'est (très légèrement) inexact. Sur ma mine de cuivre de 600 MHz, la boucle prend 0,011 seconde - une imprécision négligeable dans la plupart des cas. Gardez également à l'esprit que lorsque vous utilisez les sorties (commentées) en kilooctets/mégabits, bash ne comprend que l'arithmétique entière.
Il existe des moniteurs de trafic réseau comme vnstat qui conserve des enregistrements mensuels de votre trafic, ou slurm qui prend ses valeurs directement à partir de celles stockées dans le noyau. Il est disponible dans la plupart des dépôts de distribution.
Voici ce que je vois lorsque j'exécute slurm -i ra0
: