호스트 이름이 변경된 컴퓨터가 있습니다. /etc/hosts
, /etc/sysconfig/network
및 명령을 사용하여 변경했습니다 hostname
. hostname
올바른 짧은 이름을 반환하고 hostname --fqdn
예상 FQDN을 반환하지만 hostname -A
이전 이름을 반환합니다. 외부 DNS를 캐싱하지 않도록 컴퓨터의 IP 주소를 변경했습니다.
파이썬을 열고 실행하면
import socket
print(socket.gethostname())
print(socket.getfqdn())
둘 다 이전 호스트 이름/fqdn을 반환합니다.hostname -A
--fqdn
호스트 이름 매뉴얼 페이지를 보면 짧은 이름과 도메인만 가져와서 함께 사용하는 것처럼 보입니다 .
FQDN(정규화된 도메인 이름)을 표시합니다. FQDN은 짧은 호스트 이름과 DNS 도메인 이름으로 구성됩니다. 호스트 조회에 바인딩이나 NIS를 사용하지 않는 한 /etc/hosts 파일에서 FQDN 및 DNS 도메인 이름(FQDN의 일부)을 변경할 수 있습니다.
이러한 명령의 차이점은 무엇이며 이전 호스트 이름이 여전히 존재하는 이유를 더 잘 해결하는 방법은 무엇입니까?
답변1
hostname
구성된 호스트 이름 또는 노드 이름을 반환합니다. 실제로 짧은 이름(대부분의 구성에서)이거나 긴 이름(이 경우 일반적으로 FQDN)일 수 있습니다. 약어는 로 표시됩니다 hostname --short
.
hostname --fqdn
노드 이름에 대한 FQDN을 반환합니다 gethostbyname
( uname
시스템 호출에 의해 반환됨, uname(2)
매뉴얼 페이지 참조).
hostname -A
모호하고 직관적이지 않은 것입니다. 특히 이름과 설명("모든 FQDN")에도 불구하고 표준 FQDN을 제공하도록 설계되지 않았습니다. 그래서 나는 그것을 사용하지 말라고 말하고 싶습니다. 한 가지 이유는 FQDN이 파일에 연결될 수 있는 127.0.1.1과 같은 시스템의 유효한 IP 주소가 누락되었기 때문입니다 /etc/hosts
(예를 들어, 이는 현재 Debian 및 Ubuntu에서 기본값입니다). 이 접근 방식의 또 다른 문제점 hostname -A
은 IP 주소의 역방향 확인이 반드시 FQDN을 제공하는 것은 아니며 단지 짧은 이름일 수도 있다는 것입니다.
Python 문제와 관련하여 버그가 있을 수 있습니다. 나는 모른다. 다음 Perl 스크립트를 사용해 보시기 바랍니다:
#!/usr/bin/env perl
use strict;
use POSIX;
my $nodename = (POSIX::uname)[1];
print "Nodename: $nodename\n";
my @ghbn = gethostbyname $nodename;
print "FQDN: $ghbn[0]\n";
$ghbn[0] !~ /\./ && $ghbn[1] =~ /(\S+\.\S+)/
and print "Fixed FQDN from aliases: $1\n";