나는 hostname
여러 서버 (RedHat, Ubuntu)에서 테스트 했으며 hostname -f
신뢰할 수없는 것으로 판명되었습니다 ( 이 질문에 설명 된대로) 짧은 이름 만 반환합니다 .
별칭에서 fqn을 볼 수 있습니다. hostname -a
( 별칭 중 하나는 내가 찾은 fqn입니다) 별칭의 순서는 고정되어 있지 않습니다.
정규화 된 이름을 안정적으로 가져 와서 bash 변수에 저장하는 다른 방법이 있습니까?
나는 hostname
여러 서버 (RedHat, Ubuntu)에서 테스트 했으며 hostname -f
신뢰할 수없는 것으로 판명되었습니다 ( 이 질문에 설명 된대로) 짧은 이름 만 반환합니다 .
별칭에서 fqn을 볼 수 있습니다. hostname -a
( 별칭 중 하나는 내가 찾은 fqn입니다) 별칭의 순서는 고정되어 있지 않습니다.
정규화 된 이름을 안정적으로 가져 와서 bash 변수에 저장하는 다른 방법이 있습니까?
답변:
CentOS5에서 이것을 시도했습니다.
host -TtA $SERVERNAME|grep "has address"|awk '{print $1}'
TCP-Mode에서 DNS를 쿼리해야합니다. UDP가 사용자 환경에서 작동하면 "T"옵션을 그대로 두십시오.
참고 : Ubuntu 게스트 (VirtualBox)에서는 작동하지 않습니다.
git@aHostname:~/$ host -TtA $(hostname -s)
Host aHostname not found: 3(NXDOMAIN)
따라서 모든 경우를 다루기 위해 :
fqn=$(host -TtA $(hostname -s)|grep "has address"|awk '{print $1}') ; \
if [[ "${fqn}" == "" ]] ; then fqn=$(hostname -s) ; fi ; \
echo "${fqn}"
host -TtA $(hostname -s)|grep "has address"|awk '{print $1}'
내 레드햇 서버에서 작업
fqn을 찾은 한 가지 방법은 다음과 같습니다.
fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn
다시 말해, 나는 nslookup
IP 주소를 가지고 있어야 했다.
Server: 128.xxx.yyy.zzz
Address: 128.xxx.yyy.zzz#ww
aa.bb.cc.dd.in-addr.arpa name = myserver.fully.qualified.name.
거기에서 bash 문자열 조작을 통해 원하지 않는 것을 제거하는 문제였습니다. .
아마도 더 간단한 방법이 있습니까?
이 방법은 호스트 이름을 올바르게 구성하고 올바른 DNS 설정 등을 가지고있는 경우에만 작동합니다. 모든 설정이 있으면 이미 fqdn을 알고 있습니다.
fqdn을 얻는 확실한 방법은 없습니다. 단일 IP 주소에는 여러 개의 fqdn이있을 수 있고 단일 fqdn에는 여러 개의 IP 주소가있을 수 있습니다. 많은 IP에는 fqdn이 없습니다.
컴퓨터가 인터넷에 직접 연결된 경우 IP 주소를 사용하고 역 DNS 요청을하십시오. host 1.2.3.4
그러나 이것은 종종 원하는 답변을 제공하지 않습니다 (예를 들어 Google에서 시도).
host
A 레코드 만 가져 오거나 이에 따라 조회 하도록 대답을 구문 분석하십시오 .
당신을 hostname --fqdn
위해 작동 하지 않습니까?
hostname --fqdn
가져와야하며 짧은 이름을 반환하고 fqdn을 호스트 이름 별칭 중 하나로 정의합니다.
-f
과 --fqdn
같은 일이다.