¿Cómo verificar el estado físico de un puerto ethernet en Linux?

64

Quiero verificar si un ethX especificado está físicamente arriba o abajo. ¿Cómo hago eso con la línea de comando?

Jader Dias
fuente

Respuestas:

68

$ ethtool <eth?>

Por ejemplo:

$ ethtool eth0

proporciona:

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
Destroica
fuente
46

Verifique /sys/class/net/eth0/operstatey otros archivos en este directorio.

Hasta donde sé, esto es específico de Linux 2.6+, pero proporciona una interfaz limpia para el controlador del kernel.

La documentación completa para esta parte del syssistema de archivos se puede encontrar aquí:

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

Linuxtraveler
fuente
10
/ sys / class / net / eth0 / carrier fue la respuesta perfecta a esta pregunta para mí.
Por Knytt
Gran respuesta. Un pequeño anexo: / run / network / ifstate también tiene información útil.
Paulo André Haacke
34

ethtool [interface]

la última línea muestra lo que quieres:

# ethtool eth0
Configuraciones para eth0:
        Puertos compatibles: [TP]
        Modos de enlace admitidos: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Soporta negociación automática: sí
        Modos de enlace anunciados: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Negociación automática anunciada: sí
        Velocidad: 1000 Mb / s
        Duplex: completo
        Puerto: par trenzado
        PHYAD: 0
        Transceptor: interno
        Negociación automática: en
        Soporta Wake-on: g
        Activación: d
        Nivel de mensaje actual: 0x00000037 (55)
        Enlace detectado: sí
Kurt
fuente
44
Si marca esto: en.wikipedia.org/wiki/OSI_model . Verá que la última línea es sobre otra capa: la capa de enlace. Acabo de probar esto. Con un cable defectuoso, la capa física estaba activa, pero no la capa de enlace. Luego cambié a otro cable y aparecieron todas las capas.
Jader Dias
25
ip link show

es otro. Buen viejo

ifconfig dev_name

o

ifconfig -a

también te dirá si la interfaz está activa. NOTA: Tenga cuidado con estos métodos, ya que pueden mostrar información desactualizada sobre el estado del enlace.

cosa muy pegajosa
fuente
Creo que esta fue la mejor respuesta: ethtool no es estándar en mi distribución de Ubuntu, por lo que no ayuda si está en una caja no conectada a la red.
user20010
44
Creo que ifconfig a veces mostrará datos desactualizados. Puede mostrarse ARRIBA cuando el enlace está inactivo, pero la interfaz de ethtool siempre mostrará la información correcta AFAIK.
sed_and_done
2
Creo que @sed_and_done tiene razón. En una Red Hat VM, si desconecto la NIC, ethtool se muestra inmediatamente en Link detected: nolugar de Link detected: yes, y ip link show se muestra en <NO-CARRIER,BROADCAST,MULTICAST,UP>lugar de <BROADCAST,MULTICAST,UP,LOWER_UP>, pero ifconfig -a se muestra UP BROADCAST MULTICAST MTU:1500 Metric:1, que es lo mismo que cuando se conecta la NIC.
Adi Inbar
16
dmesg | grep eth

deberías ver todos los cambios de estado

lepole
fuente
Este es el único que funciona si uno carece de privilegios de administrador.
Brian B
dmesg requiere root en Slackware 14.0
AnonymousLurker
No lo hace Acabo de comprobarlo, aunque funciona para mí en el eth0dispositivo, pero no en el eth2dispositivo.
Hola Ángel
9

También puede usar mii-tool para ver si el enlace está activo y verificar la velocidad negociada.

# mii-tool
eth0: negociado 100baseTx-FD, enlace ok

Alakdae
fuente
44
mii-tool está en desuso y no funciona para las interfaces GbE.
Dave Cheney
2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik
La página de manual de mii-tool sugiere usar ethtool. Sin embargo, mii-tool sigue haciendo su trabajo, más útil si se le da la opción -v (detallada).
David Ramirez
3

Puede tener todos los detalles con el siguiente comando

ethtool eth0

Y si solo quieres ver el estado del enlace, da el siguiente comando

mii-tool eth0
Nikunj Ranpura
fuente
2

Si su sistema está usando ifplugd(por ejemplo, en una Raspberry Pi con Raspbian), puede usar la herramienta de estado asociada ifplugstatuspara obtener el estado del enlace de todas las interfaces:

ifplugstatus

o una interfaz específica (por ejemplo, eth0):

ifplugstatus eth0
Pierz
fuente
2

netplugd es un servicio que puede ejecutar programas cuando se conecta un cable o se desconecta un cable. Entonces, la línea de comando sería grep / var / log / messages o dmesg para la salida de netplugd.

rjt
fuente
Bueno, no exactamente la respuesta solicitada, pero es interesante saberla. Al menos para mi.
Sopalajo de Arrierez
2

Para agregar rápidamente a la respuesta de @ goo , debe interpretar el ip linko de la ip link show INTERFACEsiguiente manera.

Este es un puerto que está administrativamente activo, pero físicamente inactivo:

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

En otras palabras, lo UPque puede ver indica que el sistema está configurado para intentar usar la NIC para la conexión en red. El NO-CARRIERaquí te dice cuál es el problema que impedía la creación de redes de trabajo es.

Este es un puerto que está administrativamente inactivo (su capa física está 'activa', técnicamente, es una VM):

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

Finalmente, este puerto funciona normalmente:

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

Es administrativamente UP, LOWER_UPindica que la capa física está funcionando (es decir, hay un operador), y el segundo UPconfirma (en efecto) que la capa IP está activa .

iwaseatenbyagrue
fuente