Wie überprüfe ich den physischen Status eines Ethernet-Ports unter Linux?

64

Ich möchte überprüfen, ob ein bestimmtes ethX physisch inaktiv oder inaktiv ist. Wie mache ich das mit der Kommandozeile?

Jader Dias
quelle

Antworten:

68

$ ethtool <eth?>

Zum Beispiel:

$ ethtool eth0

bietet:

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
quelle
46

Überprüfen Sie /sys/class/net/eth0/operstateund andere Dateien in diesem Verzeichnis.

Soweit ich weiß, ist dies spezifisch für Linux 2.6+, bietet aber eine saubere Schnittstelle zum Kerneltreiber.

Die vollständige Dokumentation für diesen Teil des sysDateisystems finden Sie hier:

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

Linuxtraveler
quelle
10
/ sys / class / net / eth0 / carrier war für mich die perfekte Antwort auf diese Frage.
Per Knytt
Gute Antwort. Ein kleiner Nachtrag: / run / network / ifstate enthält auch einige nützliche Informationen.
Paulo André Haacke
34

ethtool [interface]

letzte Zeile zeigt was Sie wollen:

# ethtool eth0
Einstellungen für eth0:
        Unterstützte Ports: [TP]
        Unterstützte Verbindungsmodi: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Unterstützt Auto-Negotiation: Ja
        Angekündigte Verbindungsmodi: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Angekündigte automatische Aushandlung: Ja
        Geschwindigkeit: 1000Mb / s
        Duplex: Voll
        Anschluss: Twisted Pair
        PHYAD: 0
        Transceiver: intern
        Auto-Negotiation: Ein
        Unterstützt Wake-on: g
        Wake-On: d
        Aktuelle Nachrichtenstufe: 0x00000037 (55)
        Link erkannt: ja
Kurt
quelle
4
Wenn Sie dies überprüfen: en.wikipedia.org/wiki/OSI_model . Sie werden sehen, dass es in der letzten Zeile um eine andere Ebene geht: die Verknüpfungsebene. Ich habe das gerade getestet. Bei einem fehlerhaften Kabel war die physische Schicht aktiv, nicht jedoch die Verbindungsschicht. Dann wechselte ich zu einem anderen Kabel und alle Schichten kamen hoch.
Jader Dias
25
ip link show

ist ein anderer. Gute alte

ifconfig dev_name

oder

ifconfig -a

wird Ihnen auch sagen, ob die Schnittstelle aktiv ist. HINWEIS: Seien Sie bei diesen Methoden vorsichtig, da sie veraltete Informationen zum Status des Links anzeigen können.

Schmiere
quelle
Ich denke, das war die beste Antwort - Ethtool ist nicht Standard in meiner Ubuntu-Distribution, also hilft es nicht, wenn eine Box nicht mit dem Netz verbunden ist.
user20010
4
Ich glaube, dass ifconfig manchmal veraltete Daten anzeigt. Es kann UP anzeigen, wenn der Link nicht funktioniert, aber die ethtool-Oberfläche zeigt immer die richtigen Informationen AFAIK an.
sed_and_done
2
Ich denke @sed_and_done ist richtig. Auf einem Red Hat VM, wenn ich die NIC trennen, zeigt ethtool sofort Link detected: nostatt Link detected: yes, und ip link show zeigt <NO-CARRIER,BROADCAST,MULTICAST,UP>statt <BROADCAST,MULTICAST,UP,LOWER_UP>, aber ifconfig -a zeigt UP BROADCAST MULTICAST MTU:1500 Metric:1, die die gleiche wie wenn die NIC angeschlossen ist .
Adi Inbar
16
dmesg | grep eth

du solltest alle statuschanges sehen

Lepole
quelle
Dies ist die einzige, die funktioniert, wenn man keine Administratorrechte hat.
Brian B
dmesg erfordert root auf Slackware 14.0
AnonymousLurker
Nein, das tut es nicht. Ich habe es gerade überprüft - während es für mich auf dem eth0Gerät funktioniert , aber es funktioniert nicht auf dem eth2Gerät.
Hi-Angel
9

Sie können mii-tool auch verwenden, um festzustellen, ob der Link aktiv ist, und um die ausgehandelte Geschwindigkeit zu überprüfen.

# mii-tool
eth0: 100baseTx-FD ausgehandelt, Link ok

Alakdae
quelle
4
mii-tool ist veraltet und funktioniert nicht mehr für GbE-Schnittstellen.
Dave Cheney
2
@ DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik
Die Manpage für mii-tool schlägt die Verwendung von ethtool vor. Das mii-tool macht seine Arbeit jedoch weiter, was nützlicher ist, wenn die Option -v (verbose) angegeben wird.
David Ramirez
3

Sie können alle Details mit dem folgenden Befehl haben

ethtool eth0

Und wenn Sie nur den Linkstatus sehen möchten, geben Sie den folgenden Befehl ein

mii-tool eth0
Nikunj Ranpura
quelle
2

Wenn Ihr System verwendet ifplugd(z. B. auf einem Raspberry Pi mit Raspbian), können Sie das zugehörige Status-Tool verwenden ifplugstatus, um den Verbindungsstatus aller Schnittstellen abzurufen:

ifplugstatus

oder eine bestimmte Schnittstelle (zB eth0):

ifplugstatus eth0
Pierz
quelle
2

netplugd ist ein Dienst, der Programme ausführen kann, wenn ein Kabel eingesteckt oder ein Kabel herausgezogen ist. Die Befehlszeile wäre also grep / var / log / messages oder dmesg für die netplugd-Ausgabe.

rjt
quelle
Nun, nicht genau die gewünschte Antwort, aber eine interessante zu wissen. Zumindest für mich.
Sopalajo de Arrierez
2

Um die Antwort von @ goo schnell zu ergänzen , würden Sie das ip linkoder ip link show INTERFACEwie folgt interpretieren .

Dies ist ein Port, der administrativ aktiv, aber physisch inaktiv ist:

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

Mit anderen Worten: Das UPangezeigte Symbol zeigt an, dass das System für den Versuch konfiguriert ist, die Netzwerkkarte für das Netzwerk zu verwenden. Die NO-CARRIERhier erfahren Sie , was das Problem zu verhindern , dass Arbeits Vernetzung ist.

Dies ist ein Port, der administrativ inaktiv ist (seine physische Schicht ist technisch gesehen "inaktiv" - es ist eine VM):

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

Schließlich funktioniert dieser Port normal:

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

Es ist administrativ UP, das LOWER_UPzeigt an, dass die physikalische Schicht arbeitet (dh es gibt einen Träger), und das zweite UPbestätigt (in der Tat), dass die IP-Schicht aktiv ist.

Ich wurde von Agrue gegessen
quelle