Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
108.1 Lição 1
Tópico 105: Shells e scripts do Shell
105.1 Personalizar e trabalhar no ambiente shell
  • 105.1 Lição 1
  • 105.1 Lição 2
  • 105.1 Lição 3
105.2 Editar e escrever scripts simples
  • 105.2 Lição 1
  • 105.2 Lição 2
Tópico 106: Interfaces de usuário e Desktops
106.1 Instalar e configurar o X11
  • 106.1 Lição 1
106.2 Desktops gráficos
  • 106.2 Lição 1
106.3 Acessibilidade
  • 106.3 Lição 1
Tópico 107: Tarefas administrativas
107.1 Administrar contas de usuário, grupos e arquivos de sistema relacionados
  • 107.1 Lição 1
  • 107.1 Lição 2
107.2 Automatizar e agendar tarefas administrativas de sistema
  • 107.2 Lição 1
  • 107.2 Lição 2
107.3 Localização e internacionalização
  • 107.3 Lição 1
Tópico 108: Serviços essenciais do sistema
108.1 Manutenção da data e hora do sistema
  • 108.1 Lição 1
  • 108.1 Lição 2
108.2 Log do sistema
  • 108.2 Lição 1
  • 108.2 Lição 2
108.3 Fundamentos de MTA (Mail Transfer Agent)
  • 108.3 Lição 1
108.4 Configurar impressoras e impressão
  • 108.4 Lição 1
Tópico 109: Fundamentos de Rede
109.1 Fundamentos de protocolos de internet
  • 109.1 Lição 1
  • 109.1 Lição 2
109.2 Configuração persistente de rede
  • 109.2 Lição 1
  • 109.2 Lição 2
109.3 Soluções para problemas simples de rede
  • 109.3 Lição 1
  • 109.3 Lição 2
109.4 Configurar DNS cliente
  • 109.4 Lição 1
Tópico 110: Segurança
110.1 Tarefas administrativas de segurança
  • 110.1 Lição 1
110.2 Configurar a segurança do host
  • 110.2 Lição 1
110.3 Proteção de dados com criptografia
  • 110.3 Lição 1
  • 110.3 Lição 2
How to get certified
  1. Tópico 108: Serviços essenciais do sistema
  2. 108.1 Manutenção da data e hora do sistema
  3. 108.1 Lição 1

108.1 Lição 1

Certificação:

LPIC-1

Versão:

5.0

Tópico:

108 Serviços essenciais do sistema

Objetivo:

108.1 Controlar a hora do sistema

Lição:

1 de 2

Introdução

Na computação moderna, é essencial manter um controle preciso do tempo. A implementação desse controle, no entanto, é surpreendentemente complexa. A prática de controlar a hora parece trivial para o usuário final, mas o sistema precisa ser capaz de lidar com muitas idiossincrasias e casos extremos de forma inteligente. É preciso levar em conta o fato de que os fusos horários não são estáticos, mas podem ser alterados por uma decisão administrativa ou política. Um país pode optar por acabar com o horário de verão. Qualquer programa deve ser capaz de lidar com essas mudanças de uma maneira lógica. Felizmente para os administradores de sistema, as soluções para o controle de data e hora no sistema operacional Linux são maduras, robustas e geralmente funcionam sem muita interferência.

Quando um computador Linux é inicializado, ele começa a marcar o tempo. Nós nos referimos a isso como o relógio do sistema, uma vez que é atualizado pelo sistema operacional. Além disso, os computadores modernos também têm um relógio de hardware ou de tempo real. Esse relógio de hardware é um recurso da placa-mãe que marca o tempo, esteja o computador funcionando ou não. Durante a inicialização, a hora do sistema é definida a partir do relógio de hardware, mas na maioria das vezes esses dois relógios funcionam independentemente um do outro. Nesta lição, discutiremos os métodos de interação com o relógio do sistema e o do hardware.

Na maioria dos sistemas Linux modernos, a hora do sistema e a hora do hardware são sincronizadas com a hora da rede, implementada pelo Network Time Protocol (NTP). Na grande maioria dos casos, a única configuração que um usuário normal precisa fazer é definir seu fuso horário; o NTP cuida do resto. No entanto, falaremos de algumas maneiras de ajustar a hora manualmente. Pontos específicos da configuração da hora da rede serão abordados na próxima lição.

Hora local e hora universal

O relógio do sistema está configurado para o Tempo Universal Coordenado (UTC), que é a hora local de Greenwich, Reino Unido. Normalmente, um usuário deseja saber sua hora local. A hora local é calculada tomando-se a hora UTC e aplicando um deslocamento com base no fuso horário e no horário de verão. Desta forma, evitam-se muitos cálculos complexos.

