ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"
So erhalten Sie einfach Ihre IP-Adresse:
echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`
Dadurch erhalten Sie die IP-Adresse von eth0.
Bearbeiten:Aufgrund von Namensänderungen von Schnittstellen in neueren Versionen von Ubuntu funktioniert dies nicht mehr. Stattdessen könnten Sie einfach Folgendes verwenden:
hostname --all-ip-addresses
oder hostname -I
, was dasselbe tut (gibt Ihnen ALLE IP-Adressen des Hosts).
Wenn das Ziel darin besteht, die IP-Adresse zu finden in Richtung Internet verbunden, dann sollte dies eine gute Lösung sein.
Bearbeiten 2021:„sed“- und „grep“-Versionen und neue „awk“-Versionen (einige sind gnu) hinzugefügt
Um herauszufinden, welche IP-Addierer in Verbindung mit dem Internet verwendet werden, können wir den ip route
verwenden Befehl. Mit einer neueren Version von Linux erhalten Sie mehr Informationen mit einer typischen Ausgabe wie dieser:
ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
cache
also um IP zu bekommen Sie müssen die IP nach src finden , mit awk , sed oder grep
ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1'
ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed -nE '1{s/.*?src (\S+) .*/\1/;p}'
ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+'
10.36.15.150
und wenn Ihnen die Oberfläche gefällt Name mit awk , sed oder grep
ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1'
ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed -nE '1{s/.*?dev (\S+) .*/\1/;p}'
ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+'
ens192
ip route
öffnet keine Verbindung, sondern zeigt nur die Route, die benötigt wird, um zu 8.8.8.8
zu gelangen . 8.8.8.8
ist Googles DNS.
Wenn Sie dies in einer Variablen speichern möchten, tun Sie Folgendes:
my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')
Warum eine andere Lösung möglicherweise fehlschlägt:
ifconfig eth0
- Wenn die Schnittstelle, die Sie haben, einen anderen Namen hat (eno1, wifi, venet0 usw.)
- Wenn Sie mehr als eine Schnittstelle haben
- IP-Verbindungsrichtung ist nicht die erste in einer Liste mit mehr als einem IF
Hostname -I
- Bekommt möglicherweise nur 127.0.1.1
- Funktioniert nicht auf allen Systemen.
- Geben Sie alle IPs an, nicht nur die mit dem Internet verbundene. -I, --all-ip-addresses alle Adressen für den Host
Wenn Sie eine durch Leerzeichen getrennte Liste Ihrer IPs erhalten möchten, können Sie den hostname
verwenden Befehl mit dem --all-ip-addresses
(kurz -I
)-Flag
hostname -I
wie hier beschrieben:Putting IP Address into bash variable. Gibt es einen besseren Weg?