Bashスクリプトでホスト名をIPアドレスに解決するには?

Bashスクリプトでホスト名をIPアドレスに解決するには?

Bashスクリプトでホスト名をIPアドレスに解決する最もクリーンな方法は何ですか?私はそれを使用していますアーキテクチャLinux

答え1

あなたはそれを使用することができますgetent。それが付属していますglibc(したがって、あなたはほぼ確実にLinuxにそれを持っています)。この問題は gethostbyaddr/gethostbyname2 を使用して解決できるため、/etc/hosts/NIS/etc も解決されます。

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

または、Heinziが以下のようにdigパラメータを使用することもできます(/NSS/etc+shortを見ずにDNSサーバーに直接問い合わせます)。/etc/hosts

dig +short unix.stackexchange.com

利用できない場合は、次のいずれdig +shortかが機能します。これらのクエリはすべてDNSを直接クエリし、他の確認方法を無視します。

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

1つのIPのみを印刷するには、exitこのコマンドをawkワークフローに追加します。

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

答え2

hostフォローdnsutilsパック:

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

修正済みパッケージ名はコメントに基づいています。他のディストリビューションにはhostDebian / Ubuntuなどの他のパッケージがあります。9つのホストバインディング、SUSEを開きます。バインディングユーティリティ、まともなソフトウェア製本.)

答え3

私のコンピュータには、タスクを実行しているように見えるツールがあります。マニュアルページにはmysqlに付属しているようです。使用方法は次のとおりです。

resolveip -s unix.stackexchange.com
64.34.119.12

ホスト名を解決できない場合、ツールの戻り値は0とは異なります。

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

修正する Fedoraには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

私の考えでは、これはスクリプトへの奇妙な依存関係を生成するようです...

答え4

getent hosts unix.stackexchange.com | cut -d' ' -f1

関連情報