
ホスト名が変更されたコンピュータがあります。/etc/hosts
、/etc/sysconfig/network
およびコマンドを使用して変更しましたhostname
。hostname
正しい短い名前を返し、hostname --fqdn
予想されるFQDNを返しますが、hostname -A
古い名前を返します。外部DNSをキャッシュしないようにコンピュータのIPアドレスを変更しました。
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を提供するように設計されていません。だから私はそれを使用しないように言いたいと思います。 1つの理由は、FQDNがファイルに接続できる127.0.1.1などのシステムの有効なIPアドレスが欠落しているためです/etc/hosts
(たとえば、これは現在DebianとUbuntuのデフォルトです)。このアプローチのもう1つの問題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";