Назад | Перейти на главную страницу

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

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

$ 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

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

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

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

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

ethtool [interface]

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

# 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 auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00000037 (55)
        Link detected: yes
ip link show

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

ifconfig dev_name

или

ifconfig -a

также сообщит вам, работает ли интерфейс. НОТА: Будьте осторожны с этими методами, поскольку они могут отображать устаревшую информацию о состоянии ссылки.

dmesg | grep eth

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

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

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

Чтобы быстро добавить в @гуответ, вы бы интерпретировали 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 включен.

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

ethtool eth0

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

mii-tool eth0

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

ifplugstatus

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

ifplugstatus eth0

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