(copiado de uma das minhas respostas no SF )
O hostname
comando retorna resultados do DNS e /etc/hosts
.
hostname
é equivalente a uname -n
e é o "nome do host" ou "nome do nó" real da caixa.
Todos os outros hostname
argumentos usam esse nome de nó para procurar informações.
Portanto, antes de prosseguir, devo explicar o /etc/hosts
formato do arquivo.
O primeiro campo é bastante óbvio, é o endereço IP para o qual todos os nomes de host na linha devem resolver. O segundo campo é o nome do host principal para esse IP. Os campos restantes são aliases.
Portanto, se você executá- hostname -f
lo, primeiro tentará resolver o IP do seu nome de nó. Dependendo de como você tem a hosts:
entrada configurada /etc/nsswitch.conf
neste método, poderá variar.
- Se você o tiver configurado para usar o DNS, ele usará os domínios de pesquisa configurados
/etc/resolv.conf
até receber um IP de volta do DNS.
- Se você o tiver configurado para usar arquivos, ele procurará
/etc/hosts
uma linha em que o nome do host principal ou o nome alternativo seja seu nome de nó atual ( uname -n
) e, em seguida, retorne o endereço IP nessa linha.
Depois de ter o IP, ele tentará uma pesquisa inversa nesse IP. Novamente, ele usará o DNS para esse arquivo e o seu host, com base no seu nsswitch.conf
. No caso de usar o arquivo hosts, ele retornará a entrada principal (que é o primeiro campo após o IP no arquivo).
hostname -a
funcionará apenas com o arquivo hosts, pois fazer uma pesquisa inversa no DNS fornece apenas 1 resultado. Com o arquivo hosts, ele retorna os alises na linha correspondente (que é tudo após a primeira entrada, o nome do host principal).
Portanto, em resumo, o motivo provável do seu problema é que você não tem nenhuma entrada /etc/hosts
que contenha seu nome de host ( uname -n
).
Exemplos
Se o seu nome de nó for 'foobar' e você tiver uma entrada /etc/hosts
como esta:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
Então você obterá os seguintes resultados de comando:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost