나는 쉘에 있고 호스트 이름에 해당하는 IP 주소를 알고 싶습니다.
Perl, PHP, Python 또는 기타 여러 스크립팅 언어(아마도 awk!)를 통해 얻을 수 있다는 것을 알고 있으며 이것이 해결 방법이 될 것이지만 이를 수행할 수 있는 명령줄 도구가 없는 것 같아 놀랐습니다. , 주변에 간단한 래퍼가 없습니다 getaddrinfo()
.
내가 잘못? 하나 있나요? host
, dig
그리고 getent
계산하지 마십시오. 나는 libc를 사용하고 에 따라 작동하는 것과 /etc/nsswitch.conf
기본적으로 모든 (리눅스) 시스템에 설치되는 것을 원합니다.
답변: 제가 틀렸습니다. 를 getent
단독으로 조회하는 것이 아니라 /etc/hosts
실제로 적절한 조회를 수행합니다.
답변1
호스트 이름 조회를 수행하는 기존 도구는 바인드의 nslookup이지만 현재는 dig로 대체되고 있습니다. 두 도구 모두 DNS 전용이며 nsswitch를 사용하지 않습니다. getent 호스트는 nsswitch를 사용하지만 훨씬 덜 사용됩니다.
답변2
getent
확실히 작업에 적합한 도구이지만 불행히도 모든 곳에서 사용할 수 있는 것은 아닙니다. 그 이유 중 하나는 POSIX에서 정의를 해제하는 것이 필수가 아니기 때문입니다.
반면에 표준에 지정되어 있지는 않지만 arp
이름 확인을 수행하는 서버에서 사용할 수 없을 가능성은 거의 없습니다. arp
다음 nsswitch.conf
설정 과 같이 libc
는 모든 Linux/Unix 시스템에서 사용할 수 있으며 구현 간에 일관성이 있는 것으로 보이는 출력을 제공합니다. 출력을 구문 분석하면 작업이 수행됩니다.
$ arp stackoverflow.com | sed -e 's/.*(//' -e 's/).*$//'
198.252.206.16
다음은 해당 방법을 사용하여 일부 경우에 다른 출력 형식으로 전환하는 Linux arp 관련 문제를 방지하는 셸 함수입니다.
resolve()
{
: ${1:?Usage: resolve name}
(
PATH=$PATH:/usr/sbin
ao=$(arp $1)
[ "$(echo "$ao"|grep HWaddress)" ] && ao=$(arp -a $1)
echo "$ao" | sed -e 's/.*(//' -e 's/).*$//'
)
}