risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come posso trovare le interfacce di rete disponibili?

Questo riguarda Linux, ma se qualcuno fosse a conoscenza di un metodo generale * nix sarebbe positivo.

Ieri ho avviato un sistema con un cavo Ethernet collegato. "NetworkManager" non è installato, quindi una volta avviato sono andato a cercare il nome dell'interfaccia Ethernet con ifconfig per avviare manualmente un client DHCP, ma non ha mostrato altro che lo.

Il NIC è stato elencato tramite lspci e il driver del kernel appropriato è stato caricato. Il sistema normalmente utilizza il wifi e potrei ricordare il nome dell'interfaccia per quello era wlan0. Quando ho provato ifconfig wlan0 up, wlan0 apparso. Ma gli unici nomi di interfaccia Ethernet che potevo ricordare erano eth[N] e em[N] - nessuno dei quali ha funzionato.

Questo documento si riferisce a "nomi di interfaccia prevedibili" ma non fa un buon lavoro nel spiegare quali potrebbero essere in termini semplici. Si riferisce a un pezzo di codice sorgente che implica che il nome in questo caso potrebbe essere dedotto dal bus PCI e dai numeri di slot, il che sembra una seccatura inutilmente complicata.

Altre ricerche mi hanno portato a credere che questo potrebbe essere determinato da systemd insieme a udev, ma ci sono quasi 100 file in /usr/lib/udev/rules.d e passare un'ora cercando di determinare dove (e if) esiste un file di configurazione di sistema per questo sembra ridicolo.

Sarebbe anche bello sapere con certezza che sono disponibili, non solo come potrebbero essere nominati if che sono, quindi posso escludere problemi hardware, ecc. Non esiste un modo semplice per trovare i nomi delle interfacce di rete disponibili su Linux?

92
goldilocks

Il metodo più semplice che conosco per elencare tutte le tue interfacce è

ifconfig -a

[~ ~ #] modifica [~ ~ #]

Se utilizzi un sistema in cui è stato reso obsoleto, puoi utilizzarlo

ip link show
95
Elliott Frisch

Il kernel li elenca per nome in /sys, entrambi separatamente (ad es.) nell'albero dei dispositivi PCI - sebbene trovarli lì se non sai da dove cominciare non è semplice - e insieme tramite symlink in /sys/class/net. Per esempio.:

> ls /sys/class/net
em1 lo wlp6so

Un altro esempio:

> ls /sys/class/net
lo p6s1 wlan0

Se non sei sicuro di quale sia, potresti semplicemente metterli tutti con:

ifconfig [name] up 

O:

ip link set [name] up

E poi guarda gli indizi (abbastanza chiari) elencati da ifconfig (senza argomenti). Il codice sorgente di systemd collegato dal documento Freedesktop.org fa riferimento anche a:

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

Sebbene in uno dei casi sopra (p6s1) non esiste un prefisso.

73
goldilocks

Lo faccio sempre cat /proc/net/dev è semplice e facile da memorizzare

10
Mohammad Rafiee

ifconfig = Solaris
ipconfig = Windows
ip = Linux

Questo lo so, ma sono certamente aperto a aggiunte e correzioni.

6
Mick Myhera