Jus*_*son 6 networking rhel hostname
我有一台我更改了主机名的机器。我改变了它/etc/hosts
,/etc/sysconfig/network
以及与hostname
命令。hostname
返回正确的短名称,hostname --fqdn
返回预期的 FQDN,但hostname -A
返回旧名称。我更改了机器的 IP 地址以确保它不是外部 DNS 缓存。
如果我打开 python 并运行
import socket
print(socket.gethostname())
print(socket.getfqdn())
Run Code Online (Sandbox Code Playgroud)
两者都返回旧的主机名/fqdn,与 hostname -A
从主机名手册页看来--fqdn
,它只需要短名称和域并将它们放在一起。
显示 FQDN(完全限定域名)。FQDN 由短主机名和 DNS 域名组成。除非您使用 bind 或 NIS 进行主机查找,否则您可以更改 /etc/hosts 文件中的 FQDN 和 DNS 域名(它是 FQDN 的一部分)。
这些命令之间有什么区别,我如何更好地解决旧主机名仍然存在的原因。
hostname
返回配置的主机名或节点名。实际上,它可以是短名称(在大多数配置中)或长名称(在这种情况下通常是 FQDN)。短名称由 给出hostname --short
。
hostname --fqdn
返回gethostbyname
节点名上的 FQDN (由uname
系统调用返回,请参见uname(2)
手册页)。
hostname -A
是一些晦涩和不直观的东西。特别是,尽管它的名称和描述(“所有 FQDN”),它在设计上并没有提供标准的 FQDN。因此我会说:不要使用它。一个原因是它错过了机器的有效 IP 地址,例如 127.0.1.1,FQDN 可能与/etc/hosts
文件中的 FQDN 相关联(例如,这是当前在 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";
Run Code Online (Sandbox Code Playgroud)