Come verificare lo stato fisico di una porta Ethernet in Linux?


64

Voglio verificare se un determinato ethX è fisicamente su o giù. Come posso farlo con la riga di comando?

Risposte:


68

$ ethtool <eth?>

Per esempio:

$ ethtool eth0

fornisce:

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes

46

Controlla /sys/class/net/eth0/operstatee altri file in questa directory.

Per quanto ne so questo è specifico per Linux 2.6+, ma fornisce un'interfaccia pulita per il driver del kernel.

La documentazione completa per questa parte del sysfile system è disponibile qui:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net


10
/ sys / class / net / eth0 / carrier è stata la risposta perfetta a questa domanda per me.
Per Knytt,

Bella risposta. Un piccolo addendum: / run / network / ifstate contiene anche alcune informazioni utili.
Paulo André Haacke,

34

ethtool [interface]

l'ultima riga mostra quello che vuoi:

# ethtool eth0
Impostazioni per eth0:
        Porte supportate: [TP]
        Modalità di collegamento supportate: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Supporta la negoziazione automatica: Sì
        Modalità di link pubblicizzate: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Auto-negoziazione pubblicizzata: Sì
        Velocità: 1000 Mb / s
        Duplex: pieno
        Porta: Twisted Pair
        PHYAD: 0
        Ricetrasmettitore: interno
        Negoziazione automatica: attiva
        Supporta Wake-on: g
        Sveglia: d
        Livello messaggio corrente: 0x00000037 (55)
        Link rilevato: sì

4
Se lo controlli: en.wikipedia.org/wiki/OSI_model . Vedrai che l'ultima riga riguarda un altro livello: il livello di collegamento. Ho appena provato questo. Con un cavo danneggiato il livello fisico era alto, ma non il livello collegamento. Poi sono passato a un altro cavo e sono arrivati ​​tutti gli strati.
Jader Dias,

25
ip link show

è un altro. Buon vecchio

ifconfig dev_name

o

ifconfig -a

ti dirà anche se l'interfaccia è attiva. NOTA: utilizzare questi metodi con cautela poiché possono mostrare informazioni non aggiornate sullo stato del collegamento.


Penso che questa sia stata la risposta migliore: ethtool non è standard nella mia distribuzione Ubuntu, quindi non aiuta se su una scatola non collegata alla rete.
user20010

4
Credo che ifconfig mostrerà a volte dati obsoleti. Può mostrare UP quando il collegamento è inattivo, ma l'interfaccia di ethtool mostrerà sempre le informazioni giuste AFAIK.
sed_and_done,

2
Penso che @sed_and_done abbia ragione. Su una Red Hat VM, se disconnetto la NIC, ethtool mostra immediatamente Link detected: noinvece di Link detected: yes, e ip link show mostra <NO-CARRIER,BROADCAST,MULTICAST,UP>invece di <BROADCAST,MULTICAST,UP,LOWER_UP>, ma ifconfig -a mostra UP BROADCAST MULTICAST MTU:1500 Metric:1, che è lo stesso di quando la NIC è connessa.
Adi Inbar,

16
dmesg | grep eth

dovresti vedere tutti gli statuschanges


Questo è l'unico che funziona se mancano i privilegi di amministratore.
Brian B,

dmesg richiede il root su Slackware 14.0
AnonymousLurker il

No, non lo fa. Ho appena controllato - mentre funziona per me sul eth0dispositivo, ma non sul eth2dispositivo.
Hi-Angel,

9

Puoi anche usare mii-tool per vedere se il collegamento è attivo e controllare la velocità negoziata.

# mii-tool
eth0: negoziato 100baseTx-FD, collegamento ok


4
mii-tool è obsoleto e non funziona per le interfacce GbE.
Dave Cheney,

2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik

La pagina man di mii-tool suggerisce di usare ethtool. Tuttavia, mii-tool continua a fare il suo lavoro, più utile se viene data l'opzione -v (dettagliata).
David Ramirez,

3

Puoi avere tutti i dettagli con il comando seguente

ethtool eth0

E se vuoi solo vedere lo stato del link, dai il comando di seguito

mii-tool eth0

2

Se il tuo sistema sta utilizzando ifplugd(ad esempio su un Raspberry Pi con Raspbian), puoi utilizzare lo strumento di stato associato ifplugstatusper ottenere lo stato del collegamento di tutte le interfacce:

ifplugstatus

o un'interfaccia specifica (ad es. eth0):

ifplugstatus eth0

2

netplugd è un servizio in grado di eseguire i programmi quando viene collegato un cavo o rimosso un cavo. Quindi la riga di comando sarebbe grep / var / log / messages o dmesg per l'output di netplugd.


Bene, non esattamente la risposta richiesta, ma interessante da sapere. Almeno per me.
Sopalajo de Arrierez,

2

Per aggiungere rapidamente alla risposta di @ goo , interpretare ip linko ip link show INTERFACEcome segue.

Questa è una porta che è amministrativamente attiva, ma fisicamente inattiva:

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000

In altre parole, UPè possibile vedere che indica che il sistema è configurato per provare a utilizzare la scheda NIC per la rete. Il NO-CARRIERqui si dice qual è il problema impedendo rete da lavoro è.

Questa è una porta che è amministrativamente inattiva (il suo livello fisico è "attivo", tecnicamente - è una macchina virtuale):

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

Infine, questa porta funziona normalmente:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000

È amministrativamente UP, LOWER_UPindica che il livello fisico sta funzionando (cioè c'è un vettore) e il secondo UPconferma (in effetti) che il livello IP è attivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.