Команда ethtool позволяет использовать утилиту с соответствующим именем для изменения низкоуровневых параметров сетевых карт. Данная утилита способна изменять огромное количество параметров сетевых карт, большая часть из которых не интересна обычным пользователям. Кроме того, драйверы сетевых карт домашних компьютеров и ноутбуков не позволяют изменять большую часть поддерживаемых утилитой параметров, поэтому в большинстве случаев она используется для проверки и установки скорости сетевого соединения, а также режима работы сетевой карты.
Базовый синтаксис команды выглядит следующим образом:
# ethtool [параметры] имя-сетевого-интерфейса
Утилита поддерживает огромное количество параметров. Наиболее важными из них являются параметр -i, позволяющий получить информацию о драйвере сетевой карты, параметр -S, позволяющий получить статистику работы сетевой карты в случае поддержки этой функции драйвером, параметр -s, позволяющий установить скорость и режим работы сетевой карты, параметры -k и -K, позволяющие получить и установить значения параметров режима передачи данных, а также параметр -p, позволяющий идентифицировать порт сетевой карты с помощью мигающего индикатора.
Утилита работает с именами сетевых интерфейсов, связанных с сетевыми картами, поэтому для работы с ней нужно выяснить имя сетевого интерфейса, связанного с интересующей вас сетевой картой. Для этого может использоваться одна из следующих команд:
# ifconfig -a
# ip a s
В первую очередь вам придется установить рассматриваемую утилиту; проще всего это сделать с помощью терминала путем исполнения соответствующей вашему дистрибутиву команды. Подробнее об установке программного обеспечения рассказано в данном разделе.
Команда для Linux Mint, Ubuntu и Debian:
$ sudo apt-get install ethtool
Команда для Fedora Workstation:
$ sudo dnf install ethtool
Для определения имени сетевого интерфейса, которое нужно передавать утилите ethtool, следует использовать утилиту ifconfig или ip. Вторая утилита предустановлена во всех популярных дистрибутивах, поэтому рассмотрим пример ее использования:
# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 8c:89:a5:57:76:ba brd ff:ff:ff:ff:ff:ff
inet 192.168.188.120/24 brd 192.168.188.255 scope global dynamic noprefixroute enp3s0
valid_lft 111sec preferred_lft 111sec
inet6 fe80::8e89:a5ff:fe57:76ba/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wwp5s0f2u1u4i1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 02:50:f3:00:00:00 brd ff:ff:ff:ff:ff:ff
Сетевое соединение через интересующую нас сетевую карту установлено, поэтому сетевой интерфейс с идентификатором 3 под названием wwp5s0f2u1u4i1 не подходит (state DOWN означает, что сетевой интерфейс деактивирован). Сетевой интерфейс с идентификатором 1 под названием lo также не подходит (state UNKNOWN означает, что сетевой интерфейс находится в неизвестном состоянии), кроме того, по флагу LOOPBACK можно установить, что это кольцевой интерфейс. Остается сетевой интерфейс с идентификатором 2 и именем enp3s0 в активном состоянии (state UP) с приведенными параметрами. Именно это имя и нужно использовать.
Для получения параметров сетевой карты достаточно использовать утилиту без каких-либо параметров:
# ethtool enp3s0
Settings for enp3s0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: pg
Wake-on: d
Current message level: 0x0000003f (63)
drv probe link timer ifdown ifup
Link detected: yes
Очевидно, что сетевая карта поддерживает сетевое соединение (Link detected: yes) в полнодуплексном режиме передачи (Duplex: Full) с максимальной скоростью в 100 Мб/с (Speed: 100Mb/s) через витую пару (Port: Twisted Pair). При этом она может передавать данные даже в полнодуплексном режиме со скоростью 1 Гб/с (Supported link modes: 10baseT/Half ... 1000baseT/Full), поддерживает автосогласование (Supports auto-negotiation: Yes) и использует его (Advertised auto-negotiation: Yes).
Для установки параметров сетевого соединения следует использовать параметр -s:
# ethtool -s enp3s0 speed 10 duplex full autoneg off
Это команда для снижения скорости передачи до 10 Мб/с (speed 10) в полнодуплексном режиме (duplex full) и отключения функции автосогласования (autoneg off). Для прверки изменений достаточно использовать утилиту без каких-либо параметров:
# ethtool enp3s0
Settings for enp3s0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: No
Advertised FEC modes: Not reported
Speed: 10Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: pg
Wake-on: d
Current message level: 0x0000003f (63)
drv probe link timer ifdown ifup
Link detected: yes
Очевидно, что теперь соединение установлено на скорости 10 Мб/с (Speed: 10Mb/s) без автосогласования (Advertised auto-negotiation: No).
Для получения параметров драйвера сетевой карты достаточно использовать параметр -i:
# ethtool -i enp3s0
driver: atl1c
version: 1.0.1.1-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: no
supports-test: no
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
Очевидно, для управления сетевой картой используется драйвер atl1c версии 1.0.1.1-NAPI. Карта использует порт 0000:03:00.0, ее драйвер не не предоставляет доступа к механизмам сбора статистики (supports-statistics: no) и тестирования (supports-test: no).
Для идентификации порта сетевой карты с помощью мигающего индикатора достаточно использовать параметр -p:
# ethtool -p enp3s0 10
Cannot identify NIC: Operation not supported
Значение 10 устанавливает длительность периода мигания индикатора, равную 10 секундам. Очевидно, в моем случае сетевая карта не поддерживает подобную функцию.