Este artigo tem como principal objetivo descrever o uso dos comandos hwclock e date em sistemas GNU/Linux.
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
Relógio baseado no sistema (System Time)
É tempo mantido por um relógio dentro do Kernel Linux e controlado por um "timer interrupt".
Diferente do "hardware clock", o "System time" só é utilizado quando o sistema GNU/Linux está em execução na máquina.
O "System time" é o número de segundos desde 1 de Janeiro de 1970 (UTC).
O "System time" é o tempo que importa para sistema GNU/Linux, pois "hardware clock" mantém o relógio do sistema enquanto o GNU/Linux não está em execução. O "system time" é inicializado de acordo o valor do "hardware clock" quando inicializamos o sistema.
O comando date exibe e configura a data e hora do sistema (system time).
Formato de utilização do comando:
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Opções para comando date:
* -d ou --date=STRING: Exibe a data informada pela STRING. Ex.:
# date -d "11/20/2006 11:25:00"
ou
# date --date="11/20/2006 11:25:00"
Resultado: Seg Nov 20 11:25:00 BRDT 2006
OBS: BRDT indica que a data do sistema está dentro do período de horário de verão informado por /etc/localtime.
* -f ou file=DATAFILE: Igual a opção -d, porém executará o comando para cada linha contida no arquivo. Ex.:
# date -f /home/xyz/arquivo.txt
ou
# date --file=/home/xyz/arquivo.txt
* -ITIMESPEC, --iso-8601: PENDENTE testes.
* -r ou --reference=FILE: Exibe a última data/hora de modificação de um arquivo. Ex.:
# date -r /home/xyz/arquivo.txt
ou
# date --reference=/home/xyz/arquivo.txt
* -R ou --rfc-2822: Exibe a data/hora no formato RFC 2822. Ex.:
# date -R
ou
# date --rfc-2822
Resultado: Wed, 15 Nov 2006 11:44:10 -0200
* -s ou --set=STRING: Ajusta o tempo de acordo com a STRING. Ex.:
# date -s "11/15/2006 11:58:00"
ou
# date --set "11/15/2006 11:58:00"
Resultado: Qua Nov 15 11:58:00 BRDT 2006
OBS: a opção -s ou --set pode ser usada para alterar somente a data ou a hora.
* -u ou --utc ou --universal: Exibe ou ajusta a data/hora no formato UTC (Coordinated Universal Time). Ex.:
# date -u
ou
# date --utc
ou
# date --universal
Resultado: Qua Nov 15 13:59:58 UTC 2006
OBS: O exemplo acima trata somente da exibição da data/hora no formato UTC, para ajuste da data/hora em formato UTC esta opção deve ser combinada com a opção -s ou --set.
* --help: Está opção exibe a tela de ajuda.
* --version: Exibe informações sobre a versão do comando.
Para mais detalhes consulte o manual do comando date:
$ man date
Credito: Samir
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
Relógio baseado no sistema (System Time)
É tempo mantido por um relógio dentro do Kernel Linux e controlado por um "timer interrupt".
Diferente do "hardware clock", o "System time" só é utilizado quando o sistema GNU/Linux está em execução na máquina.
O "System time" é o número de segundos desde 1 de Janeiro de 1970 (UTC).
O "System time" é o tempo que importa para sistema GNU/Linux, pois "hardware clock" mantém o relógio do sistema enquanto o GNU/Linux não está em execução. O "system time" é inicializado de acordo o valor do "hardware clock" quando inicializamos o sistema.
O comando date exibe e configura a data e hora do sistema (system time).
Formato de utilização do comando:
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Opções para comando date:
* -d ou --date=STRING: Exibe a data informada pela STRING. Ex.:
# date -d "11/20/2006 11:25:00"
ou
# date --date="11/20/2006 11:25:00"
Resultado: Seg Nov 20 11:25:00 BRDT 2006
OBS: BRDT indica que a data do sistema está dentro do período de horário de verão informado por /etc/localtime.
* -f ou file=DATAFILE: Igual a opção -d, porém executará o comando para cada linha contida no arquivo. Ex.:
# date -f /home/xyz/arquivo.txt
ou
# date --file=/home/xyz/arquivo.txt
* -ITIMESPEC, --iso-8601: PENDENTE testes.
* -r ou --reference=FILE: Exibe a última data/hora de modificação de um arquivo. Ex.:
# date -r /home/xyz/arquivo.txt
ou
# date --reference=/home/xyz/arquivo.txt
* -R ou --rfc-2822: Exibe a data/hora no formato RFC 2822. Ex.:
# date -R
ou
# date --rfc-2822
Resultado: Wed, 15 Nov 2006 11:44:10 -0200
* -s ou --set=STRING: Ajusta o tempo de acordo com a STRING. Ex.:
# date -s "11/15/2006 11:58:00"
ou
# date --set "11/15/2006 11:58:00"
Resultado: Qua Nov 15 11:58:00 BRDT 2006
OBS: a opção -s ou --set pode ser usada para alterar somente a data ou a hora.
* -u ou --utc ou --universal: Exibe ou ajusta a data/hora no formato UTC (Coordinated Universal Time). Ex.:
# date -u
ou
# date --utc
ou
# date --universal
Resultado: Qua Nov 15 13:59:58 UTC 2006
OBS: O exemplo acima trata somente da exibição da data/hora no formato UTC, para ajuste da data/hora em formato UTC esta opção deve ser combinada com a opção -s ou --set.
* --help: Está opção exibe a tela de ajuda.
* --version: Exibe informações sobre a versão do comando.
Para mais detalhes consulte o manual do comando date:
$ man date
Credito: Samir