Перевірте, чи підключено мережевий кабель без підключення інтерфейсу


9

Я намагаюся ідентифікувати NIC на ~ 20 віддалених серверах (2-6 NIC на кожному сервері). Для початку хочу визначити тих, хто готовий до використання та вільних. Як я можу перевірити стан фізичних носіїв? Я знаю кілька способів, у тому числі ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, але всі вони вимагають , щоб інтерфейс вгору. Я не хочу піднімати ВСІ інтерфейси. Не знаю чому, але мені не подобається, щоб увімкнено, але не налаштовано інтерфейси в мережі. Чи є спосіб я уникнути цього?

Або я просто помиляюся і нічого поганого в тому, що всі інтерфейси налаштовані (і не налаштовані)? Навіть якщо вони підключені?

Відповіді:


5

ip link show, за замовчуванням показує всі інтерфейси, використовуючи ip link show upдля показу лише запущені інтерфейси. Ви можете використовувати фільтри, щоб отримати різницю.


Ага. І кабель, що відсутній, відобразиться як НІ-КАРІР, так?
minaev

Бінго. Дякую. І ip addr showнавіть додає IP-адреси до виводу.
мінаєв

2
Це не працює на моїй машині (Debian стиснення, драйвер skge): ip link showне показує нічого іншого, як “ВНИЗ”. ipповідомляє ту ж інформацію, що ifconfigі /sys/class/net/в будь-якому випадку, чи не так? Чи отримуєте ви інформацію про стан посилань, ipщо відрізняється від того, що ви отримуєте під /sys/class/netабо ifconfigна вашому пристрої? Або ви отримуєте статус посилань про інтерфейси, які знаходяться внизу /sys/class/net(я отримую /sys/class/net/eth0/carrier: Invalid argument)?
Жил "ТАК - перестань бути злим"

він не працює, якщо інтерфейс не працює.
Володимир Кунщиков

@Nikhil Mulley Що ти розумієш під фільтрами?
Джо

2

Ось мій сценарій для оновлення маршрутів за замовчуванням на основі стану з'єднання в режимі реального часу . (працює у фоновому режимі) працює з декількома інтерфейсами, я визначаю пріоритети у /tmp/${iface}.metricфайлах, «найкращий» підключений інтерфейс буде використовуватися для маршрутизації трафіку за замовчуванням.

#!/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

0

ip link show відображає прапор "LOWER_UP", щоб вказати кабель підключений. Ви також можете перевірити / sys / class / net / eth * / оперстату або перевізника. Однак усі вони працюють лише для інтерфейсу з прив’язаною до нього IP-адресою.


1
Цікава інформація, але насправді не відповідає Original Post.
X Тянь

навіть якщо я ще не додав et, він також скаже "вгору".
kangear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.