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 }'
하나의 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
(수정됨패키지 이름은 주석을 기반으로 합니다. 다른 배포판에는 host
Debian/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