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.572 ]

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

Trabalhando com datas no Linux

Um pouco sobre Budgie Desktop

Pós-instalação do Arch Linux em um Dell Vostro 1400

openSUSE Argon

Arch Linux - Passo a passo pós-instalação

  
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