Penso che ifstat ti aiuterà :
[[email protected] ~]# ifstat -i eth0 -q 1 1 eth0 KB/s in KB/s out 3390.26 69.69
Il modo migliore per farlo semplicemente è probabilmente analizzare /proc/net/dev
(tieni presente che /proc
non è portatile). Ecco un bash
script che ho rapidamente messo insieme che dovrebbe essere in grado di calcolarlo:
#!/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
Tieni presente che sleep
non considera la quantità di tempo necessaria per eseguire le operazioni nel ciclo while, quindi questo è (molto leggermente) impreciso. Sulla mia miniera di rame da 600 mhz, il loop impiega 0,011 secondi, un'imprecisione trascurabile per la maggior parte degli scopi. Tieni presente che anche quando usi gli output (commentati) kilobyte/megabit, bash comprende solo l'aritmetica dei numeri interi.
Ci sono monitor del traffico di rete come vnstat che tiene registri mensili del tuo traffico, o slurm che prende i suoi valori direttamente da quelli memorizzati nel kernel. È disponibile nella maggior parte dei repository distro.
Ecco cosa vedo quando eseguo slurm -i ra0
: