как проверить физическое состояние порта ethernet в linux?

<p>я хочу проверить, является ли указанный ethx физически вверх или вниз. как мне это сделать с помощью командной строки?</p>

<p><code>$ ethtool <eth?>например:$ ethtool eth0 </code></pre><p>обеспечивает:</p><pre><code>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 </code></pre>

<p>проверьте <code>/sys/class/net/eth0/operstate</code> и другие файлы в этом каталоге.</p><p>насколько я знаю, это специфично для linux 2.6+, но обеспечивает чистый интерфейс для драйвера ядра.</p><p>полная документация для этой части файловой системы <code>sys</code> может быть найдена здесь:</p><p> <a href="https://www.kernel.org/doc/documentation/abi/testing/sysfs-class-net">https://www.kernel.org/doc/documentation/abi/testing/sysfs-class-net</a> </p>

<p><code>ethtool [interface]</code></p><p>последняя строка показывает, что вы хотите:</p><pre> # ethtool eth0 настройки для eth0: поддерживаемые порты: [tp] поддерживаемые режимы связи: 10baset/half 10baset/full 100baset/half 100baset/full 1000baset/full поддерживает автоматическое согласование: да объявленные режимы связи: 10baset/half 10baset/full 100baset/half 100baset/full 1000baset/full объявленное автосогласование: да скорость: 1000 мбит/с дуплекс: полный порт: витая пара phyad: 0 приемопередатчик: внутренний автосогласование: включено поддерживает включение: g включение: d текущий уровень сообщения : 0x00000037 (55) обнаружена ссылка: да </pre>

<pre><code>ip link show </code></pre><p>другой. старый добрый</p><pre><code>ifconfig dev\_name </code></pre><p>или</p><pre><code>ifconfig -a </code></pre><p>также скажет вам, если интерфейс работает. <em>примечание:</em> будьте осторожны с этими методами, поскольку они могут показывать устаревшую информацию о состоянии ссылки.</p>

<pre><code>dmesg | grep eth </code></pre><p>вы должны увидеть все статусы</p>

<p>вы также можете использовать mii-tool, чтобы увидеть, работает ли ссылка, и проверить согласованную скорость.</p><blockquote> <p># mii-tool<br> eth0: договорная 100basetx-fd, ссылка в порядке</p> </blockquote>

<p>чтобы быстро добавить ответ @ <a href="https://serverfault.com/users/5392/goo">goo</a> , вы должны интерпретировать <code>ip link</code> или <code>ip link show interface</code> следующее.</p><p>это порт, который административно работает, но физически отключен:</p><p><code>2: eth0: <no-carrier,broadcast,multicast,up> mtu 1500 qdisc pfifo\_fast state down mode default group default qlen 1000</code></p><p>другими словами, <code>up</code>, который вы видите, указывает на то, что система настроена на попытку использования nic для работы в сети. <code>no-carrier</code> здесь рассказывается, в чем проблема, препятствующая работе сети.</p><p>это порт, который административно недоступен (его физический уровень "вверх", технически - это виртуальная машина):</p><p><code>3: eth1: <broadcast,multicast> mtu 1500 qdisc noop state down mode default group default qlen 1000</code></p><p>наконец, этот порт работает нормально:</p><p><code>2: eth0: <broadcast,multicast,up,lower\_up> mtu 1500 qdisc fq state up mode default group default qlen 1000</code></p><p>это административно <code>up</code>, <code>lower\_up</code> указывает, что физический уровень работает (т. е. есть носитель), а второй <code>up</code> подтверждает (фактически), что уровень ip работает.</p>

<p>вы можете получить полную информацию с помощью команды ниже</p><pre><code>ethtool eth0 </code></pre><p>и если вы просто хотите увидеть статус ссылки, введите команду ниже</p><pre><code>mii-tool eth0 </code></pre>

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

<p>если ваша система использует <a href="http://linux.die.net/man/8/ifplugd"><code>ifplugd</code></a> (например, на raspberry pi с raspbian), то вы можете использовать связанный инструмент состояния <code>ifplugstatus</code> для получения статуса соединения всех интерфейсов:</p><pre><code>ifplugstatus </code></pre><p>или конкретный интерфейс (например, eth0):</p><pre><code>ifplugstatus eth0 </code></pre>