Überprüfen Sie, ob das Netzwerkkabel eingesteckt ist, ohne die Schnittstelle aufzurufen

9

Ich versuche, NICs auf ~ 20 Remote-Servern zu identifizieren (2-6 NICs auf jedem Server). Zunächst möchte ich die gebrauchsfertigen und kostenlosen identifizieren. Wie kann ich den Status der physischen Medien überprüfen? Ich weiß , einige Möglichkeiten, einschließlich ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, aber alles , was sie verlangen , dass die Schnittstelle aktiviert ist. Ich möchte nicht ALLE Schnittstellen aufrufen. Ich weiß nicht warum, aber ich möchte keine aktivierten, aber nicht konfigurierten Schnittstellen im Netzwerk haben. Gibt es eine Möglichkeit, dies zu vermeiden?

Oder irre ich mich einfach und es ist nichts Schlimmes daran, dass alle Schnittstellen aktiv (und nicht konfiguriert) sind? Auch wenn sie eingesteckt sind?

Minaev
quelle

Antworten:

5

ip link showStandardmäßig werden alle Schnittstellen angezeigt. Verwenden Sie diese Option, ip link show upum nur die laufenden Schnittstellen anzuzeigen. Sie können Filter verwenden, um den Unterschied zu ermitteln.

Nikhil Mulley
quelle
Aha. Und das fehlende Kabel wird als NO-CARRIER angezeigt, oder?
Minaev
Bingo. Vielen Dank. Und ip addr showfügt der Ausgabe sogar IP-Adressen hinzu.
Minaev
2
Das funktioniert auf meinem Computer nicht (Debian Squeeze, Skge-Treiber): ip link showZeigt nichts weiter als "DOWN". ipmeldet die gleichen Informationen wie ifconfigund /sys/class/net/auf jeden Fall, nicht wahr? Erhalten Sie Linkstatusinformationen, die sich von ipdenen unterscheiden, die Sie unter /sys/class/netoder ifconfigauf Ihrem Computer erhalten? Oder erhalten Sie den Linkstatus für Schnittstellen, die sich in /sys/class/net(ich verstehe /sys/class/net/eth0/carrier: Invalid argument) befinden?
Gilles 'SO - hör auf böse zu sein'
Es funktioniert nicht, wenn die Schnittstelle nicht verfügbar ist.
Vladimir Kunschikov
@ Nikil Mulley Was meinst du mit Filtern?
Joe
2

Hier ist mein Skript zum Aktualisieren von Standardrouten basierend auf dem Status der Verbindung in Echtzeit . (läuft im Hintergrund) funktioniert mit mehreren Schnittstellen, ich definiere Prioritäten in den /tmp/${iface}.metricDateien, die 'beste' verbundene Schnittstelle wird verwendet, um den Standardverkehr weiterzuleiten.

#!/bin/sh

/sbin/ip monitor link | while read -r line
do
    iface=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\1/p')
    state=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\2/p')
    if [ "$iface" != "" ] ; then
        echo "$iface is $state"
        if [ -f /tmp/${iface}.metric ] ; then
                echo "updating default route for ${iface}"
                if [ "$state" = "DOWN" ] ; then
                        ip route del default dev "${iface}"
                else
                        ip route add default dev "${iface}" metric `cat /tmp/${iface}.metric`
                fi
        fi
    fi
done
user211708
quelle
0

ip link show zeigt das Flag "LOWER_UP" an, um das eingesteckte Kabel anzuzeigen. Sie können auch nach / sys / class / net / eth * / operstate oder Carrier suchen. All dies funktioniert jedoch nur für eine Schnittstelle, an die eine IP-Adresse gebunden ist.

julien
quelle
1
Interessante Informationen, beantwortet aber Original Post nicht wirklich.
X Tian
Auch wenn ich eth nicht Plugin habe, wird es auch "up" sagen.
Kangear