Saya pikir ifstat akan membantu Anda :
[[email protected] ~]# ifstat -i eth0 -q 1 1 eth0 KB/s in KB/s out 3390.26 69.69
Cara terbaik untuk melakukannya adalah dengan mengurai /proc/net/dev
(berhati-hatilah bahwa /proc
tidak portabel). Ini adalah bash
skrip yang saya kumpulkan dengan cepat yang seharusnya dapat menghitungnya:
#!/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
Ingatlah bahwa sleep
tidak mempertimbangkan jumlah waktu yang diperlukan untuk melakukan operasi dalam perulangan while, jadi ini (sangat sedikit) tidak akurat. Pada tambang tembaga 600mhz saya, loop membutuhkan waktu 0,011 detik -- ketidakakuratan yang dapat diabaikan untuk sebagian besar tujuan. Ingat juga saat menggunakan output kilobyte/megabit (dikomentari), bash hanya memahami aritmatika bilangan bulat.
Ada monitor lalu lintas jaringan seperti vnstat yang menyimpan catatan bulanan lalu lintas Anda, atau slurm yang mengambil nilainya langsung dari yang disimpan di kernel. Ini tersedia di sebagian besar repo distro.
Inilah yang saya lihat ketika saya menjalankan slurm -i ra0
: