(copiado de uma das minhas respostas sobre SF )
O comando hostname
retorna resultados do DNS e /etc/hosts
.
hostname
é equivalente a uname -n
e é o "hostname" ou "nodename" real da caixa.
Todos os outros argumentos hostname
usam esse nome de nó para procurar informações.
Portanto, antes de prosseguir, devo explicar o formato do arquivo /etc/hosts
.
O primeiro campo é bastante óbvio, é o endereço IP que todos os nomes de host na linha devem resolver. O segundo campo é o nome do host principal desse IP. Os campos restantes são aliases.
Portanto, se você executar hostname -f
, ele tentará primeiro resolver o IP do seu nome de nó. Dependendo de como você tem a entrada hosts:
configurada em /etc/nsswitch.conf
, esse método irá variar.
- Se você tiver configurado para usar o dns, ele usará os domínios de pesquisa configurados em
/etc/resolv.conf
até receber um IP de volta do DNS. - Se você tiver configurado para usar arquivos, procurará em
/etc/hosts
para encontrar uma linha em que o nome do host principal ou o nome do alias seja seu nome de nó atual (uname -n
) e retorne o endereço IP nessa linha .
Quando tiver o IP, ele tentará uma pesquisa inversa nesse IP. Novamente, ele usará DNS para esse e seu arquivo de hosts com base em seu nsswitch.conf
. No caso de usar seu arquivo de hosts, ele retornará a entrada principal (que é o primeiro campo após o IP no arquivo).
hostname -a
só funcionará com o arquivo hosts, já que fazer uma pesquisa reversa no DNS fornece apenas 1 resultado. Com o arquivo hosts, ele retorna o alises na linha correspondente (que é tudo após a primeira entrada, o hostname primário).
Em suma, o motivo provável para o seu problema é que você não tem nenhuma entrada em /etc/hosts
que contenha seu nome de host ( uname -n
).
Exemplos
Se o nome do seu nó for 'foobar' e você tiver uma entrada em /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