GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menentukan pemanfaatan jaringan saat ini?

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 :


Linux
  1. Bagaimana cara menentukan apakah sistem file peka terhadap huruf besar-kecil di .net?

  2. Bagaimana saya bisa menentukan pemanfaatan CPU saat ini dari shell?

  3. Bagaimana Anda memberi su variabel lingkungan pengguna saat ini

  1. Bagaimana cara mendapatkan sistem operasi saat ini di MSBuild?

  2. Cara menentukan jumlah minggu dalam sebulan

  3. RAM 8G dan SSD - seberapa besar seharusnya swap?

  1. Seberapa besar seharusnya partisi swap?

  2. Bagaimana cara menghapus statistik antarmuka di Linux

  3. Cara mengatur antarmuka jaringan yang disukai di linux