O relógio do sistema pode ser definido para a hora UTC ou local, mas é recomendável que também seja definido para a hora UTC.

Date

date é um utilitário nativo que simplesmente imprime a hora local:

$ date
Sun Nov 17 12:55:06 EST 2019

Se modificarmos as opções do comando date, mudamos o formato da saída.

Por exemplo, date -u serve para exibir o horário UTC atual.

$ date -u
Sun Nov 17 18:02:51 UTC 2019

Outras opções comumente usadas retornam a hora local em um formato RFC aceito:

-I

Data/hora no formato ISO 8601. Anexar date (-Idate) limita a saída apenas à data. Outros formatos são hours, minutes, seconds e ns (para nanossegundos).

-R

Retorna data e hora no formato RFC 5322.

--rfc-3339

Retorna data e hora no formato RFC 3339.

O formato de date pode ser personalizado pelo usuário com as sequências especificadas na página de manual. Por exemplo, a hora atual pode ser formatada como tempo do Unix da seguinte maneira:

$ date +%s
1574014515

Na página de manual de date, podemos ver que %s se refere ao tempo do Unix.

O tempo do Unix é usado internamente na maioria dos sistemas baseados em Unix. Ele armazena a hora UTC como o número de segundos desde a Época, que foi definida como 1º de janeiro de 1970.

Note

O número de bits necessários para armazenar a hora Unix no momento atual é de 32 bits. No futuro, 32 bits se tornarão insuficientes para conter a hora atual no formato Unix. Isso causará problemas sérios para qualquer sistema Linux de 32 bits. Felizmente, isso não ocorrerá até 19 de janeiro de 2038.

Usando essas sequências, podemos formatar a data e a hora em quase todos os formatos exigidos por qualquer aplicativo. Claro, na maioria dos casos é preferível seguir um padrão aceito.

Além disso, date --date pode ser usado para formatar um horário que não seja a hora atual. Neste caso, um usuário pode especificar a data a ser aplicada ao sistema usando o tempo do Unix, por exemplo:

$ date --date='@1564013011'
Wed Jul 24 20:03:31 EDT 2019

A opção --debug é muito útil para garantir que uma data possa ser analisada com sucesso. Observe o que acontece ao passarmos uma data válida para o comando:

$ date --debug --date="Fri, 03 Jan 2020 14:00:17 -0500"
date: parsed day part: Fri (day ordinal=0 number=5)
date: parsed date part: (Y-M-D) 2020-01-03
date: parsed time part: 14:00:17 UTC-05
date: input timezone: parsed date/time string (-05)
date: using specified time as starting value: '14:00:17'
date: warning: day (Fri) ignored when explicit dates are given
date: starting date/time: '(Y-M-D) 2020-01-03 14:00:17 TZ=-05'
date: '(Y-M-D) 2020-01-03 14:00:17 TZ=-05' = 1578078017 epoch-seconds
date: timezone: system default
date: final: 1578078017.000000000 (epoch-seconds)
date: final: (Y-M-D) 2020-01-03 19:00:17 (UTC)
date: final: (Y-M-D) 2020-01-03 14:00:17 (UTC-05)

Essa é uma ferramenta útil para a resolução de problemas em um aplicativo que gera uma data.

Relógio do hardware

O comando hwclock exibe a hora mantida no relógio de tempo real. Este comando exige privilégios elevados; portanto, usamos sudo para chamar o comando neste caso:

$ sudo hwclock
2019-11-20 11:31:29.217627-05:00

A opção --verbose retorna mais resultados, que podem ser úteis para solucionar problemas:

$ sudo hwclock --verbose
hwclock from util-linux 2.34
System Time: 1578079387.976029
Trying to open: /dev/rtc0
Using the rtc interface to the clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2020/01/03 19:23:08
Hw clock time : 2020/01/03 19:23:08 = 1578079388 seconds since 1969
Time since last adjustment is 1578079388 seconds
Calculated Hardware Clock drift is 0.000000 seconds
2020-01-03 14:23:07.948436-05:00

Observe o Calculated Hardware Clock drift. Esta saída informa se a hora do sistema e a hora do hardware estão divergindo uma da outra.

timedatectl

timedatectl é um comando que pode ser usado para verificar o status geral de hora e data, incluindo se a hora da rede foi ou não sincronizada (na próxima lição, trataremos do Network Time Protocol).

Por padrão, timedatectl retorna informações semelhantes a date, mas com a adição da hora RTC (hardware), bem como o status do serviço NTP:

$ timedatectl
               Local time: Thu 2019-12-05 11:08:05 EST
           Universal time: Thu 2019-12-05 16:08:05 UTC
                 RTC time: Thu 2019-12-05 16:08:05
                Time zone: America/Toronto (EST, -0500)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Configurando a hora com timedatectl

Se o NTP não estiver disponível, recomenda-se usar timedatectl em vez de date ou hwclock para definir a hora:

# timedatectl set-time '2011-11-25 14:00:00'

O processo é semelhante ao de date. O usuário também pode definir a hora independentemente da data com o formato HH:MM:SS.

Definindo o fuso horário com timedatectl

timedatectl é a melhor maneira de configurar o fuso horário local nos sistemas Linux baseados em systemd quando não existe GUI. timedatectl lista os fusos horários possíveis e, a partir daí, o fuso horário pode ser definido usando um deles como argumento.

Primeiro, listamos os fusos horários possíveis:

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Algiers
Africa/Bissau
Africa/Cairo
...

A lista de fusos horários possíveis é longa, por isso o uso do comando grep é recomendado neste caso.

Em seguida, podemos definir o fuso horário usando um dos elementos da lista retornada:

