Как проверить физическое состояние порта Ethernet в Linux?

64

Я хочу проверить, является ли указанный ethX физически вверх или вниз. Как мне это сделать с помощью командной строки?

Джадер Диас
источник

Ответы:

68

$ ethtool <eth?>

Например:

$ ethtool eth0

обеспечивает:

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes
Destroyica
источник
46

Проверьте /sys/class/net/eth0/operstateи другие файлы в этом каталоге.

Насколько я знаю, это специфично для Linux 2.6+, но обеспечивает чистый интерфейс для драйвера ядра.

Полная документация для этой части sysфайловой системы может быть найдена здесь:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net

Linuxtraveler
источник
10
/ sys / class / net / eth0 / carrier был для меня идеальным ответом на этот вопрос.
за Knytt
Отличный ответ. Небольшое дополнение: / run / network / ifstate также содержит некоторую полезную информацию.
Пауло Андре Хааке,
34

ethtool [interface]

последняя строка показывает, что вы хотите:

# ethtool eth0
Настройки для eth0:
        Поддерживаемые порты: [TP]
        Поддерживаемые режимы связи: 10baseT / Half 10baseT / Full 
                                100baseT / половина 100baseT / полный 
                                1000baseT / Full 
        Поддерживает автосогласование: да
        Рекламируемые режимы связи: 10baseT / Half 10baseT / Full 
                                100baseT / половина 100baseT / полный 
                                1000baseT / Full 
        Объявленные автосогласования: Да
        Скорость: 1000 Мб / с
        Дуплекс: Полный
        Порт: витая пара
        PHYAD: 0
        Трансивер: внутренний
        Авто-переговоры: вкл
        Поддерживает Wake-On: г
        Пробуждение: d
        Текущий уровень сообщения: 0x00000037 (55)
        Ссылка обнаружена: да
Kurt
источник
4
Если вы проверите это: en.wikipedia.org/wiki/OSI_model . Вы увидите, что последняя строка о другом слое: канальный слой. Я только что проверил это. С плохим кабелем физический уровень был, но не канальный уровень. Затем я переключился на другой кабель, и все слои подошли.
Джадер Диас
25
ip link show

Другой. Старый добрый

ifconfig dev_name

или же

ifconfig -a

также скажет вам, если интерфейс работает. ПРИМЕЧАНИЕ. Будьте осторожны с этими методами, поскольку они могут отображать устаревшую информацию о состоянии ссылки.

липкая
источник
Я думаю, что это был лучший ответ - ethtool не является стандартным в моем дистрибутиве Ubuntu, поэтому он не помогает, если на коробке нет подключения к сети.
user20010
4
Я верю, что ifconfig иногда будет показывать устаревшие данные. Он может показывать UP, когда ссылка не работает, но интерфейс ethtool всегда будет показывать правильную информацию AFAIK.
sed_and_done
2
Я думаю, что @sed_and_done прав. На виртуальной машине Red Hat, если я отключаю NIC, ethtool немедленно показывает Link detected: noвместо Link detected: yes, а ip link show показывает <NO-CARRIER,BROADCAST,MULTICAST,UP>вместо <BROADCAST,MULTICAST,UP,LOWER_UP>, но показывает ifconfig -aUP BROADCAST MULTICAST MTU:1500 Metric:1 , что аналогично подключению NIC.
Ади Инбар
16
dmesg | grep eth

вы должны увидеть все статусы

lepole
источник
Это единственный, который работает, если у кого-то нет прав администратора.
Брайан Б
dmesg требует root на Slackware 14.0
AnonymousLurker
Нет, это не так. Я только что проверил - пока он работает для меня на eth0устройстве, но не на eth2устройстве.
Привет-Ангел
9

Вы также можете использовать mii-tool, чтобы увидеть, работает ли ссылка, и проверить согласованную скорость.

# mii-tool
eth0: согласовано 100baseTx-FD, ссылка в порядке

Alakdae
источник
4
mii-tool устарел и не работает для интерфейсов GbE.
Дейв Чейни
2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik
Страница man для mii-tool предлагает использовать ethtool. Тем не менее, mii-tool продолжает выполнять свою работу, что более полезно, если указан параметр -v (подробный).
Дэвид Рамирес
3

Вы можете получить полную информацию с помощью команды ниже

ethtool eth0

И если вы просто хотите увидеть статус ссылки, введите команду ниже

mii-tool eth0
Никунь Ранпура
источник
2

Если ваша система использует ifplugd(например, на Raspberry Pi с Raspbian), вы можете использовать связанный инструмент состояния ifplugstatusдля получения статуса соединения всех интерфейсов:

ifplugstatus

или конкретный интерфейс (например, eth0):

ifplugstatus eth0
Пирз
источник
2

netplugd - это сервис, который может запускать программы, когда кабель подключен или кабель отключен. Таким образом, командная строка будет выглядеть как grep / var / log / messages или dmesg для вывода netplugd.

RJT
источник
Ну, не совсем запрошенный ответ, но интересный, чтобы знать. По крайней мере для меня.
Сопалайо де Арриерес
2

Чтобы быстро добавить ответ @ goo , вы должны интерпретировать ip linkили ip link show INTERFACEследующим образом.

Это порт, который административно работает, но физически отключен:

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000

Другими словами, UPвы можете видеть, что система настроена на попытку использовать сетевой адаптер для работы в сети. NO-CARRIERЗдесь говорит вам , что проблема предотвращения сети от работы есть.

Это порт, который административно отключен (его физический уровень «вверх», технически - это виртуальная машина):

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

Наконец, этот порт работает нормально:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000

Это в административном UP, то LOWER_UPуказывает на физический уровень работает (то есть является носителем), а второй UPподтверждает (в сущности) слой IP - вверх.

iwaseatenbyagrue
источник