태그 보관물: hostname

hostname

bash 스크립트로 Unix에서 FQN (정규화 된 이름)을 얻는 방법은 무엇입니까? 나는 hostname여러 서버 (RedHat, Ubuntu)에서 테스트

나는 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}"


답변

fqn을 찾은 한 가지 방법은 다음과 같습니다.

fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn

다시 말해, 나는 nslookupIP 주소를 가지고 있어야 했다.

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에서 시도).


답변

당신을 hostname --fqdn위해 작동 하지 않습니까?


답변

우분투에서는 할 수 있습니다 hostname -A


답변

크로스 플랫폼 대안의 경우, 파이썬을 사용하지 않아도되는 경우 (최소한 파이썬 2.7 및 파이썬 3에서 실행)

python -c 'import socket; print(socket.getfqdn())'


답변

OS X 안전 bash 전용 방법으로, 명령 출력의 변형으로 인해 다른 * nix 맛이 작동 하지 않을 수 있습니다.

fqn=$(nslookup $(hostname) | sed -n s/Name:.//p);

파이썬은 광범위한 호환성을위한 최선의 방법 일 것입니다.