$ timedatectl set-timezone Africa/Cairo
$ timedatectl
               Local time: Thu 2019-12-05 18:18:10 EET
           Universal time: Thu 2019-12-05 16:18:10 UTC
                 RTC time: Thu 2019-12-05 16:18:10
                Time zone: Africa/Cairo (EET, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Lembre-se de que o nome do fuso horário deve ser exato. Africa/Cairo, por exemplo, muda o fuso horário, mas cairo ou africa/cairo não.

Desativando o NTP com timedatectl

Em alguns casos, pode ser necessário desativar o NTP. Podemos fazer isso com systemctl, mas vamos demonstrar o procedimento com timedatectl:

# timedatectl set-ntp no
$ timedatectl
             Local time: Thu 2019-12-05 18:19:04 EET Universal time: Thu 2019-12-05 16:19:04 UTC
               RTC time: Thu 2019-12-05 16:19:04
              Time zone: Africa/Cairo (EET, +0200)
            NTP enabled: no
       NTP synchronized: no
        RTC in local TZ: no
             DST active: n/a

Definindo o fuso horário sem timedatectl

A definição do fuso horário é uma etapa padrão ao se instalar o Linux em uma nova máquina. Se houver um processo de instalação gráfico, isso provavelmente será feito sem nenhuma ação adicional do usuário.

O diretório /usr/share/zoneinfo contém informações sobre os diferentes fusos horários possíveis. No diretório zoneinfo, há subdiretórios com o nome dos continentes, bem como outros links simbólicos. Recomenda-se encontrar o zoneinfo da sua região começando por seu continente.

Os arquivos zoneinfo contêm as regras necessárias para calcular a diferença de horário local em relação a UTC e também são importantes se a sua região segue o horário de verão. O conteúdo de /etc/localtime será lido quando o Linux precisar determinar o fuso horário local. Para definir o fuso horário sem o uso de uma GUI, o usuário deve criar um link simbólico de /usr/share/zoneinfo para /etc/localtime informando sua localização. Por exemplo:

$ ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime

Depois de definir o fuso horário correto, recomenda-se executar:

# hwclock --systohc

Isso configurará o relógio do hardware a partir do relógio do sistema (ou seja, o relógio em tempo real será configurado para a mesma hora que date). Note que este comando é executado com privilégios de root; neste caso, você está logado como root.

/etc/timezone é semelhante a /etc/localtime. É uma representação de dados do fuso horário local e, como tal, pode ser lido usando cat:

$ cat /etc/timezone
America/Toronto

Observe que este arquivo não é usado por todas as distribuições Linux.

Configurando data e hora sem timedatectl

Note

A maioria dos sistemas Linux modernos usa o systemd para sua configuração e serviços; assim, não é recomendado usar date ou hwclock para definir a hora. O systemd emprega para isso o timedatectl. No entanto, é importante conhecer esses comandos legados no caso de você precisar administrar um sistema mais antigo.

Usando date

date tem uma opção para definir a hora do sistema. Use --set ou -s para definir a data e hora. Também há a opção --debug para verificar a análise correta do comando:

# date --set="11 Nov 2011 11:11:11"

Neste caso, é necessário ter privilégios de root para definir a data. Também podemos optar por alterar a hora ou data independentemente:

# date +%Y%m%d -s "20111125"

Aqui, devemos especificar as sequências para que nossa string seja analisada corretamente. Por exemplo, %Y refere-se ao ano e, portanto, os primeiros quatro dígitos 2011 serão interpretados como o ano de 2011. Da mesma forma, %T é a sequência de hora, como demonstrado aqui ao definirmos a hora:

# date +%T -s "13:11:00"

Depois de alterar a hora do sistema, é recomendável também definir o relógio do hardware para que os relógios do sistema e do hardware estejam sincronizados:

# hwclock --systohc

systohc significa “relógio do sistema para relógio do hardware”.

Usando hwclock

Em vez de definir o relógio do sistema e atualizar o relógio do hardware, podemos optar por reverter o processo. Começaremos ajustando o relógio do hardware:

# hwclock --set --date "4/12/2019 11:15:19"
# hwclock
Fri 12 Apr 2019 6:15:19 AM EST -0.562862 seconds

Note que, por padrão, hwclock espera a hora UTC, mas retorna a hora local.

Depois de configurar o relógio do hardware, precisamos atualizar o relógio do sistema a partir dele. hctosys pode ser interpretado como “relógio do hardware para relógio do sistema”.

# hwclock --hctosys

Exercícios Guiados

  1. Indique se os comandos a seguir estão exibindo ou modificando a hora do sistema ou a hora do hardware:

    Comando(s) Sistema Hardware Ambos

    date -u

    hwclock --set --date "12:00:00"

    timedatectl

    timedatectl | grep RTC

    hwclock --hctosys

    date +%T -s "08:00:00"

    timedatectl set-time 1980-01-10

  2. Observe a seguinte saída e, em seguida, corrija o formato do argumento para que o comando seja bem-sucedido:

    $ date --debug --date "20/20/12 0:10 -3"
    
    date: warning: value 20 has less than 4 digits. Assuming MM/DD/YY[YY]
    date: parsed date part: (Y-M-D) 0002-20-20
    date: parsed time part: 00:10:00 UTC-03
    date: input timezone: parsed date/time string (-03)
    date: using specified time as starting value: '00:10:00'
    date: error: invalid date/time value:
    date:     user provided time: '(Y-M-D) 0002-20-20 00:10:00 TZ=-03'
    date:        normalized time: '(Y-M-D) 0003-08-20 00:10:00 TZ=-03'
    date:                                  ---- --
    date:      possible reasons:
    date:        numeric values overflow;
    date:        incorrect timezone
    date: invalid date ‘20/20/2 0:10 -3’
  3. Use o comando date e as sequências para que o mês do sistema seja definido como fevereiro. Deixe o resto da data e hora inalterados.

  4. Pressupondo que o comando acima foi bem-sucedido, use hwclock para ajustar o relógio do hardware a partir do relógio do sistema.

  5. Existe um local chamado eucla. De que continente ele faz parte? Use o comando grep para descobrir.

  6. Defina seu fuso horário atual para eucla.

Exercícios Exploratórios

  1. Qual método de configuração de hora é o ideal? Em que caso o método preferido seria impraticável?

  2. Por que você acha que existem tantos métodos para realizar a mesma coisa, ou seja, definir a hora do sistema?

  3. Após 19 de janeiro de 2038, o Tempo do Linux exigirá um número de 64 bits para ser armazenado. No entanto, poderíamos simplesmente ter optado por definir uma “Nova Época”. Por exemplo, 1º de janeiro de 2038 à meia-noite pode ser definido como a Hora 0 de uma Nova Época. Por que você acha que esta solução não foi adotada?

Resumo

Nesta lição, você aprendeu:

  • Como exibir a hora em diferentes formatos a partir da linha de comando.

  • A diferença entre o relógio do sistema e o relógio do hardware no Linux.

  • Como ajustar manualmente o relógio do sistema.

  • Como ajustar manualmente o relógio do hardware.

  • Como alterar o fuso horário do sistema.

Comandos usados nesta lição:

date

Exibe ou altera o relógio do sistema. Outras opções:

-u

Exibe a hora UTC.

+%s

Usa uma sequência para exibir a hora da Época.

--date=

Determina uma hora específica a exibir, sem ser a hora atual.

--debug

Exibe mensagens de depuração ao analisar uma data inserida pelo usuário.

-s

Ajusta o relógio do sistema manualmente.

hwclock

Exibe ou altera o relógio do hardware.

--systohc

Usa o relógio do sistema para definir o relógio do hardware.

--hctosys

Usa o relógio do hardware para definir o relógio do sistema.

--set --date

Ajusta o relógio do hardware manualmente.

timedatectl

Exibe os relógios do sistema e do hardware, bem como a configuração NTP em sistemas Linux baseados em systemd.

set-time

Define a hora manualmente.

list-timezones

Lista os fusos horários possíveis.

set-timezone

Define o fuso horário manualmente.

set-ntp

Ativa/desativa o NTP.

Respostas aos Exercícios Guiados

  1. Indique se os comandos a seguir estão exibindo ou modificando a hora do sistema ou a hora do hardware:

    Comando(s) Sistema Hardware Ambos

    date -u

    X

    hwclock --set --date "12:00:00"

    X

    timedatectl

    X

    timedatectl | grep RTC

    X

    hwclock --hctosys

    X

    date +%T -s "08:00:00"

    X

    timedatectl set-time 1980-01-10

    X

  2. Observe a seguinte saída e, em seguida, corrija o formato do argumento para que o comando seja bem-sucedido:

    $ date --debug --date "20/20/12 0:10 -3"
    
    date: warning: value 20 has less than 4 digits. Assuming MM/DD/YY[YY]
    date: parsed date part: (Y-M-D) 0002-20-20
    date: parsed time part: 00:10:00 UTC-03
    date: input timezone: parsed date/time string (-03)
    date: using specified time as starting value: '00:10:00'
    date: error: invalid date/time value:
    date:     user provided time: '(Y-M-D) 0002-20-20 00:10:00 TZ=-03'
    date:        normalized time: '(Y-M-D) 0003-08-20 00:10:00 TZ=-03'
    date:                                  ---- --
    date:      possible reasons:
    date:        numeric values overflow;
    date:        incorrect timezone
    date: invalid date ‘20/20/2 0:10 -3’

    date --debug --set "12/20/20 0:10 -3"

  3. Use o comando date e as sequências para que o mês do sistema seja definido como fevereiro. Deixe o resto da data e hora inalterados.

    date +%m -s "2"

  4. Pressupondo que o comando acima foi bem-sucedido, use hwclock para ajustar o relógio do hardware a partir do relógio do sistema.

    hwclock -systohc

  5. Existe um local chamado eucla. De que continente ele faz parte? Use o comando grep para descobrir.

    timedatectl list-timezones \| grep -i eucla

    OU

    grep -ri eucla /usr/share/zoneinfo

  6. Defina seu fuso horário atual para eucla.

    timedatectl set-timezone 'Australia/Eucla'

    ou

    ln -s /usr/share/zoneinfo/Australia/Eucla /etc/localtime

Respostas aos Exercícios Exploratórios

  1. Qual método de configuração de hora é o ideal? Em que caso o método preferido seria impraticável?

    Na maioria das distribuições Linux, o NTP vem habilitado por padrão e define a hora do sistema sem interferência do usuário. No entanto, se um sistema Linux não estiver conectado à internet, o NTP ficará inacessível. Por exemplo, um sistema Linux embarcado rodando em um equipamento industrial pode não ter conectividade de rede.

  2. Por que você acha que existem tantos métodos para realizar a mesma coisa, ou seja, definir a hora do sistema?

    Como a configuração da hora tem sido um requisito de todos os sistemas *nix por décadas, existem muitos métodos legados para fazer essa configuração e que ainda são mantidos.

  3. Após 19 de janeiro de 2038, o Tempo do Linux exigirá um número de 64 bits para ser armazenado. No entanto, poderíamos simplesmente ter optado por definir uma “Nova Época”. Por exemplo, 1º de janeiro de 2038 à meia-noite pode ser definido como a Hora 0 de uma Nova Época. Por que você acha que esta solução não foi adotada?

    Até 2038, a grande maioria dos computadores já estará equipado de CPUs de 64 bits, e usar um número de 64 bits não degradará o desempenho de forma significativa. No entanto, seria impossível estimar os riscos de “reiniciar” o tempo da Época dessa maneira. Muitos softwares legados poderiam ser afetados. Os bancos e grandes empresas, por exemplo, costumam ter uma grande quantidade de programas antigos dos quais dependem para uso interno. Portanto, esse cenário, como tantos outros, exigia que se encontrasse um meio-termo. Qualquer sistema de 32 bits ainda em execução em 2038 sofreria com o estouro do Tempo da Época, mas o software legado seria impactado pela alteração do valor da Época.

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

108.1 Manutenção da data e hora do sistema (108.1 Lição 2)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.