Come posso trovare le interfacce di rete disponibili?


88

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 cui ifconfigavviare manualmente un client DHCP, ma non mostrava altro lo.

La scheda NIC è stata elencata tramite lspcied è stato caricato il driver del kernel appropriato. Il sistema normalmente usa il wifi, e per questo ricordavo il nome dell'interfaccia wlan0. Quando ho provato ifconfig wlan0 up, è wlan0apparso. Ma gli unici nomi di interfaccia Ethernet che potevo ricordare erano eth[N]e em[N]- nessuno dei quali ha funzionato.

Questo documento fa riferimento 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 in giro mi hanno portato a credere che questo potrebbe essere determinato systemdcongiuntamente a udev, ma ci sono quasi 100 file in /usr/lib/udev/rules.de passare un'ora cercando di determinare dove (e se ) c'è un file di configurazione di sistema per questo sembra anche ridicolo.

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


Nella domanda dichiari di aver usato ip linkma poi accetti una risposta che suggerisce ip link showche fa esattamente la stessa cosa. Perché?
Pavel Šimerda,

@ PavelŠimerda Hai ragione. In effetti avrei potuto usarlo ip route- ho scritto questa domanda il giorno successivo alla risoluzione del problema (vedi la mia risposta); Non ho l'abitudine di usare ipe non apprezzo le pagine man eccessivamente spartane, quindi probabilmente ho rinunciato ad esso dopo un tentativo e /sysho iniziato a passare , poiché sapevo che il kmod era caricato, ecc. E questo era più semplice per me. Lo toglierò completamente dalla domanda.
Riccioli d'oro

Le pagine di manuale di iproute2 sono abbastanza buone al giorno d'oggi, suppongo che tu stia utilizzando una versione precedente del pacchetto.
Pavel Šimerda,

Risposte:


93

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

ifconfig -a

MODIFICARE

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

ip link show

3
Se solo guardassi la pagina man! Sii interessante sapere se ipha un parallelo, poiché si suppone che ifconfig sia "obsoleto" a favore di quel comando (IMO) più ottuso e meno user friendly.
Riccioli d'oro,

2
Prima cosa nel mio man ifconfig: "NOTA Questo programma è obsoleto! Per la sostituzione controlla ip ..." Potrebbe essere specifico per Linux. Si spera che debbano conservarlo per la retrocompatibilità con qualcosa.
Riccioli d'oro,

4
ifconfig è stato deprecato, TMK, quindi dovremmo provare a mostrare esempi usando ip. Vedi l'articolo di ifconfig su wikipedia: en.wikipedia.org/wiki/Ifconfig .
slm

3
@slm Anche se la domanda è (era) specifica per Linux, un esempio che usa entrambi sembra buono dato che gli utenti di BSD potrebbero avere l'abitudine di guardare comunque le pagine "linux" - in effetti toglierò Linux dal titolo e modificherò un po '(in origine questo era auto-risposta e non pensavo esistesse un metodo portatile).
Riccioli d'oro,

5
ifconfig è deprecato? Dai. Questo comando esiste da circa 30 anni.
Michael Martinez,

72

Il kernel li elenca per nome in /sys, entrambi separatamente (ad esempio) 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, puoi 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

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


Il prefisso che ottengo per Ethernet è eth. Credo che ensia per LAN wireless.
Kaushal Modi,

4
@kaushalmodi ethè una cosa del kernel di Linux; systemd implementa tramite i nomi di interfaccia prevedibili di udev Freedesktop.org - quelli del kernel non sono prevedibili nello stesso senso, che è la causa di tutta la confusione. La citazione sopra è esplicitamente tagliata e incollata da qui . C'è di più, visto che non ho macchine systemd che usano enper Ethernet; il più vicino è em, altri sono completamente diversi. Puoi leggere tu stesso il link Freedesk.org nella domanda per ulteriori spiegazioni.
Riccioli d'oro,

4
[Più tardi] Qualche volta l'anno scorso Fedora o Systemd lo hanno corretto? La mia Ethernet PCI è ora eno1.
Riccioli d'oro


4

ifconfig= Solaris
ipconfig= Windows
ip= Linux

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


2
Eh? ifconfig è anche Linux.
fpmurphy,

4
@ fpmurphy1 Leggi il primo paragrafo (dopo la sinossi) di man ifconfigun sistema Linux.
Riccioli d'oro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.