Ich denke, ifstat wird Ihnen helfen:
[[email protected] ~]# ifstat -i eth0 -q 1 1 eth0 KB/s in KB/s out 3390.26 69.69
Der einfachste Weg, dies zu tun, besteht wahrscheinlich darin, /proc/net/dev
zu parsen (Seien Sie gewarnt, dass /proc
ist nicht tragbar). Hier ist ein bash
Skript, das ich schnell zusammengestellt habe, das in der Lage sein sollte, es zu berechnen:
#!/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
Denken Sie daran, dass sleep
berücksichtigt nicht die Zeit, die für die Operationen in der While-Schleife benötigt wird, daher ist dies (sehr leicht) ungenau. Bei meiner 600-MHz-Kupfermine dauert die Schleife 0,011 Sekunden - eine vernachlässigbare Ungenauigkeit für die meisten Zwecke. Denken Sie auch bei der Verwendung der (auskommentierten) Kilobyte/Megabit-Ausgaben daran, dass Bash nur Integer-Arithmetik versteht.
Es gibt Netzwerkverkehrsmonitore wie vnstatt, die monatliche Aufzeichnungen über Ihren Datenverkehr führen, oder slurm, das seine Werte direkt aus den im Kernel gespeicherten Werten bezieht. Es ist in den meisten Distributions-Repos verfügbar.
Folgendes sehe ich, wenn ich slurm -i ra0
ausführe :