Es ist besser, die Verwendung ifconfig
zum Abrufen einer IP-Adresse in einem Skript zu vermeiden, da diese in einigen Distributionen veraltet ist (z. B. CentOS und andere, installieren Sie sie nicht mehr standardmäßig).
In anderen Systemen variiert die Ausgabe von ifconfig je nach Version der Distribution (z. B. unterscheidet sich die Ausgabe / der Abstand / die Felder von beispielsweise ifconfig
von Debian 8 bis Debian 9).
Um die IP-Adresse mit zu erhalten ip
, fragen Sie auf ähnliche Weise:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Oder noch besser:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Oder wenn Sie nach "IP =" fragen
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Die Idee von @Roman schamlos anpassen
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Normale Ausgabe:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
Von man ip
:
-o, -oneline gibt
jeden Datensatz in einer einzelnen Zeile aus und ersetzt Zeilenvorschübe durch das Zeichen '\'. Dies ist praktisch, wenn Sie Datensätze mit wc (1) zählen oder die Ausgabe grep (1) möchten.
Sehen Sie sich ein Beispiel an, warum dies ifconfig
nicht empfohlen wird: BBB: `bbb-conf --check` zeigt IP-Adressen als` inet` - ifconfig an
Informationen zum Grund ifconfig
für den Weg nach draußen finden Sie unter Unterschied zwischen den Befehlen 'ifconfig' und 'ip'
ifconfig
stammt von Net-Tools, die lange Zeit nicht mehr mit dem Linux-Netzwerkstack Schritt halten konnten. Außerdem wird ioctl weiterhin für die Netzwerkkonfiguration verwendet, was eine hässliche und weniger leistungsfähige Art der Interaktion mit dem Kernel darstellt.
Um 2005 wurde ein neuer Mechanismus zur Steuerung des Netzwerkstapels eingeführt - Netlink-Sockets.
Für die Konfiguration der Netzwerkschnittstelle iproute2
wird dieser Vollduplex-Netlink-Socket-Mechanismus verwendet, während ifconfig
ein ioctl-Systemaufruf erforderlich ist.