¿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?

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

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


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í

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.


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


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


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

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

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.


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 .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.