¿Cómo puedo encontrar las interfaces de red disponibles?

88

Esto se refiere a Linux, pero si alguien conoce un método general * nix, sería bueno.

Arranqué un sistema ayer con un cable de ethernet enchufado. "NetworkManager" no está instalado, así que una vez que comenzó, busqué el nombre de la interfaz de ethernet ifconfigpara iniciar un cliente DHCP manualmente, pero no mostró nada más que lo.

La NIC se enumeró a través de lspci, y se cargó el controlador de kernel apropiado. El sistema normalmente usa wifi, y podría recordar el nombre de la interfaz para eso wlan0. Cuando lo intenté ifconfig wlan0 up, wlan0apareció. Pero los únicos nombres de interfaz de Ethernet que podía recordar eran eth[N]y em[N]ninguno de los cuales funcionó.

Este documento se refiere a "nombres de interfaz predecibles" pero no hace un buen trabajo al explicar lo que podrían ser en términos simples. Se refiere a un fragmento de código fuente que implica que el nombre en este caso podría deducirse del bus PCI y los números de ranura, lo que parece una molestia innecesariamente complicada.

Otra búsqueda me llevó a creer que esto podría determinarse systemden conjunto con udev, pero hay casi 100 archivos /usr/lib/udev/rules.dy pasar una hora tratando de determinar dónde (y si ) hay un archivo de configuración systemd para esto también parece ridículo.

También sería bueno saber con certeza que están disponibles, no solo cómo podrían nombrarse si lo están, para que pueda descartar problemas de hardware, etc. ¿No existe una manera simple de encontrar los nombres de las interfaces de red disponibles? en linux?

encerrada dorada
fuente
En la pregunta usted declara que utilizó ip linkpero luego acepta una respuesta que sugiere ip link showqué hace exactamente lo mismo. ¿Por qué?
Pavel Šimerda
@ PavelŠimerda Tienes razón. De hecho, podría haberlo usado ip route: escribí esta pregunta al día siguiente después de que se resolvió el problema (vea mi propia respuesta); No tengo la costumbre de usar ipy no aprecio las páginas de manual excesivamente espartanas, así que probablemente me di por vencido después de un intento y comencé a pasar /sys, ya que sabía que el kmod estaba cargado, etc. y esto era más sencillo a mi. Lo eliminaré completamente de la pregunta.
Ricitos
Las páginas del manual para iproute2 son bastante buenas hoy en día, supongo que está utilizando una versión anterior del paquete.
Pavel Šimerda

Respuestas:

93

El método más simple que conozco para enumerar todas sus interfaces es

ifconfig -a

EDITAR

Si está en un sistema donde eso se ha vuelto obsoleto, puede usar

ip link show
Elliott Frisch
fuente
3
¡Si hubiera mirado la página del manual! Sea interesante saber si iptiene un paralelo, ya que supuestamente ifconfig está "obsoleto" a favor de ese (IMO) comando más obtuso y menos amigable para el usuario.
Ricitos
2
Lo primero en mi man ifconfig: "¡NOTA, este programa está obsoleto! Para reemplazo, verifique ip ..." Eso puede ser específico de Linux. Esperemos que tengan que conservarlo para la compatibilidad con algo anterior.
Ricitos
44
ifconfig ha quedado en desuso, TMK, por lo que deberíamos intentar mostrar ejemplos usando ip. Vea el artículo de ifconfig wikipedia: en.wikipedia.org/wiki/Ifconfig .
slm
3
@slm Aunque la pregunta es (era) específica de Linux, un ejemplo que usa ambos parece bueno ya que los usuarios de BSD pueden tener la costumbre de mirar las páginas de "Linux" de todos modos; de hecho, sacaré Linux del título y editaré un bit (originalmente esto fue una respuesta propia y no pensé que hubiera un método portátil).
Ricitos
55
ifconfig en desuso? venga. Este comando ha existido durante 30 años.
Michael Martinez
72

El kernel los enumera por nombre /sys, tanto por separado en (por ejemplo) el árbol de dispositivos PCI, aunque encontrarlos allí si no sabe dónde comenzar no es simple, y juntos a través de enlaces simbólicos /sys/class/net. P.ej:

> ls /sys/class/net
em1 lo wlp6so

Otro ejemplo:

> ls /sys/class/net
lo p6s1 wlan0

Si no está seguro de cuál es cuál, puede ponerlos a todos con:

ifconfig [name] up 

O:

ip link set [name] up

Y luego mira las pistas (bastante claras) enumeradas por ifconfig(sin argumentos). El código fuente de systemd vinculado desde el documento de Freedesktop.org también se refiere a:

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

Aunque en uno de los casos anteriores ( p6s1) no hay prefijo.

encerrada dorada
fuente
El prefijo que obtengo para ethernet es eth. Creo que enes para LAN inalámbrica.
Kaushal Modi
44
@kaushalmodi ethes una cosa del kernel de Linux; systemd implementa a través de los nombres de interfaz predecibles de udev Freedesktop.org : los del núcleo no son predecibles en el mismo sentido, que es la causa de toda la confusión. La cita anterior está explícitamente cortada y pegada desde aquí . Hay más que eso, ya que no tengo ninguna máquina systemd que use enpara ethernet; lo más cercano es que emotros son completamente diferentes. Puede leer el enlace Freedesk.org en la pregunta usted mismo para obtener más explicaciones.
Ricitos
44
[Más tarde] En algún momento del año pasado Fedora o systemd corrigió eso? Mi PCI ethernet es ahora eno1.
Ricitos
10

Siempre lo hago cat /proc/net/dev, es simple y fácil de memorizar

Mohammad Rafiee
fuente
44
pero eso solo da interfaces activas, no todas las interfaces
Grant Bowman
4

ifconfig= Solaris
ipconfig= Windows
ip= Linux

Eso lo sé, pero ciertamente estoy abierto a adiciones y correcciones.

Mick Myhera
fuente
2
¿Eh? ifconfig es Linux también.
fpmurphy
44
@ fpmurphy1 Lea el primer párrafo (después de la sinopsis) de man ifconfigen un sistema Linux.
Ricitos