Как я могу найти доступные сетевые интерфейсы?

88

Это касается linux, но если кто-нибудь знает общий метод * nix, это было бы хорошо.

Вчера я загрузил систему с подключенным кабелем Ethernet. «NetworkManager» не установлен, поэтому после его запуска я отправился искать имя интерфейса Ethernet, ifconfigчтобы вручную запустить клиент DHCP, но он не показал ничего, кроме lo,

Сетевая карта была указана через lspci, и соответствующий драйвер ядра был загружен. Система обычно использует Wi-Fi, и я мог вспомнить имя интерфейса для этого wlan0. Когда я попробовал ifconfig wlan0 up, wlan0появился. Но только имена локальных сетей интерфейса я мог помнить , были eth[N]и em[N]- ни один из них работал.

Этот документ ссылается на «предсказуемые имена интерфейсов», но не помогает объяснить, какими они могут быть в простых терминах. Это относится к фрагменту исходного кода, который подразумевает, что имя в этом случае может быть выведено из шины PCI и номеров слотов, что выглядит как излишне сложная проблема.

Другие поиски привели меня к мысли, что это может быть определено systemdв связи с udev, но есть почти 100 файлов /usr/lib/udev/rules.dи потратить час, пытаясь определить, где (и если ) есть файл конфигурации systemd для этого, также кажется смешным.

Также было бы неплохо знать наверняка, что они доступны, а не только как они могут быть названы, если они есть, так что я могу исключить проблемы с оборудованием и т. Д. Разве нет простого способа найти имена доступных сетевых интерфейсов? на Linux?

лютик золотистый
источник
В вопросе вы заявляете, что использовали, ip linkно затем вы принимаете ответ, который предполагает, ip link showчто делает то же самое. Почему?
Павел Шимерда
@ Павел Шимерда Ты прав. Возможно, я действительно использовал ip route- я написал этот вопрос на следующий день после того, как проблема была решена (см. Мой собственный ответ); Я не имею привычки использовать ipи не ценю чрезмерно спартанские справочные страницы, поэтому я, вероятно, отказался от них после одной попытки и начал проходить /sys, так как я знал, что kmod был загружен и т. Д., И это было более простым мне. Я полностью уберу это из вопроса.
Златовласка
Страницы руководства для iproute2 довольно хороши в настоящее время, я полагаю, вы используете и более старую версию пакета.
Павел Шимерда

Ответы:

93

Самый простой из известных мне методов перечисления всех ваших интерфейсов:

ifconfig -a

РЕДАКТИРОВАТЬ

Если вы находитесь в системе, где это было сделано устаревшим, вы можете использовать

ip link show
Эллиот Фриш
источник
3
Если бы я только что посмотрел на справочную страницу! Интересно узнать, ipесть ли параллель, поскольку предположительно ifconfig «устарел» в пользу этой (IMO) более тупой и менее удобной команды.
Златовласка
2
Первое, что у меня написано man ifconfig: «ПРИМЕЧАНИЕ. Эта программа устарела! Для замены проверьте ip ...» Это может быть характерно для Linux. Надеюсь, они должны сохранить его для обратной совместимости с чем-либо.
Златовласка
4
ifconfig устарела, TMK, поэтому мы должны попытаться показать примеры использования ip. Смотрите статью ifconfig в Википедии: en.wikipedia.org/wiki/Ifconfig .
SLM
3
@slm Несмотря на то, что вопрос (был) специфичен для Linux, пример, использующий оба, кажется хорошим, поскольку пользователи BSD могут привыкнуть просматривать страницы "linux" в любом случае - фактически я вычеркну linux из заголовка и отредактирую немного (первоначально это был ответ на свой вопрос, и я не думал, что был портативный метод).
Златовласка
5
ifconfig устарела? Ну же. Эта команда существует уже около 30 лет.
Майкл Мартинес
72

Ядро перечисляет их по именам /sys, как по отдельности (например, в дереве устройств PCI) - хотя найти их там, если вы не знаете, с чего начать, непросто - и вместе через символические ссылки в /sys/class/net. Например:

> ls /sys/class/net
em1 lo wlp6so

Другой пример:

> ls /sys/class/net
lo p6s1 wlan0

Если вы не уверены, что именно, вы можете просто поставить их всех:

ifconfig [name] up 

Или же:

ip link set [name] up

А затем посмотрите на (довольно ясные) подсказки, перечисленные ifconfig(без аргументов). Исходный код systemd, связанный с документом Freedesktop.org, также ссылается на:

Two character prefixes based on the type of interface:
 *   en -- ethernet
 *   sl -- serial line IP (slip)
 *   wl -- wlan
 *   ww -- wwan

Хотя в одном из случаев выше ( p6s1) префикса нет.

лютик золотистый
источник
Я получаю префикс для Ethernet eth. Я считаю, enчто для беспроводной локальной сети.
Каушал Моди
4
@kaushalmodi eth- это ядро ​​Linux; systemd реализует через udev предсказуемые имена интерфейсов Freedesktop.org - ядра не являются предсказуемыми в том же смысле, что является причиной всей путаницы. Цитата выше явно вырезана и вставлена отсюда . Это еще не все, поскольку у меня нет системных компьютеров, использующих enEthernet; ближе всего em, другие совершенно разные. Вы можете прочитать ссылку Freedesk.org в вопросе самостоятельно для получения дополнительной информации.
Златовласка
4
[Позже] Когда-нибудь в прошлом году Fedora или systemd исправили это? Мой PCI Ethernet сейчас eno1.
Златовласка
10

Я всегда делаю cat /proc/net/devэто просто и легко запомнить

Мохаммед Рафи
источник
4
но это только дает активные интерфейсы, а не все интерфейсы
Грант Боумен
4

ifconfig= Solaris
ipconfig= Windows
ip= Linux

Это я знаю, но, безусловно, открыт для дополнений и исправлений.

Мик михера
источник
2
А? ifconfig - это тоже Linux.
fpmurphy
4
@ fpmurphy1 Прочитайте первый абзац (после синопсиса) man ifconfigо системе Linux.
Златовласка