GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich in einem Bash-Skript einen Hostnamen in eine IP-Adresse auflösen?

Sie können getent verwenden , die mit glibc geliefert wird (Sie haben es also mit ziemlicher Sicherheit unter Linux). Dies wird mithilfe von gethostbyaddr/gethostbyname2 aufgelöst und überprüft daher auch /etc/hosts /NIS/etc:

getent hosts unix.stackexchange.com | awk '{ print $1 }'

Oder, wie Heinzi unten sagte, Sie können dig verwenden mit dem +short Argument (fragt DNS-Server direkt ab, schaut nicht auf /etc/hosts /NSS/etc) :

dig +short unix.stackexchange.com

Wenn dig +short nicht verfügbar ist, sollte eine der folgenden Methoden funktionieren. All diese fragen DNS direkt ab und ignorieren andere Auflösungsmethoden:

host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'

Wenn Sie nur eine IP drucken möchten, dann fügen Sie den exit hinzu Befehl an awk Arbeitsablauf von .

dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'

Mit host aus dem dnsutils-Paket:

$ host unix.stackexchange.com
unix.stackexchange.com has address 64.34.119.12

(Korrigiert Paketname gemäß den Kommentaren. Als Anmerkung, andere Distributionen haben host in verschiedenen Paketen:Debian/Ubuntu bind9-host , openSUSE bind-utils , Frugalware binden .)


Ich habe ein Werkzeug auf meiner Maschine, das die Arbeit zu erledigen scheint. Die Manpage zeigt, dass es mit mysql geliefert wird... So könnten Sie es verwenden:

resolveip -s unix.stackexchange.com
64.34.119.12

Der Rückgabewert dieses Tools unterscheidet sich von 0, wenn der Hostname nicht aufgelöst werden kann:

resolveip -s unix.stackexchange.coma
resolveip: Unable to find hostid for 'unix.stackexchange.coma': host not found
exit 2

AKTUALISIEREN Auf Fedora kommt es mit mysql-server :

yum provides "*/resolveip"
mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files
Dépôt         : fedora
Correspondance depuis :
Nom de fichier      : /usr/bin/resolveip

Ich schätze, es würde eine seltsame Abhängigkeit für Ihr Skript erzeugen ...


Linux
  1. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  2. Wie werden Parameter eingestellt, wenn Bash-Skript an Bash übergeben wird?

  3. So teilen Sie eine Zeichenfolge in Bash-Skript auf

  4. Wie führe ich ein Shell-Skript auf einer Unix-Konsole oder einem Mac-Terminal aus?

  5. Wie übergebe ich Parameter an ein Bash-Skript?

So schreiben Sie ein Bash-Skript mit Beispielen

So konfigurieren Sie eine statische IP-Adresse in Linux und Unix

So führen Sie ein Bash-Skript aus

Wie überprüfe ich, ob Bash Farben drucken kann?

Linux-Bash-Skript zum Extrahieren der IP-Adresse

Wie kann ich in dhcpd eine IP per MAC-Adresse zuweisen