Comment devrais-je déterminer l'utilisation actuelle du réseau?

Je veux afficher l'utilisation actuelle du réseau (utilisation de la bande passante) d'une interface d'une boîte Debian sur un site web. Il n'est pas supposé être très élaboré ou précis, juste un nombre simple comme "52 Mbit / s".

Les moniteurs de bande passante réseau typiques tels que iftop ne me permettent pas d'extraire simplement une telle valeur.

Comment puis-je le récupérer?

Par exemple, je suppose que je pourrais parsingr /proc/net/dev toutes les quelques minutes. Je ne sais pas si c'est vraiment la meilleure façon de le faire.

Je pense que ifstat va vous aider:

 [root @ localhost ~] # ifstat -i eth0 -q 1 1
        eth0
  KB / s en Ko / s
  3390,26 69,69

La meilleure façon de le faire est simplement d'parsingr /proc/net/dev (soyez prévenu que /proc n'est pas portable). Voici un script bash j'ai rapidement mis en place et qui devrait pouvoir le calculer:

 #!/bin/bash _die() { printf '%s\n' "$@" 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 

Gardez à l'esprit que le sleep ne prend pas en count le time nécessaire pour effectuer les opérations dans la boucle while, ce qui est (très légèrement) inexact. Sur ma coppermine 600mhz, la boucle prend 0,011 secondes – une inexactitude négligeable pour la plupart des objectives. Gardez également à l'esprit lorsque vous utilisez les sorties (commentées) en kilo-octets / mégabits, bash ne comprend que l'arithmétique entière.

Il y a des moniteurs de trafic réseau comme vnstat qui garde des loggings mensuels de votre trafic, ou slurm qui prend ses valeurs directement à partir de celles stockées dans le kernel. Il est disponible dans la plupart des repositorys distro.

Voici ce que je vois quand je cours slurm -i ra0 :

entrer la description de l'image ici