GNU/Linux >> Linux の 問題 >  >> Linux

Bash スクリプトでホスト名を IP アドレスに解決するにはどうすればよいですか?

getent を使用できます 、これには glibc が付属しています (したがって、ほぼ確実にLinuxに搭載されています)。これは gethostbyaddr/gethostbyname2 を使用して解決されるため、/etc/hosts もチェックします。 /NIS/etc:

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

または、Heinzi が以下で述べたように、 dig を使用できます。 +short で 引数 (DNS サーバーに直接問い合わせ、/etc/hosts を調べません) /NSS/etc) :

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

host で dnsutils パッケージから:

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

(修正済み コメントに従ってパッケージ名。注意として、他のディストリビューションには host があります 別のパッケージ:Debian/Ubuntu bind9-host 、openSUSE bind-utils 、Frugalware bind .)


私のマシンには、仕事をしているように見えるツールがあります。 man ページには、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

スクリプトに奇妙な依存関係が作成されると思います...


Linux
  1. Bashスクリプトをファイルに接続できますか?

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

  3. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  1. Awk内のBashスクリプトでBash関数を呼び出す方法は?

  2. Bashスクリプトで文字列を分割する方法

  3. Unix コンソールまたは Mac 端末でシェル スクリプトを実行するには?

  1. パラメータをBashスクリプトに渡す方法は?

  2. 古いバージョンの Bash で Bash スクリプトをテストするにはどうすればよいですか?

  3. bash スクリプトを実行するには?