GNU/Linux >> Linux Esercitazione >  >> Linux

Come devo determinare l'attuale utilizzo della rete?

Penso che ifstat ti aiuterà :

[[email protected] ~]# ifstat -i eth0 -q 1 1
       eth0
 KB/s in  KB/s out
 3390.26     69.69

Il modo migliore per farlo semplicemente è probabilmente analizzare /proc/net/dev (tieni presente che /proc non è portatile). Ecco un bash script che ho rapidamente messo insieme che dovrebbe essere in grado di calcolarlo:

#!/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

Tieni presente che sleep non considera la quantità di tempo necessaria per eseguire le operazioni nel ciclo while, quindi questo è (molto leggermente) impreciso. Sulla mia miniera di rame da 600 mhz, il loop impiega 0,011 secondi, un'imprecisione trascurabile per la maggior parte degli scopi. Tieni presente che anche quando usi gli output (commentati) kilobyte/megabit, bash comprende solo l'aritmetica dei numeri interi.


Ci sono monitor del traffico di rete come vnstat che tiene registri mensili del tuo traffico, o slurm che prende i suoi valori direttamente da quelli memorizzati nel kernel. È disponibile nella maggior parte dei repository distro.

Ecco cosa vedo quando eseguo slurm -i ra0 :


Linux
  1. Come posso determinare se il filesystem fa distinzione tra maiuscole e minuscole in .net?

  2. Come ottenere il sistema operativo corrente in MSBuild?

  3. Come determinare il numero della settimana del mese

  4. Come posso controllare l'ordine delle interfacce di rete?

  5. 8G RAM e SSD:quanto dovrebbe essere grande lo scambio?

Linux:come annullare la condivisione della rete per il processo corrente?

Come creare una nuova finestra sulla directory corrente in Tmux?

Linux:come determinare quale modulo contamina il kernel?

Come cercare il nome dell'area di lavoro corrente?

Come usare il comando netstat in Linux

Come impostare l'interfaccia di rete preferita in Linux