Wie bekomme ich die primäre IP-Adresse des lokalen Rechners unter Linux und OS X?
Ich bin auf der Suche nach einem Kommandozeilen-Lösung zurückgeben würde mich das primäre (erste) IP-Adresse des localhost, andere als 127.0.0.1
Die Lösung sollte mindestens für Linux (Debian und RedHat) und OS X 10.7+
Ich bin mir bewusst, dass ifconfig
ist sowohl auf aber seine Leistung ist nicht so konsequent zwischen diesen Plattformen.
InformationsquelleAutor der Frage sorin | 2012-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
grep
zum filtern von IP-Adresse, vonifconfig
:ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
Oder mit
sed
:ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
Wenn Sie interessiert sind, nur bestimmte Schnittstellen wlan0, eth0, etc. dann:
ifconfig wlan0 | ...
Können Sie den alias-Befehl in der
.bashrc
zu erstellen Ihre eigenen Befehl aufgerufenmyip
zum Beispiel.alias myip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"
Einen viel einfacheren Weg, ist
hostname -I
(hostname -i
für ältere Versionen vonhostname
aber siehe Kommentare). Dies ist jedoch nur mit Linux.InformationsquelleAutor der Antwort Chris Seymour
Für linux-Maschinen (nicht OS X) :
InformationsquelleAutor der Antwort ACyclic
Werden die folgenden arbeiten auf Linux, aber nicht unter OSX.
Diese sich nicht auf DNS, und es funktioniert sogar, wenn
/etc/hosts
ist nicht richtig eingestellt (1
ist die Kurzform für1.0.0.0
):Vermeidung oder
awk
und über die Google-public-DNS auf8.8.8.8
für Offensichtlichkeit:Einen weniger zuverlässigen Weg: (siehe Kommentar unten)
InformationsquelleAutor der Antwort Collin Anderson
Bearbeitet (
2014-06-012018-01-09)Für stärkere config, mit vielen Schnittstellen und vielen IP-Konfiguration auf den einzelnen Schnittstellen, schrieb ich eine reinen bash Skript (basiert auf
127.0.0.1
) für die Suche nach korrekten Schnittstelle und ip, basierend aufdefault route
. Ich poste das Skript ganz unten in dieser Antwort.Intro
Da beide Os haben bash standardmäßig installiert, es ist ein bash-Tipp für Mac-und Linux:
Den locale-Problem verhindert wird, die durch die Nutzung der
LANG=C
:Setzt das in eine Funktion aus:
Minimal:
Einfache Nutzung:
Lust ordentlich:
Verwendung:
oder ausführen gleiche Funktion, aber mit einem argument:
Nota: Ohne argument dieser Funktion die Ausgabe auf STDOUT, die IP und einen newlinemit dem argument, nichts gedruckt wird, sondern die variable als argument wird erstellt und enthalten IP ohne newline.
Nota2: Dies wurde getestet auf Debian, LaCie nas gehackt und MaxOs. Wenn dies nicht funktioniert unter deiner Umwelt, ich bin sehr interessiert von feed-backs!
Ältere version dieser Antwort
( Nicht gelöscht, da basierend auf
sed
nichtbash
. )Warnen: Es ist ein Thema, über locales!
Schnell und klein:
Explodierte (funktioniert auch;)
Edit:
Wie! Diese scheinen nicht auf Mac OS...
Ok, diese scheinen ganz dasselbe auf Mac OS wie auf meinem Linux:
aufgeteilt:
Mein Skript (jan 2018):
Diesem Skript wird zuerst finden Ihre default-route und Schnittstelle verwendet, dann suchen Sie die lokale ip-matching-Netzwerk gatewayund füllen Sie die Variablen. Die letzten beiden Zeilen drucken Sie einfach, so etwas wie:
oder
Gut, es ist so:
InformationsquelleAutor der Antwort F. Hauri
Können Sie auch versuchen, diese, aber es kann auch nur sagen, Sie
127.0.0.1
:oder
InformationsquelleAutor der Antwort user3173508
unter linux
auf macOS
Beachten Sie, dass
hostname -I
zurückkehren können mehrere Adressen zu einer unzuverlässigen Bestellung (sieheman-hostname
). Aber für mich ist es einfach zurück192.168.1.X
was Sie wollte.InformationsquelleAutor der Antwort boris
Können Sie auch IP-version-4-Adresse von eth0 mit diesem Befehl in linux
Ausgang wird sein, wie diese
InformationsquelleAutor der Antwort Sathish
Das funktioniert auf Linux und OSX
Diese erhalten die Schnittstelle verbunden, um die default-route
Verwendung der Benutzeroberfläche oben entdeckt, die ip-Adresse.
OSX
Darwin laptop 14.4.0 Darwin Kernel Version 14.4.0: Thu May 28 11:35:04 PDT 2015; root:xnu-2782.30.5~1/RELEASE_X86_64 x86_64
en5
192.168.0.130
CentOS Linux
Linux-dev-cil.medfx.lokale 2.6.18-164.el5xen 1 SMP Thu Sep 3 04:03:03 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
eth0
192.168.46.10
InformationsquelleAutor der Antwort Colin Fletcher
Lösung
Erklärung
Den richtige Möglichkeit zum Abfragen Netzwerk-Informationen mit
ip
:-o
one-line-Ausgangroute get to
Holen Sie sich die aktuellen kernel-route zu einem Ziel8.8.8.8
Google-IP, aber können die echte IP, die Sie erreichen möchtenz.B.
ip
Ausgabe:Extrahieren, die die
src
ipsed
ist die ligthest und kompatibel mit den meisten regex-Unterstützung:-n
keine Ausgabe standardmäßig's/pattern/replacement/p'
match-Muster und print-Ersatz nur.*src \([0-9.]\+\).*
match die src-IP vom kernel verwendet wird, zu erreichen8.8.8.8
z.B. die endgültige Ausgabe:
Anderen Antworten
Ich denke, dass keine der vorstehenden Antworten sind gut genug für mich, da Sie nicht arbeiten in einem aktuellen Rechner (Gentoo-2018).
Fragen fand ich mit den vorherigen Antworten:
ifconfig
die veraltet ist und-zum Beispiel-nicht-Liste mehrerer IPs;awk
für eine einfache Aufgabe, die sed kann besser umgehen;ip route get 1
ist unklar, und ist eigentlich ein alias fürip route get to 1.0.0.0
hostname
Befehl, die nicht-I
option in allen appliance und zurück127.0.0.1
in meinem Fall.InformationsquelleAutor der Antwort giosh94mhz
Einige der anderen Methoden, die Sie eingeben können, ein Konflikt, bei dem mehrere IP-Adressen definiert ist, auf das system.
Diese Zeile wird immer die IP-Adresse standardmäßig verwendet.
InformationsquelleAutor der Antwort Kjeld Flarup
Primäre Netzwerk-interface IP -
InformationsquelleAutor der Antwort kaspars
Muss ich hinzufügen, um Collin Andersons Antwort, dass diese Methode auch berücksichtigt, wenn Sie zwei Schnittstellen, und Sie sind beide zeigen nach oben.
Ich habe eine Anwendung, die mit Raspberry Pi und benötigt die IP-Adresse tatsächlich genutzt wird, nicht nur, ob es war oder nicht. Die meisten der anderen Antworten wird die Rückkehr sowohl IP-Adresse, die nicht unbedingt hilfreich - für mein Szenario sowieso.
InformationsquelleAutor der Antwort c7borg
Nicht sicher, ob dies funktioniert in allen os, probieren Sie es aus.
InformationsquelleAutor der Antwort Jotne
InformationsquelleAutor der Antwort rbolante
Den kürzesten Weg, um Ihre lokale ipv4-Adresse auf Ihrem linux-system:
InformationsquelleAutor der Antwort harry
Anderen
ifconfig
Variante, die funktioniert sowohl auf Linux und OSX:InformationsquelleAutor der Antwort ccpizza
Ich ging durch eine Menge von verbindungen (StackExchange, AskUbuntu, StackOverflow etc.) und kam zu dem Entschluss, alle kombiniert die besten Lösungen in einem shell-Skript.
Meiner Meinung nach diese beiden QAs sind das beste gesehen:
Wie bekomme ich meine externe IP-Adresse in einem shell-Skript aus?
https://unix.stackexchange.com/q/22615
Wie finde ich meine interne ip-Adresse?
https://askubuntu.com/a/604691
Hier ist meine Lösung basiert auf einigen Ideen von rsp teilte in seinem repository (https://github.com/rsp/scripts/).
Einige von Ihnen könnte sagen, dass dieses script ist extrem hoch, für eine so einfache Aufgabe, aber ich möchte es einfach und flexibel in der Nutzung so viel wie möglich. Es unterstützt die einfache Konfiguration-Datei neu definieren, so dass die Standard-Werte.
Es wurde erfolgreich getestet unter Cygwin, MINGW und der Linux (Red Hat).
Zeigen interne IP-Adresse
Zeigen externe IP-Adresse
Source-code auch zur Verfügung, wenn dem link: https://github.com/ildar-shaimordanov/tea-set/blob/master/home/bin/myip. Beispiel der Konfigurationsdatei ist es, neben dem Haupt-Skript.
InformationsquelleAutor der Antwort jsxt
Ich nur nutzen Netzwerk-Interface-Namenmeine benutzerdefinierten Befehl ist
in meinem eigenen notebook
aber wenn der Netzwerk-Schnittstelle besitzt mindestens eine ip, dann wird es zeigen alle ip-zu Ihr gehören
zum Beispiel
Ubuntu 16.10
Debian Jessie
CentOS 6.8
Fedora 24
Scheint es, wie der Befehl
ip route get 1 | awk '{print $NF;exit}'
zur Verfügung gestellt von link genauer, was mehr ist, es mehr kürzer.InformationsquelleAutor der Antwort Gorgon
Vorausgesetzt, benötigen Sie Ihre primäre öffentlichen IP, wie es ist, gesehen aus dem rest der Welt, versuchen, diese:
InformationsquelleAutor der Antwort Putnik
Da ist ein Knoten-Paket für alles. Overkill? Wahrscheinlich. Einfach zu verwenden und zu merken? Sie Wette.
InformationsquelleAutor der Antwort Dennis
Wenn Sie wissen, das Netzwerk-interface (eth0, wlan, tun0 etc):
InformationsquelleAutor der Antwort droidgren
InformationsquelleAutor der Antwort user2802053
InformationsquelleAutor der Antwort AlanG
Funktioniert auf Mac, Linux und innen Docker-Container:
$ hostname --ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | awk '{print
$1; exit}')Funktioniert auch auf
Makefile
:LOCAL_HOST := ${shell hostname --ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | awk '{print $1; exit}')}
InformationsquelleAutor der Antwort peleteiro
Für linux, was Sie brauchen, ist dieser Befehl:
geben Sie Folgendes in Ihrer shell ein und du wirst einfach wissen, Ihre ip-Adresse.
InformationsquelleAutor der Antwort Statham
Dies ist einfacher zu Lesen ist:
ifconfig | grep 'inet addr:' |/usr/bin/awk '{print $2}' | tr -d addr:
InformationsquelleAutor der Antwort Cory Thorson
Wenn Sie
npm
undnode
installiert :npm install -g ip && node -e "const ip = require('ip'); console.log(ip.address())"
InformationsquelleAutor der Antwort Antoine F.
ifconfig | grep 'inet' | grep -v '127.0.0.1' | awk '{print $2}'
InformationsquelleAutor der Antwort Faizan Noor
Auf einem Mac, sollten Sie Folgendes beachten:
InformationsquelleAutor der Antwort cl0kc