Data, hora e timezone em sistemas GNU-Linux

Este artigo tem como principal objetivo descrever o uso dos comandos hwclock e date em sistemas GNU/Linux.

[ Hits: 68.571 ]

Por: Samir em 10/06/2007


Relógio baseado em hardware (hardware clock)



É um relógio disponibilizado pela CPU. Esse relógio mantém-se em funcionamento mesmo quando a CPU está desligada.

OBS: Para que a CPU mantenha esse relógio em funcionamento, mesmo quando a máquina está desligada, a bateria localizada na CPU deve estar em perfeitas condições.

Em sistemas GNU/Linux o comando utilizado para consulta e ajuste do "hardware clock" é hwclock.

O sistema GNU/Linux utiliza o horário do "hardware clock" no momento da inicialização para ajustar o "System time";

Segue abaixo um pequeno guia de referência sobre o aplicativo hwclock:

Funções do aplicativo hwclock:
  • --help ou -h: Exibe a tela de ajuda do aplicativo. Ex.:

    # hwclock -h
    ou
    # hwclock --help

  • --show ou -r: Efetua uma consulta e exibe a data e hora do "hardware clock". A hora mostrada é sempre exibida como definido em localtime, mesmo que o "hardware clock" seja mantido em UTC. Ex.:

    # hwclock --show
    ou:
    # hwclock -r

    O exemplo acima apresenta como resulta a hora mantida pelo "hardware clock", sempre como localtime.

  • --set: Ajusta a data e o hora de acordo com a opção --date=string_date. Ex.:

    # hwclock --set --date="22/04/2006 10:10:01" --utc
    ou --localtime

    As opções --date, --utc e --localtime serão explicadas abaixo.

  • --hctosys: Ajusta o "System time" a partir da data e hora do "hardware clock". Também configura o valor do "time zone" do kernel igual ao definido na variável de ambiente TZ ou em /usr/share/zoneinfo. Ex.:

    # hwclock --hctosys

  • --systohc: Ajusta o "hardware clock" a partir do "System time". Ex.:

    # hwclock --systohc

  • --adjust: Adiciona ou subtrai um valor que representa um desvio sistemático do "hardware clock" desde a última vez que este foi configurado ou ajustado. É sabido que o "hardware clock" não é muito preciso, mas muitas vezes podemos saber o quanto ele é impreciso, pois ele sempre ganha ou perde a mesma quantidade de tempo a cada dia. Isso é chamado desvio sistemático.

    Este ajuste funciona da seguinte maneira: o comando hwclock mantém o arquivo /etc/adjtime; esse arquivo armazena informações relativas ao ajuste do horário. Imagine que você inicia um sistema sem a existência do arquivo /etc/adjtime e executa os seguintes passos:

    1) ajusta o "hardware clock" ->

    # hwclock --set --date="22/04/2006 10:10:01"

    Será criado o arquivo /etc/adjtime e o "hardware clock" será ajustado. Será gravado no arquivo o tempo referente ao último ajuste do horário.

    2) você verificou que 5 dias depois, o "hardware clock", ganhou 10 segundos; 10 segundos em 5 dias = 2 segundos por dia.

    3) você então ajusta o "hardware clock" novamente:

    # hwclock --set --date= (subtraindo 10 segundos)

    O arquivo /etc/adjtime será atualizado para informar a hora informada no comando anterior como a hora do último ajuste e o desvio com uma taxa de 2 segundos por dia.

    OBS: Dessa forma o administrador do sistema pode executar diariamente o comando:

    # hwclock --adjust

    para subtrair 2 segundos.

  • --getepoch: Exibe em "stdout" o valor "epoch" do "hardware clock" do kernel. O kernel Linux mantém o valor "epoch" para o "hardware clock" somente em máquinas Alpha;

  • --setepoch: Ajusta o valor "epoch" do "hardware clock" para o valor da opção --epoch. O kernel Linux mantém o valor "epoch" para o "hardware clock" somente em máquinas Alpha;

  • --version ou -v: Exibe em "stdout" a versão do aplicativo hwclock. Ex.:

    # hwclock --version
    ou
    # hwclock -v

