GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistím aktuální využití sítě?

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 :


Linux
  1. Jak používat příkaz Linux mtr

  2. Linux – Jak zrušit sdílení sítě pro aktuální proces?

  3. Jak sdílet soubory v domácí síti?

  1. Jak vyhledat název aktuálního pracovního prostoru?

  2. Jak zjistím, zda souborový systém v .net rozlišuje malá a velká písmena?

  3. Jak získat aktuální operační systém v MSBuild?

  1. Jak určit počet týdnů v měsíci

  2. 8G RAM a SSD - jak velký by měl být swap?

  3. Jak nastavit preferované síťové rozhraní v linuxu