
저는 RHEL 5.7을 실행 중이고 이 hostname
명령은 올바른 호스트 이름을 제공합니다.
그러나 hostname -s
다음과 같이 hostname -f
반환됩니다. Unknown host
.왜?
답변1
(에서 복사SF에 대한 나의 대답 중 하나)
이 hostname
명령은 DNS 및 에서 데이터를 반환합니다 /etc/hosts
.
hostname
uname -n
상자의 실제 "호스트 이름" 또는 "노드 이름" 과 동일 합니다.
다른 모든 hostname
매개변수는 이 노드 이름을 사용하여 정보를 찾습니다.
따라서 더 진행하기 전에 /etc/hosts
파일 형식에 대해 설명해야 합니다.
첫 번째 필드는 매우 명확합니다. 이는 해당 라인의 모든 호스트 이름이 확인되어야 하는 IP 주소입니다. 두 번째 필드는 IP의 기본 호스트 이름입니다. 나머지 필드는 별칭입니다.
따라서 이를 실행하면 hostname -f
먼저 노드 이름의 IP를 확인하려고 시도합니다. 방법은 이 방법 hosts:
에서 항목을 구성하는 방법에 따라 다릅니다./etc/nsswitch.conf
/etc/resolv.conf
DNS를 사용하도록 구성하면 DNS에서 IP를 얻을 때까지 구성된 검색 도메인을 사용합니다 ./etc/hosts
파일을 사용하도록 구성하면 기본 호스트 이름이나 별칭이 현재 노드 이름( )인 줄을 찾아uname -n
해당 줄에 IP 주소를 반환합니다.
IP를 얻으면 해당 IP의 역방향 조회를 시도합니다. 다시 말하지만, DNS를 사용하며 .hosts 파일을 기반으로 합니다 nsswitch.conf
. 호스트 파일을 사용하는 경우 기본 항목(즉, 파일에서 IP 다음의 첫 번째 필드)을 반환합니다.
hostname -a
DNS에서 역방향 조회를 하면 결과가 1개만 반환되므로 호스트 파일만 사용할 수 있습니다. 호스트 파일을 통해 일치하는 줄(첫 번째 항목(기본 호스트 이름) 다음의 모든 항목)에 별칭을 반환합니다.
/etc/hosts
즉, 문제의 원인은 호스트 이름( )이 포함된 항목이 없기 때문일 수 있습니다 uname -n
.
예
노드 이름이 "foobar"이고 /etc/hosts
다음과 같은 항목이 있는 경우:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
그러면 다음 명령 결과를 얻게 됩니다.
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost