GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menyelesaikan nama host ke alamat IP dalam skrip Bash?

Anda dapat menggunakan getent , yang disertakan dengan glibc (jadi Anda hampir pasti memilikinya di Linux). Ini diselesaikan menggunakan gethostbyaddr/gethostbyname2, dan juga akan memeriksa /etc/hosts /NIS/dll:

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

Atau, seperti yang dikatakan Heinzi di bawah ini, Anda dapat menggunakan dig dengan +short argumen (meminta server DNS secara langsung, tidak melihat /etc/hosts /NSS/dll) :

dig +short unix.stackexchange.com

Jika dig +short tidak tersedia, salah satu dari berikut harus bekerja. Semua permintaan DNS ini secara langsung dan abaikan cara penyelesaian lainnya:

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

Jika Anda hanya ingin mencetak satu IP, maka tambahkan exit perintah ke awk alur kerja.

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

Dengan host dari paket dnsutils:

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

(Diperbaiki nama paket sesuai dengan komentar. Sebagai catatan distribusi lain memiliki host dalam paket yang berbeda:Debian/Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)


Saya memiliki alat di mesin saya yang sepertinya melakukan pekerjaan itu. Halaman manual menunjukkan sepertinya datang dengan mysql... Inilah cara Anda dapat menggunakannya:

resolveip -s unix.stackexchange.com
64.34.119.12

Nilai pengembalian alat ini berbeda dari 0 jika nama host tidak dapat diselesaikan :

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

PEMBARUAN Di fedora, ia hadir dengan 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

Saya kira itu akan membuat ketergantungan yang aneh untuk skrip Anda...


Linux
  1. Bisakah Skrip Bash Dihubungkan ke File?

  2. Bagaimana Cara Men-debug Skrip Bash?

  3. Bagaimana Cara Menyelesaikan Nama Host Ke Alamat Ip Dalam Skrip Bash?

  1. Bagaimana Cara Memeriksa Apakah Bash Dapat Mencetak Warna?

  2. Cara Memisahkan String dalam Skrip Bash

  3. Bagaimana saya bisa menguji skrip Bash saya pada versi Bash yang lebih lama?

  1. Bagaimana Menambahkan Pengguna Unix/linux Dalam Skrip Bash?

  2. Bagaimana saya bisa menanggapi permintaan dalam skrip Linux Bash secara otomatis?

  3. Bagaimana saya bisa menetapkan IP dengan alamat MAC di dhcpd