Vérifiez si le câble réseau est branché sans mettre l'interface en place

9

J'essaie d'identifier les NIC sur ~ 20 serveurs distants (2-6 NIC sur chaque serveur). Pour commencer, je veux identifier ceux qui sont prêts à l'emploi et ceux gratuits. Comment puis-je vérifier l'état du support physique? Je connais des moyens, y compris ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carriermais tout ce qu'ils exigent que l'interface est en place. Je ne veux pas afficher TOUTES les interfaces. Je ne sais pas pourquoi, mais je n'aime pas avoir activé, mais pas configuré les interfaces dans le réseau. Existe-t-il un moyen d'éviter cela?

Ou je me trompe et il n'y a rien de mal à ce que toutes les interfaces soient en place (et non configurées)? Même s'ils sont branchés?

minaev
la source

Réponses:

5

ip link show, affiche par défaut toutes les interfaces, utilisez ip link show uppour afficher uniquement les interfaces en cours d'exécution. Vous pouvez utiliser des filtres pour faire la différence.

Nikhil Mulley
la source
Aha. Et le câble manquant apparaîtra comme NO-CARRIER, non?
minaev
Bingo. Merci. Et ip addr showajoute même des adresses IP à la sortie.
minaev
2
Cela ne fonctionne pas sur ma machine (Debian squeeze, skge driver): n'affiche ip link showrien de plus que «DOWN». iprapporte les mêmes informations que ifconfiget /sys/class/net/dans tous les cas, non? Obtenez-vous des informations sur l'état des liens ipdifférentes de celles que vous obtenez sous /sys/class/netou ifconfigsur votre machine? Ou obtenez-vous l'état des liens sur les interfaces qui sont en panne /sys/class/net(je reçois /sys/class/net/eth0/carrier: Invalid argument)?
Gilles 'SO- arrête d'être méchant'
cela ne fonctionne pas si l'interface est en panne.
Vladimir Kunschikov
@Nikhil Mulley Qu'entendez-vous par filtres?
Joe
2

Voici mon script pour mettre à jour les routes par défaut en fonction de l'état de la connexion en temps réel . (s'exécute en arrière-plan) fonctionne avec plusieurs interfaces, je définis les priorités dans les /tmp/${iface}.metricfichiers, la «meilleure» interface connectée sera utilisée pour acheminer le trafic par défaut.

#!/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
la source
0

ip link show affiche le drapeau "LOWER_UP" pour indiquer que le câble est branché. Vous pouvez également rechercher / sys / class / net / eth * / operstate ou carrier. Cependant, tous ces éléments ne fonctionnent que pour une interface avec une adresse IP liée.

julien
la source
1
Des informations intéressantes, mais ne répondent pas vraiment au message d'origine.
X Tian
même si je n'ai pas de plugin eth, il dira aussi "up".
kangear