Myslím, že ifstat vám pomůže:
[[email protected] ~]# ifstat -i eth0 -q 1 1 eth0 KB/s in KB/s out 3390.26 69.69
Nejlepší způsob, jak to udělat jednoduše, je pravděpodobně analyzovat /proc/net/dev
(Upozorňujeme, že /proc
není přenosný). Zde je bash
rychle jsem dal dohromady skript, který by to měl umět vypočítat:
#!/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
Mějte na paměti, že sleep
nezohledňuje množství času, které zabere provedení operací v cyklu while, takže je to (velmi mírně) nepřesné. Na mém 600mhz měděném minu trvá smyčka 0,011 sekundy – pro většinu účelů zanedbatelná nepřesnost. Mějte na paměti, že při použití (komentovaných) výstupů kilobajtů/megabitů bash rozumí pouze celočíselné aritmetice.
Existují monitory síťového provozu, jako je vnstat, který udržuje měsíční záznamy o vašem provozu, nebo slurm, který bere své hodnoty přímo z těch, které jsou uloženy v jádře. Je k dispozici ve většině repozitářů distro.
Zde je to, co vidím, když spustím slurm -i ra0
: