cat /proc/net/dev a Linux: trànsit de xarxa | Iespai

cat /proc/net/dev a Linux: estadístiques de trànsit de les interfícies de xarxa



cat /proc/net/dev mostra les estadístiques de trànsit de cada interfície de xarxa des que es va engegar el sistema: bytes i paquets rebuts i enviats, errors, paquets descartats… És la font de la qual treuen les dades eines com ip -s link, ifconfig o els monitors de trànsit, i és molt pràctica per a scripts perquè és text pla i sempre hi és.

Exemple

/proc/net/dev és un fitxer virtual que genera el nucli i que pot llegir qualsevol usuari. En un Raspberry Pi amb Ethernet, Wi-Fi i Docker (sortida retallada):

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 617026765 3299241    0    0    0     0          0         0 617026765 3299241    0    0    0     0       0          0
  eth0: 29909715019 274398019    1    0    0     1          0    868095 758941145114 656889645    0    0    0     0       0          0
 wlan0: 151557465  646819    0    0    0     0          0    572748 84840733  229073    0    0    0     0       0          0
docker0: 6119568   98835    0    0    0     0          0         0 2593511117  152332    0 224386    0     0       0          0

Hi ha una línia per interfície: lo (la interfície local, loopback), eth0 (cable), wlan0 (Wi-Fi), i les virtuals que creen programes com Docker (docker0, veth…, br-…). En sistemes amb noms «predictibles» les veuràs com enp3s0, eno1 o wlp2s0.

Què vol dir cada columna

Les primeres 8 xifres són de recepció (Receive) i les 8 següents, d’enviament (Transmit):

ColumnaRecepcióEnviament
bytesBytes rebutsBytes enviats
packetsPaquets rebutsPaquets enviats
errsPaquets rebuts amb errors (dades corruptes, CRC incorrecte…)Errors en enviar
dropPaquets descartats: han arribat bé però el sistema no els ha pogut processar (memòria intermèdia plena, protocol desconegut…)Paquets que no s’han pogut enviar
fifoDesbordaments de la memòria intermèdia de la targetaÍdem en enviar
frameErrors de trama (paquets mal formats)—
colls—Col·lisions (només en xarxes antigues amb concentradors o half-duplex)
carrier—Pèrdues de senyal (cable desconnectat o defectuós)
compressedPaquets comprimits (només en enllaços antics tipus PPP)Ídem
multicastPaquets multidifusió rebuts—

A l’exemple, eth0 ha rebut uns 28 GiB i n’ha enviat uns 707 (aquest Pi fa de servidor), amb només 1 error de recepció en milions de paquets.

Què has de vigilar

  • errs o frame que creixen: sovint és un problema físic: cable en mal estat, connector, o diferències de velocitat/dúplex amb el commutador.
  • carrier que creix: el cable o l’enllaç es perd de manera intermitent.
  • drop de recepció que creix ràpidament en un servidor amb molt de trànsit: el sistema no dona l’abast a processar els paquets.

Recorda que tots els comptadors són acumulats des de l’arrencada (o des que es va crear la interfície). El que importa és si augmenten, no el valor absolut.

Exemples útils

Totals per interfície en GiB, més fàcils de llegir:

$ awk 'NR>2 {sub(":","",$1); printf "%-8s RX: %8.2f GiB  TX: %8.2f GiB\n", $1, $2/2^30, $10/2^30}' /proc/net/dev
lo       RX:     0.57 GiB  TX:     0.57 GiB
eth0     RX:    27.87 GiB  TX:   706.84 GiB
wlan0    RX:     0.14 GiB  TX:     0.08 GiB

Un petit script que mostra la velocitat d’una interfície cada segon (desa’l com velocitat.sh i executa’l amb bash velocitat.sh eth0):

#!/bin/bash
# Mostra la velocitat de baixada i pujada d'una interfície cada segon
IF=${1:-eth0}
llegeix() { awk -v i="$IF:" '$1==i {print $2, $10}' /proc/net/dev; }
read rx1 tx1 < <(llegeix)
while sleep 1; do
  read rx2 tx2 < <(llegeix)
  echo "$IF  baixada: $(( (rx2-rx1)/1024 )) KiB/s  pujada: $(( (tx2-tx1)/1024 )) KiB/s"
  rx1=$rx2; tx1=$tx2
done
$ bash velocitat.sh eth0
eth0  baixada: 34 KiB/s  pujada: 1154 KiB/s
eth0  baixada: 23 KiB/s  pujada: 620 KiB/s

Atura’l amb Ctrl+C.

L’alternativa moderna: ip -s link

La mateixa informació, més ben presentada, amb ip (l’eina que substitueix ifconfig i netstat -i, que estan obsoletes):

$ ip -s -h link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 1e:2b:3c:4d:5e:6f brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets errors dropped  missed   mcast
         29.9G    274M      1       0       0    868k
    TX:  bytes packets errors dropped carrier collsns
          759G    657M      0       0       0       0

L’opció -h mostra les xifres en format llegible (29.9G). Cada comptador també es pot llegir per separat a /sys/class/net/<interfície>/statistics/, per exemple cat /sys/class/net/eth0/statistics/rx_bytes.

Per veure el trànsit en temps real de manera gràfica, hi ha eines com nload, iftop o bmon, i per guardar-ne un historial per dies i mesos, vnstat.

Comandes relacionades

Esta web usa cookies.