Hintergrund:
Ich überprüfe die Liste der verfügbaren Schnittstellen unter Linux mit dem Befehl ifconfig.
Es gibt jedoch einen Unterschied im Format der ifconfig-Ausgabe in Ubuntu 16.04 und Ubuntu 17.10.
Bei weiterer Überprüfung wurde das Net-Tools-Paket in Ubuntu 17.10 aktualisiert (von Net-Tools 1.60 auf Net-Tools 2.10-Alpha) und die neueste ifconfig gibt die Netzwerkschnittstellennamen mit einem Doppelpunkt (':') aus. Bei älteren Versionen:
$ ifconfig --version net-tools 1.60 ifconfig 1.42 (13.04.2001)
$ ifconfig
enp0s3 Link encap:Ethernet
Auf der neueren Version
$ ifconfig --version net-tools 2.10-alpha
$ifconfig
ens160: Flags = 4163 mtu 1500
lo: Flaggen = 73 mtu 65536
Dies kann dazu führen, dass einige Tools nicht mehr funktionieren, die den zusätzlichen „:“ in der Ausgabe berücksichtigen oder erwarten.
Frage:
Gibt es eine Möglichkeit, die Liste der Netzwerkschnittstellen zuverlässig abzurufen, sodass sich Änderungen im Format der ifconfig-Ausgabe nicht auf die Tools auswirken, die sie verwenden? Gibt es eine Alternative zu ifconfig, die konsistent verwendet werden kann?
Antwort1
DerNetzwerkzeugePaket warveraltetfür einige Zeit wurde es durch iproute2 ersetzt ( ip
das primäre Tool in diesem Paket). Viele Distributionen liefern Net-Tools nicht einmal mehr als Teil ihrer Basisinstallation mit.
Die Entwicklung von net-tools wurde inzwischen wieder aufgenommen, was jedoch dazu geführt hat, dass eine Reihe von Tools auf eine Art und Weise verbessert wurden, die die Kompatibilität beeinträchtigt, wie Sie bei gesehen haben ifconfig
. Von NEWS.Debian.gz
einem Debian 9.0-System:
Nach 15 Jahren ohne Upstream-Entwicklung wird wieder an Net-Tools gearbeitet, wobei viele seit langem bestehende Probleme behoben werden. Die schlechte Nachricht ist, dass sich die Ausgabe vieler Befehle geändert hat und Skripte, die auf deren Analyse angewiesen waren, mit Sicherheit beschädigt werden.
Aus diesem Grund ist es möglicherweise eine gute Idee, Ihre Skripte so anzupassen, dass sie die iproute2-Tools verwenden. Beispielsweise ip link
sollte Ihnen ähnliche Informationen wie ifconfig
oben angezeigt geben. Der einzige Nachteil dieses Ansatzes besteht darin, dass die Kompatibilität mit Nicht-Linux-Systemen beeinträchtigt wird, die fast alle verwenden ifconfig
.
Antwort2
Eine alternative Möglichkeit, alle Schnittstellen in Linux von der Shell aus aufzulisten, ist das Lesen von /proc/net/dev
, die ein stabileres Format haben als die Ausgabe von ifconfig(8) von net-tools
.
So erhalten Sie beispielsweise die Namen von Schnittstellen:
whr@debianjessie:~$ sed -r -e 1,2d -e 's/^ +//' -e 's/: .+//' /proc/net/dev
ppp0
lo
eth0
eth1