Comment vérifier l'état physique d'un port Ethernet sous Linux?

64

Je veux vérifier si un ethX spécifié est physiquement à la hausse ou à la baisse. Comment puis-je faire cela avec la ligne de commande?

Jader Dias
la source

Réponses:

68

$ ethtool <eth?>

Par exemple:

$ ethtool eth0

fournit:

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
Destroyica
la source
46

Vérifiez /sys/class/net/eth0/operstateet d'autres fichiers dans ce répertoire.

Autant que je sache, cela est spécifique à Linux 2.6+, mais cela fournit une interface propre au pilote du noyau.

La documentation complète pour cette partie du syssystème de fichiers peut être trouvée ici:

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

Linuxtraveler
la source
10
/ sys / class / net / eth0 / carrier était la réponse parfaite à cette question pour moi.
Par Knytt le
Très bonne réponse. Un petit addendum: / run / network / ifstate contient également des informations utiles.
Paulo André Haacke
34

ethtool [interface]

La dernière ligne montre ce que vous voulez:

# ethtool eth0
Paramètres pour eth0:
        Ports pris en charge: [TP]
        Modes de liaison pris en charge: 10baseT / Half 10baseT / Full 
                                100baseT / demi 100baseT / complet 
                                1000baseT / complet 
        Prend en charge la négociation automatique: oui
        Modes de liaison annoncés: 10baseT / Half 10baseT / Full 
                                100baseT / demi 100baseT / complet 
                                1000baseT / complet 
        Auto-négociation annoncée: oui
        Vitesse: 1000Mb / s
        Duplex: complet
        Port: paire torsadée
        PHYAD: 0
        Émetteur-récepteur: interne
        Négociation automatique: sur
        Prise en charge du réveil: g
        Réveil: d
        Niveau de message actuel: 0x00000037 (55)
        Lien détecté: oui
Kurt
la source
4
Si vous vérifiez ceci: en.wikipedia.org/wiki/OSI_model . Vous verrez que la dernière ligne concerne une autre couche: la couche de liaison. Je viens de tester cela. Avec un mauvais câble, la couche physique était en place, mais pas la couche liaison. Ensuite, je suis passé à un autre câble et toutes les couches sont apparues.
Jader Dias
25
ip link show

est un autre. Bon vieux

ifconfig dev_name

ou

ifconfig -a

vous dira également si l'interface est en place. REMARQUE: soyez prudent avec ces méthodes car elles peuvent afficher des informations obsolètes concernant l'état du lien.

goo
la source
Je pense que c'était la meilleure réponse - ethtool n'est pas standard dans ma distribution Ubuntu, donc cela n'aide pas si vous êtes sur une boîte non connectée au réseau.
user20010
4
Je pense que ifconfig affichera parfois des données obsolètes. Il peut afficher UP lorsque le lien est hors service, mais l'interface ethtool affiche toujours les informations appropriées autant que je sache.
sed_and_done
2
Je pense que @sed_and_done a raison. Sur une machine virtuelle Red Hat, si je déconnecte la carte réseau, ethtool affiche immédiatement la Link detected: noplace de Link detected: yes, et ip link montre celle-ci <NO-CARRIER,BROADCAST,MULTICAST,UP>au lieu de <BROADCAST,MULTICAST,UP,LOWER_UP>, mais ifconfig -a indique UP BROADCAST MULTICAST MTU:1500 Metric:1ce qui est identique à la connexion de la carte réseau.
Adi Inbar
16
dmesg | grep eth

vous devriez voir tous les changements de statut

lépole
la source
C'est le seul qui fonctionne si on manque de privilèges d'administrateur.
Brian B
dmesg nécessite root sur Slackware 14.0
AnonymousLurker
Non, ça ne va pas. Je viens de vérifier - alors que cela fonctionne pour moi sur l' eth0appareil, mais cela ne fonctionne pas sur l' eth2appareil.
Bonjour Angel
9

Vous pouvez également utiliser mii-tool pour voir si le lien est actif et vérifier la vitesse négociée.

# mii-tool
eth0: 100baseTx-FD négocié, lien ok

Alakdae
la source
4
mii-tool est obsolète et ne fonctionne pas pour les interfaces GbE.
Dave Cheney
2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
Stolsvik le
La page de manuel de mii-tool suggère d'utiliser ethtool. Cependant, mii-tool continue à faire son travail, plus utile si l’option -v (verbose) est donnée.
David Ramirez
3

Vous pouvez avoir tous les détails avec la commande ci-dessous

ethtool eth0

Et si vous voulez juste voir l’état du lien, donnez la commande ci-dessous

mii-tool eth0
Nikunj Ranpura
la source
2

Si votre système utilise ifplugd(par exemple, sur un Raspberry Pi avec Raspbian), vous pouvez utiliser l'outil d'état associé ifplugstatuspour obtenir l'état de la liaison de toutes les interfaces:

ifplugstatus

ou une interface spécifique (par exemple, eth0):

ifplugstatus eth0
Pierz
la source
2

netplugd est un service qui peut exécuter un ou plusieurs programmes lorsqu'un câble est branché ou un câble débranché. Donc, la ligne de commande serait grep / var / log / messages ou dmesg pour la sortie netplugd.

rjt
la source
Eh bien, pas exactement la réponse demandée, mais intéressante à connaître. Au moins pour moi.
Sopalajo de Arrierez
2

Pour ajouter rapidement à la réponse de @ goo , vous interprétez le ip linkou ip link show INTERFACEcomme suit.

C'est un port qui est haut administrativement, mais physiquement bas:

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

En d’autres termes, UPcela signifie que le système est configuré pour essayer d’utiliser la carte réseau pour la mise en réseau. Le NO-CARRIERici vous indique quel est le problème empêchant le travail en réseau.

Il s’agit d’un port qui est arrêté administrativement (sa couche physique est «active», techniquement - c’est une machine virtuelle):

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

Enfin, ce port fonctionne normalement:

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

C’est administrativement UP, le LOWER_UPindique que la couche physique fonctionne (c’est-à-dire qu’il ya un opérateur), et le second UPconfirme (en effet) que la couche IP est active .

iwaseatenbyagrue
la source