Resumo rápido
Sistemas Linux modernos que usam systemd suportam três tipos de hostname:
- Pretty hostname — um nome legível para exibição.
- Static hostname — o hostname permanente armazenado em disco.
- Transient hostname — um hostname temporário usado em tempo de execução.
Cada tipo de hostname serve a um propósito específico e segue uma ordem de prioridade definida. Entender as diferenças ajuda a escolher o hostname correto para seu caso de uso e evita confusão com identificação do sistema, resolução de nomes, logs e configuração relacionada à rede.
O que é um hostname no Linux?
As distribuições pré-systemd (RHEL 6, Debian 7, Fedora 14 e anteriores) armazenavam o hostname estático em:
- Debian/Ubuntu:
/etc/hostname - RHEL/CentOS
6:/etc/sysconfig/network - Slackware:
/etc/HOSTNAME
Um hostname é o identificador de rede da sua máquina. Em termos simples, é o nome que um sistema Linux usa para se identificar.
Quando você digita hostname em um terminal, vê como o sistema se chama naquele momento.
O hostname aparece em:
- Prompts do shell
- Logs
- Serviços de rede
- Conexões remotas
Sistemas Linux antigos tinham apenas um hostname. O systemd introduziu múltiplos tipos de hostname para lidar corretamente com laptops, DHCP, contêineres e sistemas em nuvem.
Este comportamento se aplica apenas a sistemas baseados em systemd.
Entender a diferença evita confusão quando seu hostname muda inesperadamente ou não persiste após a reinicialização.
As distribuições pré-systemd (RHEL 6, Debian 7, Fedora 14 e anteriores) armazenavam o hostname estático em:
- Debian/Ubuntu:
/etc/hostname - RHEL/CentOS
6: `ZX - Slackware:
/etc/HOSTNAME
Os três tipos de hostname
Static hostname
Esta é a identidade permanente do seu sistema.
Ele reside no arquivo /etc/hostname. Quando o sistema inicializa, ele lê este arquivo e define o hostname a partir dele.
Alterações no hostname estático sobrevivem a reinicializações. É o que você define ao instalar Debian/Ubuntu ou configurar um novo servidor.
Transient hostname
Este é o hostname atual do kernel em tempo de execução.
Ele existe apenas na memória. O kernel usa este nome para todas as operações de rede no momento.
Na inicialização, o hostname transitório copia do hostname estático. Mas programas como clientes DHCP ou gerenciadores de rede podem alterá-lo durante a execução.
Quando você reinicia, o hostname transitório é redefinido para corresponder ao hostname estático novamente.
Pretty hostname
Esta é uma descrição legível para humanos.
Pode conter espaços, caracteres especiais e UTF-8. Ele reside em /etc/machine-info e serve como metadado.
A maioria das ferramentas o ignora. Raramente você precisará alterá-lo.
Hostname temporário e transitório são a mesma coisa?
Em sistemas Linux que usam systemd, transient hostname é o termo oficial para um hostname armazenado apenas na memória e não salvo em /etc/hostname. Ele normalmente é redefinido após uma reinicialização.
O termo temporary hostname não é um termo oficial do systemd. As pessoas costumam usá-lo informalmente para descrever um hostname que não persiste entre reinicializações. Na prática, quando a documentação ou tutoriais mencionam um hostname temporário, geralmente se referem a um hostname transitório.
Portanto, embora os termos não sejam tecnicamente idênticos, eles geralmente se referem ao mesmo comportamento: uma alteração de hostname que não persiste após a reinicialização.
Como o transitório e o estático diferem
O hostname estático é sua configuração. O hostname transitório é seu estado atual.
Pense no estático como "o que você quer" e no transitório como "o que você tem agora".
Servidores DHCP, VPNs e orquestradores de contêineres frequentemente alteram o hostname transitório dinamicamente. Eles deixam seu hostname estático intocado.
Essa separação permite que seu sistema se adapte a diferentes redes sem perder sua identidade.
Ponto-chave: O hostname transitório é o que realmente importa para operações de rede. Programas resolvem nomes, enviam pacotes e registram eventos usando o hostname transitório.
De relance: os três tipos de hostname no Linux
Isso importa quando você está configurando servidores, solucionando problemas de rede ou gerenciando ambientes dinâmicos onde os hostnames mudam.
Como verificar seu hostname atual
1. Usando hostnamectl (recomendado)
hostnamectl
Isso mostra todos os tipos de hostname junto com informações do sistema:
Static hostname: Ubuntu2604
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: c315a5ec7511408d8c2f9bf97f5adeaf
Boot ID: 02d8a23f494e44508d1c6ca1079849d8
Virtualization: kvm
Operating System: Ubuntu 26.04 LTS
Kernel: Linux 7.0.0-22-generic
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _Q35 + ICH9, 2009_
Hardware Version: pc-q35-9.2
Firmware Version: rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org
Firmware Date: Tue 2014-04-01
Firmware Age: 12y 2month 1w 3d
Observe que o comando hostnamectl não mostra a linha do hostname transitório a menos que ele seja diferente do estático.
Para ver apenas o hostname estático:
hostnamectl --static
2. Usando o comando hostname
hostname
Isso mostra apenas o hostname transitório atual (o que o kernel usa agora).
3. Verificando o arquivo de hostname estático
cat /etc/hostname
Isso mostra qual hostname é carregado na inicialização.
4. Verificando o que os programas veem
uname -n
Isso retorna o hostname transitório que os aplicativos usam, idêntico ao comando hostname.
Como alterar hostnames no Linux (passo a passo)
1. Definindo apenas o hostname transitório
Um hostname transitório é destinado principalmente a sistemas que não têm um hostname estático configurado. Por exemplo:
- Servidor DHCP fornece um hostname
- Cloud-init atribui um hostname
- Runtime de contêiner atribui um hostname
Se um hostname estático existir, o systemd assume que é a escolha deliberada do administrador e ignora o transitório.
Por exemplo, se você tentar definir um hostname transitório usando o seguinte comando quando o hostname estático já estiver definido:
sudo hostnamectl set-hostname webserver01 --transient
Você veria a seguinte mensagem:
Hint: static hostname is already set, so the specified transient hostname will not be used.
Isso significa:
- Seu sistema já tem um hostname estático configurado em
/etc/hostname. - O systemd dá prioridade maior ao hostname estático do que ao transitório.
- Portanto, mesmo que você defina um hostname transitório, os aplicativos e o sistema continuarão usando o hostname estático.
Como testar um hostname transitório
Você precisaria remover o hostname estático primeiro:
sudo hostnamectl set-hostname "" --static
ou limpar manualmente /etc/hostname (não recomendado em sistemas de produção).
Em seguida, defina o hostname transitório:
sudo hostnamectl set-hostname webserver01 --transient
Verifique o resultado:
hostnamectl status
[or]
hostnamectl
Você verá:
Transient hostname: webserver01
Static hostname: (unset)
Pretty hostname: Ubuntu2604
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: c315a5ec7511408d8c2f9bf97f5adeaf
Boot ID: 02d8a23f494e44508d1c6ca1079849d8
Virtualization: kvm
Operating System: Ubuntu 26.04 LTS
Kernel: Linux 7.0.0-22-generic
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _Q35 + ICH9, 2009_
Hardware Version: pc-q35-9.2
Firmware Version: rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org
Firmware Date: Tue 2014-04-01
Firmware Age: 12y 2month 1w 3d
Como você pode ver na saída acima, o hostname transitório é webserver01, o hostname estático está vazio (não definido) e o pretty hostname é Ubuntu2604.
O kernel agora usa webserver01 para tudo. Mas após a reinicialização, ele reverte para Ubuntu2604 ou o hostname estático original que você definiu durante a instalação.
2. Definindo o hostname estático
sudo hostnamectl set-hostname production-db --static
Isso escreve em /etc/hostname:
cat /etc/hostname
Você verá a saída: production-db
Após a reinicialização, tanto o estático quanto o transitório serão production-db. Você pode verificar usando os seguintes comandos:
hostnamectl --static
hostnamectl --transient
O pretty hostname (se definido) permanece inalterado.
3. Definindo ambos de uma vez
sudo hostnamectl set-hostname my-server
Sem nenhuma flag, isso define tanto o estático quanto o transitório para o mesmo valor.
Isso é o que você quer na maioria dos casos.
4. O método antigo (não recomendado, apenas para fins educacionais)
sudo hostname quick-test
Isso altera o hostname transitório diretamente no kernel.
Funciona, mas o systemd não rastreia a alteração corretamente. Use hostnamectl para consistência.
Cenários do mundo real
Redes DHCP
Você define o hostname estático do seu laptop como my-laptop.
Quando você se conecta a uma rede corporativa, o servidor DHCP pode definir seu hostname transitório como client-192-168-1-100.
Enquanto conectado, seu sistema usa client-192-168-1-100. Quando você desconecta ou reinicia, ele retorna para my-laptop.
Isso acontece automaticamente. NetworkManager e dhclient cuidam disso.
Ambientes de contêineres
Docker e Kubernetes definem hostnames transitórios baseados em IDs de contêiner ou nomes de pods.
O hostname estático do seu host permanece inalterado. Cada contêiner recebe seu próprio hostname transitório em tempo de execução.
Esse isolamento evita conflitos e simplifica a orquestração.
Modo de manutenção
Você está trabalhando em um servidor de produção e quer sinalizar que ele está em manutenção.
Defina um hostname transitório:
sudo hostnamectl set-hostname MAINTENANCE-DO-NOT-USE --transient
Isso aparece em todos os logs e prompts do terminal imediatamente.
Após a manutenção, reinicie. O hostname é redefinido para o valor estático original.
Nenhum arquivo de configuração foi alterado. Nenhum risco de esquecer de reverter.
Problemas comuns de hostname
Problema 1: Hostname não persiste após reinicialização
Sintoma: Você altera o hostname, mas ele reverte após a reinicialização.
Causa: Você alterou apenas o hostname transitório.
Solução: Defina o hostname estático. Para também atualizar o hostname atual imediatamente:
# Update both static and transient at once (recommended)
sudo hostnamectl set-hostname your-hostname
# OR update only static (transient will match after reboot)
sudo hostnamectl set-hostname your-hostname --static
Problema 2: Hostname muda automaticamente
Sintoma: Seu hostname muda quando você se conecta a redes diferentes.
Causa: O servidor DHCP está sobrescrevendo seu hostname transitório.
Solução para NetworkManager (mais comum):
# Set a permanent hostname that DHCP cannot override
sudo nmcli general hostname your-permanent-hostname
sudo systemctl restart NetworkManager
Método alternativo (editar arquivo de configuração):
Edite /etc/NetworkManager/NetworkManager.conf:
[main]
hostname-mode=none
Em seguida, reinicie o NetworkManager:
sudo systemctl restart NetworkManager
Solução para dhclient legado (se usando configuração de rede estática sem NetworkManager):
Edite /etc/dhcp/dhclient.conf e adicione:
supersede host-name "your-permanent-hostname";
Problema 3: hostnamectl mostra valores diferentes do comando hostname
Sintoma: hostnamectl e hostname mostram nomes diferentes.
Causa: Algo alterou o hostname do kernel sem atualizar o systemd.
Solução: Reinicie o serviço systemd-hostnamed:
sudo systemctl restart systemd-hostnamed
Ou defina o hostname novamente com hostnamectl.
Problema 4: Hostname inválido quebra DNS ou serviços
Sintoma: Serviços falham, DNS não resolve ou certificados SSL não funcionam.
Causa: Hostname contém caracteres inválidos.
Regras de hostname válido (RFC 1123):
- Apenas letras minúsculas (
a-z), números (0-9) e hífens (-) - Deve começar e terminar com letra ou número
- Máximo de
64caracteres - Sem espaços, underscores ou caracteres especiais
Solução: Defina um hostname válido:
sudo hostnamectl set-hostname valid-hostname-01
Nota: Pretty hostnames (legíveis) não têm restrições de caracteres. Podem conter espaços, maiúsculas, emojis e caracteres especiais.
4 comandos Linux para verificar hostname
Verifique todos os tipos de hostname:
hostnamectl
Verifique o arquivo de hostname estático:
cat /etc/hostname
Verifique o que o kernel pensa:
hostname
Veja o que os programas veem:
uname -n
Todos esses comandos devem mostrar resultados consistentes se você definiu tanto o estático quanto o transitório.
Limitações e riscos
Sem garantias de sincronização
Se um programa alterar o hostname transitório diretamente via comando hostname, o serviço systemd-hostnamed pode ficar temporariamente em estado inconsistente. No entanto, o systemd detecta alterações de hostname do kernel na leitura.
Melhor prática: Use hostnamectl para todas as alterações de hostname para manter a consistência. Se encontrar inconsistências, reinicie o serviço:
sudo systemctl restart systemd-hostnamed
DHCP pode sobrescrever suas configurações
Em redes DHCP, seu hostname transitório pode mudar sem aviso. O servidor DHCP pode enviar uma opção de hostname que sobrescreve seu valor transitório.
Se a estabilidade do hostname for importante, configure o NetworkManager ou seu cliente DHCP para ignorar hostnames fornecidos pelo servidor (veja Problema comum #2).
Confusão em contêineres e VMs
Dentro de contêineres ou VMs, o comportamento do hostname depende do runtime de virtualização ou contêiner:
- Docker: Herda o hostname do host, a menos que
--hostnameseja especificado - LXC/LXD: Namespace UTS separado com hostname independente
- VMs em nuvem: cloud-init frequentemente define o hostname na inicialização
Sempre verifique o hostname real dentro do ambiente onde ele importa:
hostname
Validação de hostname estático
hostnamectl valida hostnames estáticos de acordo com os padrões RFC 1123. Caracteres inválidos (espaços, underscores, caracteres especiais) são rejeitados com um erro.
No entanto, o comando hostname (ignorando o systemd) e pretty hostnames aceitam qualquer string.
Regra importante para hostnames estáticos:
- Apenas letras minúsculas (
a-z), números (0-9) e hífens (-) - Deve começar e terminar com letra ou número
- Máximo de
64caracteres - Sem espaços, underscores (_) ou caracteres especiais
Nota: hostnamectl valida hostnames antes de aplicá-los. Se você especificar um hostname que contenha caracteres não suportados, o comando pode remover ou modificar automaticamente esses caracteres em vez de exibir um erro. O comportamento exato pode variar entre distribuições Linux e versões do systemd.
Por exemplo, em nosso sistema de teste Ubuntu 26.04, o seguinte comando:
sudo hostnamectl set-hostname 'bad_hostname#$!'
removeu automaticamente os caracteres não suportados e definiu o hostname como: badhostname
Portanto, como dissemos anteriormente, hostnames Linux devem conter apenas letras, números e hífens (-). Para evitar resultados inesperados, escolha um hostname que siga essas regras de nomenclatura desde o início.
Quando usar transitório vs estático
Use hostnames transitórios quando:
- Testar alterações de configuração temporariamente
- Executar em ambientes DHCP onde os nomes mudam com frequência
- Sinalizar estados especiais (manutenção, teste, staging)
- Você quer flexibilidade em tempo de execução sem alterações permanentes
Use hostnames estáticos quando:
- Configurar servidores de produção com identidades fixas
- Configurar serviços que dependem de hostnames consistentes
- Gerenciar registros DNS que apontam para máquinas específicas
- Você precisa que o hostname sobreviva a reinicializações
Defina ambos quando:
- Implantar um novo sistema que precisa de uma identidade permanente
- Você quer consistência imediata em todos os aspectos
- Configuração padrão de servidor ou estação de trabalho
FAQ: Respostas rápidas para perguntas comuns
P: Alterar o hostname requer reinicialização?
R: Não. Usar hostnamectl altera o hostname imediatamente. Apenas edições manuais em /etc/hostname exigem reinicialização ou um systemctl restart systemd-hostnamed para surtir efeito.
P: Posso usar letras maiúsculas em hostnames?
R: Não para hostnames estáticos. hostnamectl rejeita letras maiúsculas. Pretty hostnames podem usar maiúsculas livremente. Sempre use letras minúsculas, números e hífens para hostnames estáticos para evitar problemas de compatibilidade com serviços.
P: Qual é o comprimento máximo do hostname?
R: 64 caracteres de acordo com os padrões POSIX. Mantenha abaixo de 64 caracteres para compatibilidade.
P: Alterar o hostname quebrará minhas conexões SSH?
R: Não. Conexões SSH existentes permanecem ativas. Novas conexões usam o novo hostname em prompts e logs.
P: Preciso atualizar /etc/hosts após alterar o hostname?
R: Depende da sua distribuição.
No Debian/Ubuntu: Adicione:
127.0.1.1 your-hostname
Fedora/RHEL: Geralmente não é necessário.
Sistemas modernos com systemd-resolved ou nss-myhostname: Geralmente não é necessário.
Verifique seu /etc/hosts existente. Se você vir uma entrada para seu hostname antigo, atualize-a. Se não, provavelmente não precisa de uma.
Conclusão
Transitório e temporário significam a mesma coisa em conversas casuais, mas transitório é o termo preciso do systemd.
Hostnames estáticos persistem. Hostnames transitórios existem apenas até a reinicialização ou alteração manual. Ambos servem a propósitos claros em diferentes cenários.
Use hostnamectl para todas as alterações de hostname. Verifique seu trabalho com hostnamectl para ver todos os três tipos de uma vez.
Defina hostnames estáticos para identidade permanente. Use hostnames transitórios para estados temporários ou quando sistemas externos gerenciam o hostname dinamicamente.
Você deve saber qual tipo está alterando, quando ele persiste e quando não.
Recursos:
- Documentação de hostname do systemd
- Página man do
hostnamectl - Serviço
systemd-hostnamed - Manual do Administrador Debian — Configuração de Rede
- RFC 1178: Escolhendo um Nome para seu Computador
- RFC 1123: Requisitos para Hosts da Internet
- Wiki Arch Linux: Configuração de rede
- Manipulação de hostname pelo NetworkManager
- Wiki Debian: Hostname
- Repositório GitHub do systemd — Código fonte do hostnamed



