ifstat が役立つと思います:
[[email protected] ~]# ifstat -i eth0 -q 1 1 eth0 KB/s in KB/s out 3390.26 69.69
単純に行う最善の方法は、おそらく /proc/net/dev
を解析することです (/proc
に注意してください ポータブルではありません)。これが bash
です 計算できるはずのスクリプトをすぐにまとめました:
#!/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
sleep
に注意してください while ループで操作を実行するのにかかる時間を考慮していないため、これは (ごくわずかに) 不正確です。私の 600mhz の銅鉱山では、ループに 0.011 秒かかります。ほとんどの場合、無視できるほどの不正確さです。 (コメント アウトされた) キロバイト/メガビット出力を使用する場合にも注意してください。bash は整数演算しか認識しません。
トラフィックの月次記録を保持する vnstat や、カーネルに保存されている値から直接値を取得する slurm などのネットワーク トラフィック モニターがあります。ほとんどのディストリビューション リポジトリで利用できます。
slurm -i ra0
を実行すると、次のように表示されます。 :