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:

  1. Seu sistema já tem um hostname estático configurado em /etc/hostname.
  2. O systemd dá prioridade maior ao hostname estático do que ao transitório.
  3. 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 64 caracteres
  • 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 --hostname seja 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 64 caracteres
  • 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:

  1. Documentação de hostname do systemd
  2. Página man do hostnamectl
  3. Serviço systemd-hostnamed
  4. Manual do Administrador Debian — Configuração de Rede
  5. RFC 1178: Escolhendo um Nome para seu Computador
  6. RFC 1123: Requisitos para Hosts da Internet
  7. Wiki Arch Linux: Configuração de rede
  8. Manipulação de hostname pelo NetworkManager
  9. Wiki Debian: Hostname
  10. Repositório GitHub do systemd — Código fonte do hostnamed