GNU/Linux >> Tutoriels Linux >  >> Linux

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

Je pense que ifstat vous aidera :

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

La meilleure façon de le faire simplement est probablement d'analyser /proc/net/dev (attention, /proc n'est pas transportable). Voici un bash script que j'ai rapidement mis en place qui devrait pouvoir le calculer :

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

Gardez à l'esprit que sleep ne tient pas compte du temps nécessaire pour effectuer les opérations dans la boucle while, donc c'est (très légèrement) inexact. Sur ma mine de cuivre de 600 MHz, la boucle prend 0,011 seconde - une imprécision négligeable dans la plupart des cas. Gardez également à l'esprit que lorsque vous utilisez les sorties (commentées) en kilooctets/mégabits, bash ne comprend que l'arithmétique entière.


Il existe des moniteurs de trafic réseau comme vnstat qui conserve des enregistrements mensuels de votre trafic, ou slurm qui prend ses valeurs directement à partir de celles stockées dans le noyau. Il est disponible dans la plupart des dépôts de distribution.

Voici ce que je vois lorsque j'exécute slurm -i ra0 :


Linux
  1. Linux - Comment annuler le partage du réseau pour le processus actuel ?

  2. Linux - Comment déterminer quel module corrompt le noyau ?

  3. Comment puis-je déterminer si le système de fichiers est sensible à la casse dans .net ?

  4. Comment donnez-vous à su les variables d'environnement utilisateur actuelles

  5. Comment déterminer le numéro de la semaine du mois

Comment utiliser la commande netstat sous Linux

Comment obtenir le système d'exploitation actuel dans MSBuild ?

Comment déterminer le temps de connexion du socket sous Linux

Comment contrôler l'ordre des interfaces réseau ?

8G RAM et SSD - quelle devrait être la taille de l'échange ?

Comment déterminer le débit en bauds d'un port série ?