Sprawdź, czy kabel sieciowy jest podłączony bez uruchamiania interfejsu

9

Próbuję zidentyfikować karty sieciowe na ~ 20 zdalnych serwerach (2-6 kart sieciowych na każdym serwerze). Na początek chcę zidentyfikować te gotowe do użycia i darmowe. Jak mogę sprawdzić stan fizycznych nośników? Znam kilka sposobów, w tym ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, ale wszystkie one wymagają, że interfejs jest gotowy. Nie chcę uruchamiać WSZYSTKICH interfejsów. Nie wiem dlaczego, ale nie lubię mieć włączonych, ale nie skonfigurowanych interfejsów w sieci. Czy istnieje sposób, aby tego uniknąć?

A może po prostu się mylę i nie ma nic złego w tym, że wszystkie interfejsy działają (i nie są skonfigurowane)? Nawet jeśli są podłączone?

minaev
źródło

Odpowiedzi:

5

ip link show, domyślnie pokazuje wszystkie interfejsy, użyj, ip link show upaby pokazać tylko działające interfejsy. Możesz użyć filtrów, aby uzyskać różnicę.

Nikhil Mulley
źródło
Aha. A brakujący kabel pojawi się jako BRAK PRZEWOŹNIKA, prawda?
minaev
Bingo Dzięki. A ip addr shownawet dodaje adresy IP do danych wyjściowych.
minaev
2
To nie działa na moim komputerze (Debian squeeze, skge driver): ip link showpokazuje tylko „DOWN”. ipRaporty te same informacje, ifconfiga /sys/class/net/w każdym razie, nie? Czy otrzymujesz informacje o statusie linku, ipktóre różnią się od tego, co dostajesz poniżej /sys/class/netlub ifconfigna komputerze? Czy otrzymujesz status linku na temat interfejsów, które są wyłączone /sys/class/net(dostaję /sys/class/net/eth0/carrier: Invalid argument)?
Gilles „SO- przestań być zły”
nie działa, jeśli interfejs jest wyłączony.
Vladimir Kunschikov,
@Nikhil Mulley Co rozumiesz przez filtry?
Joe
2

Oto mój skrypt do aktualizacji domyślnych tras na podstawie stanu połączenia w czasie rzeczywistym . (działa w tle) współpracuje z wieloma interfejsami, określam priorytety w /tmp/${iface}.metricplikach, „najlepszy” podłączony interfejs będzie używany do kierowania domyślnego ruchu.

#!/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
użytkownik211708
źródło
0

ip link show wyświetla flagę „LOWER_UP” wskazującą, że kabel jest podłączony. Możesz także sprawdzić / sys / class / net / eth * / operstate lub operator. Wszystkie te działają jednak tylko w przypadku interfejsu z powiązanym adresem IP.

Julien
źródło
1
Interesujące informacje, ale tak naprawdę nie odpowiadają oryginalnemu wpisowi.
X Tian
nawet jeśli nie mam wtyczki eth, powie także „up”.
kangear 17.04.15