1

В настоящее время я пишу сценарий bash (для Nagios), и я хотел бы иметь возможность определять, работают ли определенные сетевые карты или нет.

Мое лучшее предположение - сделать что-то вроде этого:

ifconfig eth0 | grep UP | wc -l

или же:

 ethtool eth0 | grep "Link detected: yes" | wc -l

Есть ли / оба из этих надежных способов проверки, если сетевая карта работает, или есть лучший вариант? Возможно, на ethtool есть флаг, который будет делать именно то, что я хочу?

4 ответа4

2

Проверьте, работает ли интерфейс:

ip link show eth0 | grep -qs "[<,]UP[,>]"

Проверьте, есть ли у него назначенные IPv4-адреса:

ip -4 addr show eth0 | grep -Eqs "^\s"

В общем, grep | wc -l должен быть заменен на grep -c если вы хотите количество совпадений.

Или grep -qs если вы хотите, чтобы «совпадение / отсутствие совпадения» основывалось на коде выхода: if stuff | grep -qs stuff; then ... fi

1

Я думаю, что это, пожалуй, лучший способ сделать это. Возможно, вы захотите сделать более конкретную обработку на карте, например, grep, который вы предложили с "Link found: yes". убедитесь, что вы экранировали специальные символы, такие как двоеточие, чтобы убедиться, что он правильно найден. Также Вы можете использовать grep для его сегмента IP-адреса, например «192.168.25». для внутреннего IP-адреса класса C. Это будет зависеть от вашей внутренней сети, что бы это ни было. Но я думаю, что это определенно лучший способ сделать это.

Также могут быть некоторые способы для фактического обнаружения изменения и запуска какого-либо события.

1

Команда show из iproute-3.14.0-2 имеет эту опцию:

вверх - отображать только запущенные интерфейсы.

Так что, если вы запустите ip link show eth0 up а интерфейс - вниз, вывод будет пустым.

Чтобы проверить это, смотрите вопрос «проверить, возвращает ли команда строку или ничего в bash» из Переполнения стека. В принципе, что-то вроде этого должно сработать:

test -n "`ip link show eth0 up`"

Он выходит со статусом 0, если eth0 включен.

0

Я думаю, что link detected… не достаточно. Вы также должны выполнить поиск для inet addr поскольку даже если ссылка может быть обнаружена с коммутатора, сетевой адаптер может не иметь действительного IP-адреса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .