GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu přeložit název hostitele na IP adresu ve skriptu Bash?

Můžete použít getent , který je dodáván s glibc (takže to téměř jistě máte na Linuxu). To se vyřeší pomocí gethostbyaddr/gethostbyname2, a tak se také zkontroluje /etc/hosts /NIS/etc:

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

Nebo, jak řekl Heinzi níže, můžete použít dig pomocí +short argument (dotazuje se přímo na servery DNS, nehledá /etc/hosts /NSS/etc):

dig +short unix.stackexchange.com

Pokud dig +short není k dispozici, měla by fungovat kterákoli z následujících možností. Všechny se dotazují přímo na DNS a ignorují ostatní způsoby rozlišení:

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 }'

Pokud chcete tisknout pouze jednu IP adresu, přidejte exit příkaz na awk pracovní postup uživatele.

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 }'

S host z balíčku dnsutils:

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

(Opraveno název balíčku podle komentářů. Poznámka:ostatní distribuce mají host v různých balíčcích:Debian/Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)


Mám na svém stroji nástroj, který, jak se zdá, dělá svou práci. Manová stránka ukazuje, že se zdá, že přichází s mysql... Zde je návod, jak jej můžete použít:

resolveip -s unix.stackexchange.com
64.34.119.12

Návratová hodnota tohoto nástroje se liší od 0, pokud název hostitele nelze přeložit:

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

AKTUALIZACE Na fedoře je dodáván s mysql-serverem:

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

Myslím, že by to vytvořilo zvláštní závislost pro váš skript...


Linux
  1. Jak ladit Bash skript?

  2. Jak přidat uživatele Unix/linux do skriptu Bash?

  3. Jak zkontrolovat, zda Bash může tisknout barvy?

  1. Jak rozdělit řetězec ve skriptu Bash

  2. Jak spustit skript shellu na konzole Unix nebo terminálu Mac?

  3. Jak předat parametry skriptu Bash?

  1. Linux bash skript pro extrakci IP adresy

  2. Jak spustit bash skript?

  3. Jak mohu přiřadit IP podle MAC adresy v dhcpd