перевірити, чи налаштовано інтерфейс eth0 (налаштовано)


30

Мені потрібно перевірити сценарій, чи eth0налаштований він. Якщо так, сценарій нічого не зробить. Інакше воно почнеться wlan0. (Я не хочу, щоб і те, eth0і інше wlan0було вгору).

Що було б найпростішим способом перевірити, чи eth0вже працює?

Я використовую Debian Wheezy

ПОЯСНЕННЯ:

Я хотів би перевірити не тільки eth0підключення кабелю , але й інтерфейс налаштований (тобто у нього встановлений статичний IP, або він отримав DHCP IP). Якщо кабель підключений, але eth0неправильно налаштований, я хочу запуститиwlan0


2
Я не впевнений у тому, що збираюся сказати, але cat /sys/class/net/ | grep eth0повинен надати вам легко проаналізовані дані. Ви також можете зробитиsudo ethtool eth0 | grep Link
Kiwy

Відповіді:


45

Зробити це можна багатьма способами. Ось приклад:

$ cat /sys/class/net/eth0/operstate
up

5
На жаль, це не гарантує повного налаштування інтерфейсу. Ви можете котити /sys/class/net/eth0/carrier, щоб перевірити сигнал, але він все ще може не мати оренди DHCP тощо.
orodbhen

7
ip a show ethX up

Якщо нічого не відображається, то ваш інтерфейс не працює


Цей метод: "ip a show ethX up" та перевірка на вихід, недостатній
Джошуа Клейтон

5
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 

Отож, тут ми grepє всюдисущим ipінструментом stdoutдля рядка, який містить як наш інтерфейс, що цікавить, так і фразу "state UP" (завдяки @Lekensteyn за вказівку на необхідність трохи більше специфіки, ніж просто UP). Ми використовуємо аргументa як коротку форму для цього addressі цього повинно бути достатньо, щоб отримати список всіх налаштованих мережевих карт в системі.

Одна перевага використання ip може бути те, що він дійсно повинен бути доступний всюди - наприклад, я зазвичай конфігурую мережеві пристрої свого телефону Android, наприклад.

Вони :colonsвикористовуються для уникнення часткових матчів - таким чином ми гарантуємо матч на eth0відміну від інакше можливогоsomeothereth0 або eth007.

Дякую @RaphaelAhrens за те, що підштовхнув мене до правильності та пояснив моє рішення.

Редагувати:

Для вирішення поточних вимог ви можете:

ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'

Вищенаведене буде надрукувати ip-адресу CIDR лише у тому випадку, якщо ваша ціль $if- UP, підключений, і має один. Для ipv6 рішення настільки ж просто, лише з незначними модифікаціями.

Якщо вам це не подобається, sedви можете досягти подібних результатів з іншим |pipe ... grepі додавати -Aконтекстний варіант до першого grep- але мені подобається sed.


1
Вам слід пояснити, що ви робите. Так що кожен може отримати користь від вашої відповіді.
Рафаель Аренс

5
Цього недостатньо. Вихідний сигнал також містить , UPякщо пристрій, але кабель не підключається: 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000. Крім того, можна вказати пристрій , щоб уникнути помилкових спрацьовувань: ip addr show dev eth0.
Лекенштейн

0

Інші методи не працюють, але цей працює (як мінімум на Ubuntu):

while true; do
    ip route | grep "linkdown"
    if [ $? -eq 0 ]; then
        sleep 1  # network not yet up
    else
        break   # network up
    fi
done

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