Opções usadas com a maioria das funções do aplicativo hwclock:
  • --utc: indica que o "hardware clock" é mantido em UTC;

  • --localtime: indica que o "hardware clock" é mantido em local time;

    OBS: O administrador deverá escolher se manterá o "hardware clock" em UTC ou "local time". A informação sobre como está configurado o "hardware clock" é mantida no arquivo /etc/adjtime. Caso o arquivo /etc/adjtime não exista, o padrão será "local time".

    Ex.: Para facilitar o entendimento, vamos supor a seguinte situação: o administrador de um sistema GNU/Linux percebeu que o "hardware clock" estava incorreto e resolveu ajustá-lo usando o aplicativo hwclock. O administrador procurou no diretório /etc e não encontrou o arquivo adjtime.

    Para ajustar o "hardware clock" o administrador executou os seguintes passos:

    1) Efetuou logon no sistema como root;
    2) Digitou a seguinte linha de comando:

    # hwclock --set --date="11/04/2006 16:50:15";

    3) Pressionou <ENTER>;

    Resultado: O "hardware clock" foi ajustado para:

    Data: 04 de Novembro de 2006;
    Hora: 16:50:15

    Como não foi definido se o "hardware clock" seria mantido em UTC ou "local time", o arquivo /etc/adjtime, que mantém informações sobre o "hardware clock", foi configurado para "local time".

    Caso o administrador optasse por manter o "hardware clock" em UTC, ele deveria efetuar os seguintes passos:

    1) Efetuar logon no sistema como root;
    2) Digitar a seguinte linha de comando:

    # hwclock --set --date="10/13/2006 10:10:01" --utc;

    3) Pressionar <ENTER>;

  • --directisa: Acessa o barramento ISA diretamente ao invés do arquivo de dispositivo /dev/rtc;

  • --badyear: Indica que o "hardware clock" é incapaz de armazenar o valor que representa o ano, quando este não esta compreendido entre 1994 - 1999. Ex.:

    # hwclock --set --date="01/25/2006 11:15:01" --badyear

  • --date: especifica a data/hora para o qual desejamos atualizar o "hardware clock". Ex.:

    # hwclock --set --date="01/25/2006 11:15:01"

  • --epoch=year Especifica o ano que começa o valor "epoch" do hardware clock. O kernel Linux mantém o valor "epoch" para o "hardware clock" somente em máquinas Alpha;

  • --noadjfile Não acessa o arquivo /etc/adjtime. Essa opção requer o uso das opções --utc ou --localtime. Ex.:

    # hwclock --set --date="01/25/2006 11:15:01" --noadjfile

    OBS: Todas as informações acima, foram baseadas no manual (man) do comando hwclock. Há opções do comando hwclock que não foram abordadas nesta documentação. Para detalhes, consulte o manual do comando:

    $ man hwclock

    Próxima página

Páginas do artigo
   1. Relógio baseado em hardware (hardware clock)
   2. Relógio baseado no sistema (System Time)
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

A importância de um backup

Sim! Outro artigo na linha "Por onde começo?"

FreeRADIUS - Noções básicas - Parte I

Como instalar programas no Linux

Instalando o Slackware em português

  
Comentários
[1] Comentário enviado por vodooo em 10/06/2007 - 11:05h

Parabéns, bom artigo!

Super bem explicado e exemplificado!

Abraços

[2] Comentário enviado por GilsonDeElt em 10/06/2007 - 12:17h

Legal!
Não sabia da existência de dois sistemas de Time Zone no PC.
Muito bem explicado!
Vlw!

[3] Comentário enviado por malanga em 10/06/2007 - 17:50h

cara,

tive um problema com diferenca de hora em meu linux, por exemplo
dava um date -utc ele me mostrava 14:00 e quando dave um date ele me mostrava 15:30...
isso dava erro por exemplo no servidor de FTP q sempre buscava informacoes de hora entao se eu jogasse um arquivo via ftp ele ficava uma hora e meia criado antes da hora atual...

para resolver o meu problema tive q excluir o localtime do /etc assim, ele pega so um horario ...

como poderia resolver isso sem excluir o arquivo /etc/localtime???


[4] Comentário enviado por sergiomb em 11/06/2007 - 13:06h

oi , por acaso não sabes de nenhum código que faça o mesmo mas em pyhton ou perl ?
Obrigado


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts