Idioma
Categoria
Pesquisar

Configure data, hora e fuso horário no Linux usando o terminal

Descubra como ajustar o relógio e o fuso horário no Linux e no hardware (BIOS/UEFI). Sincronize com servidores NTP e garanta que o relógio do sistema esteja sempre atualizado e exato

Configure data, hora e fuso horário no Linux usando o terminal
Em Terminal Por Rudi Drusian Lange
Publicado em
Última atualização

Ambiente de configuração

Este artigo foi elaborado utilizando a distribuição Slackware em sua versão 15.0. Muitas distribuições Linux modernas empregam o comando timedatectl para configurações de data, hora e fuso horário; no entanto, esse comando não será abordado neste documento. O Slackware utiliza comandos mais tradicionais, que devem funcionar corretamente na maioria das distribuições Linux atuais.

Introdução

O fuso horário do Linux é definido através do arquivo /etc/localtime, mas é possível configurá-lo tanto globalmente quanto para um usuário específico usando a variável de ambiente TZ. Para usuários individuais ela pode ser definida no arquivo ~/.bashrc, enquanto para o sistema inteiro, ela pode ser configurada em /etc/profile ou, em algumas distribuições, em /etc/environment.

O comando date é utilizado para exibir ou configurar manualmente a data e hora no Linux, enquanto o comando ntpdate utiliza o protocolo NTP para realizar uma sincronização pontual do horário com outros computadores na rede através da porta 123/UDP. Já o daemon ntpd é responsável por manter a sincronização contínua do relógio do sistema com servidores NTP.

UTC vs Localtime

UTC é o horário padrão global, não considera fuso horário ou horário de verão, a mesma hora UTC é utilizada em qualquer local do mundo. Localtime é o fuso horário específico da localização onde o sistema esta sendo configurado.

Fuso horário

O fuso horário no Linux é definido utilizando o banco de dados de fuso horário disponibilizado e mantido pela IANA. No Slackware o pacote que contém essa lista é o glibc-zoneinfo e as informações das zonas são organizadas no diretório /usr/share/zoneinfo/ por regiões (como "America", Europe", "Asia").

$ bash

ls /usr/share/zoneinfo/

Dentro das pastas das regiões estão os arquivos de zona com o nome de cidades (como "Sao_Paulo", "Buenos_Aires", "Los_Angeles"). Para visualizar um fuso horário específico use o comando:

$ bash

zdump /usr/share/zoneinfo/America/Los_Angeles

Para mudar o fuso horário:

# bash

ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime

Opcionalmente pode ser utilizado o comando timeconfig no Slackware para criar a configuração acima. Escolha a opção "NO" e depois encontre a sua localidade na lista disponibilizada. Lembre-se de executar o comando com o usuário root.

slackware-timeconfig-01

Teste com o comando date se o novo fuso foi aplicado. Caso a alteração não funcione, pode ser que o fuso horário esteja sendo definido pela variável de ambiente TZ. A variável tem prioridade para que seja possível definir fusos diferentes por usuário. Para manipular a variável em tempo de execução use:

# bash

# Verifica o valor de TZ
echo $TZ
America/Sao_Paulo

# Remove o valor de TZ
unset TZ

# Altera o valor de TZ
export TZ=America/Los_Angeles

Para manter a alteração permanente, a variável TZ deve ser configurada em ~/.bashrc. Adicione a linha:

~/.bashrc

export TZ=America/Sao_Paulo

Esta configuração é individual para o usuário. Para recarregar o arquivo .bashrc com as alterações realizadas:

$ bash

. ~/.bashrc

# ou
source ~/.bashrc

Já para usar a variável em nível de sistema ela pode ser configurada em /etc/profile, usando a mesma linha do arquivo .bashrc. Ou ainda em /etc/environment, porém neste arquivo não deve-se incluir o comando export.

/etc/environment

TZ=America/Sao_Paulo

Tanto /etc/profile quanto /etc/environment podem ser recarregados usando o mesmo método do arquivo .bashrc, ou então no próximo login do usuário.

Ajustando o relógio manualmente

Usando o comando date para consultar e alterar a data, a hora e o fuso horário. Lembre-se de utilizar o  usuário root para alterar o horário.

# bash

# Consultando a data, hora e fuso
date
Tue Oct  1 09:16:27 -03 2024

# Alterando - ano/mês/dia hora:minuto:segundos
date --set "2024/10/01 09:20:00"
Tue Oct  1 09:20:00 -03 2024

Na consulta da data a informação -03 faz referência ao horário relativo ao UTC, ou seja, três horas a menos.

Sincronizando o relógio com um servidor NTP remoto

Para atualizar o horário através de um servidor na internet é preciso ter o pacote ntp, a distribuição slackware disponibiliza a instalação através do comando slackpkg.

# bash

# Sincronizando o horário
ntpdate pool.ntp.org
5 May 00:41:05 ntpdate[3132]: step time server 201.49.148.135 offset 6.872209 sec

# Usando um servidor no Brasil
ntpdate br.pool.ntp.org
5 May 00:50:04 ntpdate[3921]: adjust time server 201.49.148.135 offset -0.002182 sec

Na maioria dos casos é recomendado utilizar pool.ntp.org para encontrar um servidor NTP (ou 0.pool.ntp.org, 1.pool.ntp.org, etc., caso você precise de múltiplos servidores). O sistema tentará automaticamente selecionar os servidores mais próximos de você.

Ao executar o comando ntpdate, o horário será atualizado no momento da execução do comando. Para manter o relógio sincronizado, utilize o serviço ntpd. Para isso, primeiro edite o arquivo de configuração /etc/ntp.conf e remova os comentários das linhas conforme abaixo:

/etc/ntp.conf

# Servidores NTP, liste um ou mais para fazer a sincronização
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst

Depois, conceda permissão de execução ao script /etc/rc.d/rc.ntpd e inicie o serviço com os comandos abaixo:

# bash

# Conceda permissão de execução
chmod +x /etc/rc.d/rc.ntpd

# Inicie o serviço
/etc/rc.d/rc.ntpd start

Para realizar um teste, altere a data manualmente utilizando o comando date, conforme demonstrado anteriormente. Note que o horário não será corrigido imediatamente, existe um intervalo de checagem padrão que varia entre 64 segundos (mínimo) e 1024 segundos (máximo).

Esses valores podem ser ajustados configurando os parâmetros maxpoll e minpoll. Para mais informações consulte o manual: man ntp.conf.

Após alterar a data, aguarde pelo menos 17 minutos (1024 segundos) para que o horário seja corrigido automaticamente. Alternativamente, você pode reiniciar o serviço manualmente para forçar a correção imediata, utilizando o comando abaixo:

# bash

# Reiniciando o serviço
/etc/rc.d/rc.ntpd restart

Relógio do hardware

O relógio do hardware é um dispositivo eletrônico que mede a passagem do tempo, também conhecido como RTC. É o horário exibido na BIOS ou UEFI dos computadores.

Para evitar inconsistências em sistemas de inicialização múltipla (dual boot) com diferentes instalações Linux no mesmo computador, é necessário configurar o relógio do hardware corretamente, definindo a utilização do horário local (localtime) ou baseado no UTC.

Este procedimento deve ser realizado apenas uma vez para garantir que o fuso horário seja configurado corretamente. Abaixo será demonstrado como consultar o relógio do hardware e como definir o fuso horário.

# bash

# Consultando o horário do hardware
hwclock --show

# bash

# Define o fuso horário como local
hwclock --systohc --localtime 

# ou
hwclock -w -l

# bash

# Define o horário baseado no UTC
hwclock --systohc --utc

# ou
hwclock -w -u

Referências

Para elaboração deste artigo a principal fonte foi o manual (man page) disponível no Slackware Linux.

Parte do conteúdo deste site, incluindo textos, imagens, gráficos e outros materiais, pode ser gerado ou aprimorado por ferramentas de inteligência artificial (IA). Para mais detalhes sobre o uso de IA, consulte nossos Termos de Uso.