主机名、主机名 --fqdn 和主机名 -A 之间有什么区别

主机名、主机名 --fqdn 和主机名 -A 之间有什么区别

我有一台更改了主机名的机器。我用命令更改了/etc/hosts/etc/sysconfig/network、 和hostnamehostname返回正确的短名称,hostname --fqdn返回预期的 FQDN,但hostname -A返回旧名称。我更改了计算机的 IP 地址,以确保它不是外部 DNS 缓存。

如果我打开 python 并运行

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。因此我会说:不要使用它。原因之一是它错过了机器的有效 IP 地址,例如 127.0.1.1,FQDN 可能在文件中与该地址关联/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";

相关内容