Qual é a diferença entre hostname, hostname --fqdn e hostname -A?

4

Eu tenho uma máquina que eu mudei o hostname de. Eu mudei em /etc/hosts , /etc/sysconfig/network e com o comando hostname . hostname retorna o nome abreviado correto, hostname --fqdn retorna o FQDN esperado, mas hostname -A retorna um nome antigo. Eu mudei o endereço IP da máquina para me certificar de que não era o cache DNS externo.

Se eu abrir o python e executar

import socket
print(socket.gethostname())
print(socket.getfqdn())

Ambos retornam o nome do host antigo / fqdn, o mesmo que hostname -A

A partir da página man do nome do host, aparece --fqdn apenas o nome curto e o domínio e os coloca juntos.

Display the FQDN (Fully Qualified Domain Name). A FQDN consists of a short host name and the DNS domain name. Unless you are using bind or NIS for host lookups you can change the FQDN and the DNS domain name (which is part of the FQDN) in the /etc/hosts file.

Qual é a diferença entre esses comandos e como posso resolver melhor o motivo pelo qual o nome do host antigo está por perto?

    
por Rothgar 13.08.2014 / 01:01

1 resposta

6

hostname retorna o nome do host ou nodename configurado. Na prática, pode ser um nome abreviado (na maioria das configurações) ou um nome longo (normalmente o FQDN, neste caso). O nome abreviado é dado por hostname --short .

hostname --fqdn retorna o FQDN, que é gethostbyname no nome do nó (conforme retornado pela chamada de sistema uname , consulte uname(2) man page).

hostname -A é algo obscuro e não intuitivo. Em particular, apesar de seu nome e descrição ("todos os FQDNs"), ele não fornece o FQDN padrão, por design. Assim eu diria: não use. Um dos motivos é que ele perde endereços IP válidos da máquina, como 127.0.1.1, com o qual o FQDN pode estar associado no arquivo /etc/hosts (este é atualmente o padrão no Debian e no Ubuntu, por exemplo). Outro problema com o método hostname -A é que a resolução inversa de um endereço IP não fornece necessariamente um FQDN; pode ser apenas um nome curto.

Em relação ao seu problema com o python, pode ser um erro. Eu não sei. Eu sugiro que você tente o seguinte script 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";
    
por 13.08.2014 / 02:08