Як я можу знайти доступні мережеві інтерфейси?


88

Це стосується Linux, але якщо хтось знає про загальний * nix метод, це було б добре.

Я вчора завантажив систему із підключеним кабелем Ethernet. "NetworkManager" не встановлений, тому, як тільки він почався, я пішов шукати ім'я інтерфейсу Ethernet, ifconfigщоб запустити клієнт DHCP вручну, але він не показав нічого, крім lo.

NIC був внесений до списку через lspciі завантажений відповідний драйвер ядра. Система зазвичай використовує wifi, і я міг запам'ятати ім'я інтерфейсу для цього wlan0. Коли я спробував ifconfig wlan0 up, wlan0з’явився. Але єдині імена інтерфейсу Ethernet, які я міг запам'ятати, були eth[N]і em[N]- жодне з яких не працювало.

Цей документ посилається на "передбачувані імена інтерфейсу", але не дає змоги пояснити, що вони можуть бути простими словами. Він посилається на фрагмент вихідного коду, який передбачає, що ім'я в цьому випадку може бути виведене з номерів шини PCI та слотів, що здається зайвим складним клопотом.

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

Також було б непогано знати напевно, що вони доступні, а не лише те, як вони можуть бути названі, якщо вони є, тому я можу виключити апаратні проблеми тощо. Чи не існує простого способу пошуку назв доступних мережевих інтерфейсів на Linux?


У запитанні ви заявляєте, що використовували, ip linkале потім приймаєте відповідь, яка підказує, ip link showщо робить саме те саме. Чому?
Павло Шімерда

@ PavelŠimerda Ви маєте рацію. Я, можливо, насправді використав ip route- це питання я написав на наступний день після вирішення проблеми (див. Власну відповідь); Я не маю звички користуватися ipі не ціную надмірно спартанські сторінки, тому я, мабуть, відмовився від неї після однієї спроби і почав перебирати /sys, оскільки знав, що kmod завантажений і т. Д., І це було більш просто для мене. Я повністю зніму це питання.
goldilocks

Сторінки посібника для iproute2 зараз досить хороші, я думаю, ви використовуєте і старішу версію пакета.
Павло Шімерда,

Відповіді:


93

Найпростіший метод, з якого я знаю, перерахувати всі ваші інтерфейси - це

ifconfig -a

EDIT

Якщо ви перебуваєте в системі, де це було застаріло, ви можете використовувати

ip link show

3
Якби я просто переглянув сторінку чоловіка! Будь цікаво знати, чи ipє паралель, оскільки нібито ifconfig "застаріває" на користь цієї (IMO) більш тупої та менш зручної для користувача команди.
goldilocks

2
Перше, що в моєму man ifconfig: "ПРИМІТКА Ця програма застаріла! Для перевірки заміни ip ..." Це може бути специфічно для Linux. Сподіваємось, їм доведеться зберегти це для відсталої сумісності з чимось.
goldilocks

4
ifconfig застарілий, TMK, тому нам слід намагатися показати приклади, використовуючи ip. Дивіться статтю вікіпедії ifconfig: en.wikipedia.org/wiki/Ifconfig .
slm

3
@slm Хоча питання стосується (був) Linux особливості, приклад використання обох здається гарним, оскільки користувачі BSD можуть мати звичку дивитись на "linux" сторінки в будь-якому випадку - адже я вийму Linux із заголовка і відредагую біт (спочатку це було самовідповіді, і я не думав, що існує портативний метод).
goldilocks

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(без аргументів). Системний вихідний код, пов'язаний з документом 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 - ядра непередбачувані в тому ж сенсі, що є причиною всієї плутанини. Цитата вище чітко вирізана звідси . У цьому є більше, ніж у мене, оскільки у мене немає жодних системних машин, які використовують enдля Ethernet; найближчий є em, інші - зовсім інші. Ви можете прочитати посилання Freedesk.org у запитанні самі для отримання додаткових пояснень.
золотинок

4
[Пізніше] Десь у минулому році Fedora чи systemd це виправили? Зараз у мене мережа PCI Ethernet eno1.
золотинки


4

ifconfig= Solaris
ipconfig= Windows
ip= Linux

Це я знаю, але, безумовно, відкритий для доповнень та виправлень.


2
Так? ifconfig також є Linux.
fpmurphy

4
@ fpmurphy1 Прочитайте перший абзац (після конспекту) системи man ifconfigLinux.
goldilocks
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.