Dit is met betrekking tot linux, maar als iemand een algemene *nix methode weet zou dat goed zijn.
Ik heb gisteren een systeem opgestart met een ethernet kabel aangesloten. "NetworkManager" is niet geïnstalleerd, dus toen het eenmaal was opgestart ging ik met ifconfig
op zoek naar de naam van de ethernet interface om handmatig een DHCP client te starten, maar het liet niets anders zien dan lo
.
De NIC werd vermeld via lspci
, en de juiste kernel driver werd geladen. Het systeem gebruikt normaal gesproken wifi, en ik kon me herinneren dat de interface naam daarvoor wlan0
was. Toen ik ifconfig wlan0 up
probeerde, verscheen wlan0
. Maar de enige ethernet interface namen die ik me kon herinneren waren eth[N]
en em[N]
-- geen van beide werkte.
Dit document verwijst naar "voorspelbare interface namen" maar het legt niet goed uit wat ze in eenvoudige termen zouden kunnen zijn. Het verwijst wel naar een stuk broncode dat impliceert dat de naam in dit geval zou kunnen worden afgeleid uit de PCI bus en slot nummers, wat een onnodig ingewikkeld gedoe lijkt.
Verder zoeken deed me geloven dat dit zou kunnen worden bepaald door systemd
in combinatie met udev
, maar er zijn bijna 100 bestanden in /usr/lib/udev/rules.d
en een uur spenderen om te bepalen waar (en of) er een systemd config bestand hiervoor is lijkt ook belachelijk.
Het zou ook fijn zijn om zeker te weten dat ze beschikbaar zijn, niet alleen hoe ze genoemd zouden kunnen worden als ze dat zijn, zodat ik hardwareproblemen kan uitsluiten, enz. Is er geen eenvoudige manier om de namen van beschikbare netwerk interfaces op Linux te vinden?
De eenvoudigste methode die ik ken om al je interfaces op te sommen is
ifconfig -a
EDIT
Als je op een systeem zit waar dat verouderd is, kun je gebruik maken van
ip link show
De kernel vermeldt ze bij naam in /sys
, zowel apart in (bijv.) de boom van PCI-apparaten -- hoewel het niet eenvoudig is ze daar te vinden als je niet weet waar ze om te beginnen zijn -- als samen via symlinks in /sys/class/net
. Bijv:
> ls /sys/class/net
em1 lo wlp6so
Een ander voorbeeld:
> ls /sys/class/net
lo p6s1 wlan0
Als je niet zeker weet welke welke is, kun je ze gewoon allemaal bij een van beide zetten:
ifconfig [name] up
Of:
ip link set [name] up
En kijk dan naar de (vrij duidelijke) aanwijzingen die door ifconfig
(zonder argumenten) worden genoemd. De systemd broncode gelinkt aan het Freedesktop.org document verwijst ook naar:
Two character prefixes based on the type of interface:
* en -- ethernet
* sl -- serial line IP (slip)
* wl -- wlan
* ww -- wwan
Hoewel in een van de gevallen hierboven (p6s1
) er geen voorvoegsel is.