Linux Professional Institute
          Learning Logo.
Pasar al contenido principal
  • Inicio
    • Todos los recursos
    • LPI Learning Materials
    • Conviértete en colaborador
    • Publishing Partners
    • Conviértase en un Publishing Partner
    • Acerca de nosotros
    • FAQ
    • Colaboradores
    • Contáctenos
  • LPI.org
108.1 Lección 1

Tema 105: Shells y scripts
105.1 Customize and use the shell environment
  • 105.1 Lección 1
  • 105.1 Lección 2
  • 105.1 Lección 3
105.2 Personalización y escritura de scripts sencillos
  • 105.2 Lección 1
  • 105.2 Lección 2
Tema 106: Interfaces de usuario y escritorios
106.1 Instalar y configurar X11
  • 106.1 Lección 1
106.2 Escritorios gráficos
  • 106.2 Lección 1
106.3 Accesibilidad
  • 106.3 Lección 1
Tema 107: Tareas administrativas
107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
  • 107.1 Lección 1
  • 107.1 Lección 2
107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
  • 107.2 Lección 1
  • 107.2 Lección 2
107.3 Localización e internacionalización
  • 107.3 Lección 1
Tema 108: Servicios esenciales del sistema
108.1 Mantener la hora del sistema
  • 108.1 Lección 1
  • 108.1 Lección 2
108.2 Registros del sistema
  • 108.2 Lección 1
  • 108.2 Lección 2
108.3 Conceptos básicos del Agente de Transferencia de Correo
  • 108.3 Lección 1
108.4 Gestión de la impresión y de las impresoras
  • 108.4 Lección 1
Tema 109: Fundamentos de redes
109.1 Fundamentos de los protocolos de Internet
  • Muy pronto...
109.2 Configuración de red persistente
  • Muy pronto...
109.3 Resolución de problemas básicos de red
  • Muy pronto...
109.4 Configuración DNS en el lado del cliente
  • Muy pronto...
Tema 110: Seguridad
110.1 Tareas de administración de seguridad
  • Muy pronto...
110.2 Configuración de la seguridad del sistema
  • Muy pronto...
110.3 Protección de datos mediante cifrado
  • Muy pronto...
  1. Tema 108: Servicios esenciales del sistema
  2. 108.1 Mantener la hora del sistema
  3. 108.1 Lección 1

108.1 Lección 1

Certificación:

LPIC-1

Versión:

5.0

Tema:

108 Servicios Esenciales del Sistema

Objetivo:

108.1 Mantener el tiempo del sistema

Lección:

1 de 2

Introducción

Mantener la exactitud de la hora es absolutamente crucial para la informática moderna, sin embargo,su implementación es sorprendentemente compleja. La práctica de mantener la hora parece trivial para un usuario final, pero el sistema necesita ser capaz de manejar muchas idiosincrasias y casos extremos de forma inteligente. Hay que tener en cuenta que las zonas horarias no son estáticas, sino que pueden modificarse por una decisión administrativa o política. Un país puede optar por dejar de utilizar el horario de verano. Cualquier programa debe ser capaz de manejar esos cambios de forma lógica. Afortunadamente para los administradores de sistemas, las soluciones para el control de la hora en el sistema operativo Linux son maduras, robustas y generalmente funcionan sin mucha interferencia. Cuando un equipo informático Linux arranca, empieza a mantener el tiempo. Nos referimos a esto como un reloj del sistema, ya que es actualizado por el sistema operativo. Además, los ordenadores modernos también tendrán un reloj de hardware o de tiempo real. Este reloj de hardware es a menudo una característica de la placa madre y matiene la hora independientemente de si el ordenador está funcionando o no. Durante el arranque, la hora del sistema se ajusta desde el reloj de hardware, pero en la mayoría de los casos estos dos relojes funcionan independientemente el uno del otro. En la mayoría de los sistemas modernos de Linux, la hora del sistema y del hardware están sincronizados con el tiempo de la red, que se implementa mediante el Protocolo de Tiempo de Red (NTP). En la gran mayoría de los casos, la única configuración que un usuario normal tendrá que hacer es establecer su zona horaria y el NTP se encargará del resto. Sin embargo, cubriremos algunas formas de trabajar con la hora manualmente y los detalles de la configuración de la hora de red se tratarán en el próximo tema.

Tiempo Local vs Tiempo Universal

El reloj del sistema está ajustado al Tiempo Universal Coordinado (UTC), que es la hora local de Greenwich, Reino Unido. Normalmente un usuario quiere saber su hora local. La hora local se calcula tomando la hora UTC y aplicando un offset basado en la zona horaria y en un "Horario de verano" De esta manera, se puede evitar mucha complejidad. El reloj del sistema puede ajustarse a la hora UTC o a la hora local, pero se recomienda que se ajuste a la hora UTC.

date

El comando date es una utilidad básica que simplemente imprime la hora local:

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

Modificar las opciones del comando date cambiará el formato de la salida.

Por ejemplo, un usuario puede usar date -u para ver la hora UTC actual.

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

Algunas otras opciones de uso común devolverán la hora local a un formato que se adhiere a un modelo RFC aceptado:

-I

Fecha/hora en formato ISO 8601. Si se añade =date se limitará la salida a la fecha solamente. Otros formatos son hours para horas, minutes para minutos, seconds para segundos y ns para nanosegundos.

-R

Devuelve la fecha y la hora en formato RFC 5322.

--rfc-3339

Devuelve la fecha y la hora en formato RFC 3339.

El formato de date puede ser personalizado por el usuario con secuencias especificadas en la página de manual. Por ejemplo, la hora actual puede ser formateada como la hora de Unix de esta manera:

$ date +%s
1574014515

En la página del manual de date podemos ver que %s se refiere al tiempo de Unix.

El tiempo Unix se utiliza internamente en la mayoría de los sistemas tipo Unix. Almacena la hora UTC como el número de segundos desde Epoch, que ha sido definido como el 1 de enero de 1970.

Note

El número de bits necesarios para almacenar el tiempo de Unix en el presente es de 32 bits. Hay un problema futuro en el que 32 bits serán insuficientes para contener la hora actual en formato Unix. Esto causará serios problemas para cualquier sistema Linux de 32 bits. Afortunadamente, esto no ocurriría sino hasta el 19 de enero de 2038.

Utilizando estas secuencias, somos capaces de dar formato a la fecha y la hora en casi cualquier formato requerido por cualquier aplicación. Por supuesto, en la mayoría de los casos es preferible atenerse a una norma aceptada.

Además, date --date puede usarse para dar formato a una hora que no es la actual. En este escenario, un usuario puede especificar la fecha que se aplicará al sistema utilizando la hora de Unix, por ejemplo:

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

Usar la opción --debug puede ser muy útil para asegurar que una fecha pueda ser analizada con éxito. Observe lo que sucede cuando se pasa una fecha válida al 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)

Esta puede ser una herramienta útil cuando se trata de resolver problemas con una aplicación que genera una fecha.

Reloj de hardware

Un usuario puede ejecutar el comando hclock para ver como la hora se mantiene en el reloj en tiempo real. Este comando requerirá privilegios elevados, por lo que en este caso usaremos sudo para ejecutar al comando:

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

Usando la opción --verbose la salida del comando tendrá más detalles que pueden ser útiles para la resolución de 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

Fíjese en la línea que contiene Calculated Hardware Clock drift. Esta salida puede decirle si la hora del sistema y la del hardware se desvían una de otra.

timedatectl

timedatectl es un comando que puede utilizarse para comprobar el estado general de la hora y la fecha, incluyendo si la hora de red se ha sincronizado o no (dicho protocolo se tratara en el próximo tema).

Por defecto timedatectl devuelve información similar a date, pero con la adición de la hora RTC (hardware) así como el estado del servicio 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

Ajustar el tiempo utilizando timedatectl

Si no hay un servidor NTP disponible, se recomienda usar timedatectl en lugar de date o hwclock para fijar la hora:

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

El proceso es similar a date. El usuario también puede establecer la hora independientemente de la fecha usando el formato HH:MM:SS.

Ajustar la zona horaria utilizando timedatectl

timedatectl es la forma preferida de establecer la zona horaria local en sistemas Linux basados en systemd cuando no existe una interfaz gráfica. timedatectl listará posibles zonas horarias y luego la zona horaria puede ser establecida usando una de estas como argumento.

Primero haremos una lista de posibles zonas horarias:

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

La lista de posibles zonas horarias es larga, por lo que en este caso se recomienda el uso del comando grep.

A continuación podemos establecer la zona horaria usando uno de los elementos de la lista que fue devuelto:

$ 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

Tenga en cuenta que el nombre de la zona horaria debe ser exacto. Africa/Cairo por ejemplo cambiará la zona horaria, pero cairo o africa/cairo no lo hará.

Desactivar NTP usando timedatectl

En algunos casos podría ser necesario desactivar NTP. Podría hacerse usando systemctl pero lo mostraremos usando 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

Establecer la zona horaria sin timedatectl

La configuración de la información de la zona horaria es un paso estándar cuando se instala Linux en una nueva máquina. Si hay un proceso de instalación gráfico, lo más probable es que se maneje sin ninguna otra entrada del usuario.

El directorio /usr/share/zoneinfo contiene información de las diferentes zonas horarias posibles. En el directorio zoneinfo, hay subdirectorios que contienen los nombres de los continentes así como otros enlaces simbólicos. Se recomienda encontrar el zoneinfo de su región a partir de su continente.

Los archivos zoneinfo contienen las reglas necesarias para calcular el desfase de la hora local en relación con UTC, y también son importantes si su región hace uso del horario de verano. El contenido de /etc/localtime será leído cuando Linux necesite determinar la zona horaria local. Para establecer la zona horaria sin el uso de una interfaz gráfica, el usuario debe crear un enlace simbólico para su ubicación desde /usr/share/zoneinfo a /etc/localtime. Por ejemplo:

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

Después de establecer la zona horaria correcta, se recomienda ejecutar:

# hwclock --systohc

Esto ajustará el reloj de hardware desde el reloj de sistema (es decir, el reloj de tiempo real se ajustará a la misma hora que date). Tenga en cuenta que este comando se ejecuta con privilegios de root, en este caso se ejecutó desde una session de root.

/etc/timezone es similar a /etc/localtime. Es una representación de datos de la zona horaria local, y como tal puede ser leída usando cat:

$ cat /etc/timezone
America/Toronto

Tenga en cuenta que este archivo no es utilizado por todas las distribuciones de Linux.

Establecer la fecha y la hora sin timedatectl

Note

La mayoría de los sistemas modernos de Linux usan systemd para su configuración y servicios, y como tal no se recomienda usar date o hwclock para fijar la hora. systemd usa timedatectl para esto. No obstante, es importante conocer estos comandos heredados en caso de que tenga que administrar un sistema antiguo.

Utilizando date

date tiene una opción para ajustar la hora del sistema. Estas son: --set o -s para fijar la fecha y la hora. También puede usar --debug para verificar la sintaxis correcta del comando:

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

Tenga en cuenta que se requieren privilegios de root para fijar la fecha. También podemos cambiar la hora o la fecha de forma independiente:

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

Aquí debemos especificar las secuencias para que nuestra cadena sea interpretada correctamente. Por ejemplo, %Y se refiere al año, y así los primeros cuatro dígitos 2011 se interpretarán como el año 2011. De manera similar, %T es la secuencia para el tiempo, y se demuestra así:

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

Después de cambiar la hora del sistema, se recomienda también ajustar el reloj del hardware para que ambos relojes, el del sistema y el del hardware, estén sincronizados:

# hwclock --systohc

systohc significa “system clock to hardware clock”.

Utilizando hwclock

En lugar de ajustar el reloj del sistema y actualizar el reloj del hardware, puede optar por invertir el proceso. Empezaremos por ajustar el reloj del 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 defecto el hwclock espera la hora UTC, pero devuelve la hora local por defecto.

Después de ajustar el reloj del hardware, tendremos que actualizar el reloj del sistema a partir de este. hctosys significa “hardware clock to system clock”.

# hwclock --hctosys

Ejercicios guiados

  1. Indique si los siguientes comandos están mostrando o modificando la hora del sistema o la hora del 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 la siguiente salida, y luego corrija el formato del argumento para que el comando sea exitoso:

    $ 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 el comando date y las secuencias para que el mes del sistema sea febrero. Deje el resto de la fecha y la hora sin cambios.


  4. Asumiendo que el comando anterior tuvo éxito, use hwclock para ajustar el reloj del hardware desde el reloj del sistema.


  5. Hay un lugar llamado eucla. ¿De qué continente forma parte? Use el comando grep para averiguarlo.


  6. Establezca su zona horaria actual en la de eucla.


Ejercicios de exploración

  1. ¿Qué método de ajuste de tiempo es el óptimo? ¿En qué escenario podría ser imposible el método preferido?


  2. ¿Por qué cree que hay tantos métodos para lograr lo mismo, es decir, establecer la fecha y hora del sistema?


  3. Después del 19 de enero de 2038, Linux System Time requerirá un número de 64 bits para almacenar. Sin embargo, es posible que podamos elegir simplemente establecer un “nuevo epoch”. Por ejemplo, el 1 de enero de 2038 a medianoche podría establecerse una nueva época de 0. ¿Por qué cree que esto no se ha convertido en la solución preferida?


Resumen

En esta lección aprendió:

  • A mostrar la hora en diferentes formatos desde la línea de comandos.

  • La diferencia entre el reloj del sistema y el reloj del hardware en Linux.

  • Ajustar manualmente el reloj del sistema.

  • Establecer manualmente el reloj del hardware.

  • Cambiar la zona horaria del sistema.

Comandos usados en esta lección:

date

Visualizar o cambiar el reloj del sistema. Otras opciones:

-u

Muestra la hora UTC.

+%s

Usa una secuencia para mostrar el tiempo de la época.

--date=

Establece una hora específica para mostrar, en lugar de la hora actual.

--debug

Muestra mensajes de depuración al interpretar una fecha introducida por el usuario.

-s

Ajusta el reloj del sistema manualmente.

hwclock

Muestra o cambia el reloj del hardware.

--systohc

Usa el reloj del sistema para ajustar el reloj del hardware.

--hctosys

Usa el reloj de hardware para ajustar el reloj del sistema.

--set --date

Ajusta el reloj de hardware manualmente.

timedatectl

Muestra los relojes del sistema y del hardware, así como la configuración NTP en los sistemas Linux basados en Systemd.

set-time

Ajusta la hora manualmente.

list-timezones

Lista las posibles zonas horarias.

set-timezone

Configura la zona horaria manualmente.

set-ntp

Activa/desactiva NTP.

Respuesta a los ejercicios guiados

  1. Indique si los siguientes comandos están mostrando o modificando la hora del sistema o la hora del 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 la siguiente salida, y luego corrija el formato del argumento para que el comando sea exitoso:

    $ 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 el comando date y las secuencias para que el mes del sistema sea febrero. Deje el resto de la fecha y la hora sin cambios.

    date +%m -s "2"

  4. Asumiendo que el comando anterior tuvo éxito, use hwclock para ajustar el reloj del hardware desde el reloj del sistema.

    hwclock -systohc

  5. Hay un lugar llamado eucla. ¿De qué continente forma parte? Usa el comando grep para averiguarlo.

    timedatectl list-timezones \| grep -i eucla

    o

    grep -ri eucla /usr/share/zoneinfo

  6. Establezca su zona horaria actual en la de eucla.

    timedatectl set-timezone 'Australia/Eucla'

    o

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

Respuestas a los ejercicios de exploración

  1. ¿Qué método de ajuste de tiempo es el óptimo? ¿En qué escenario podría ser imposible el método preferido?

    En la mayoría de las distribuciones de Linux, el NTP está habilitado por defecto y debería dejarse que establezca la hora del sistema sin interferencias. Sin embargo, si hay un sistema Linux que no está conectado a Internet, NTP será inaccesible. Por ejemplo, un sistema Linux integrado que funcione en un equipo industrial podría no tener conectividad a la red.

  2. ¿Por qué crees que hay tantos métodos para lograr lo mismo, es decir, establecer la fecha y hora del sistema?

    Dado que el establecimiento del tiempo ha sido un requisito de todos los sistemas *nix durante décadas, hay muchos métodos heredados para establecer el tiempo que aún se mantienen.

  3. Después del 19 de enero de 2038, Linux System Time requerirá un número de 64 bits para almacenar. Sin embargo, es posible que podamos elegir simplemente establecer un “nuevo epoch”. Por ejemplo, el 1 de enero de 2038 a medianoche podría establecerse un nuevo epoch de 0. ¿Por qué crees que esto no se ha convertido en la solución preferida?

    Para el 2038 la gran mayoría de las computadoras ya estarán funcionando con CPU de 64 bits, y el uso de un número de 64 bits no degradará el rendimiento de manera significativa. Sin embargo, sería imposible estimar los riesgos de “resetear” epoch de tal manera. Hay mucho software antiguo que podría ser afectado. Los bancos y las grandes empresas, por ejemplo, a menudo tienen una gran cantidad de programas antiguos de los que dependen para su uso interno. Así que este escenario, como muchos otros, es un estudio de las compensaciones. Cualquier sistema de 32 bits que siga funcionando en 2038 se vería afectado por un desbordamiento de "Epoch Time", pero el software heredado se vería afectado por el cambio de valor de Epoch.

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

Siguiente lección

108.1 Mantener la hora del sistema (108.1 Lección 2)

Leer la próxima lección

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

LPI es una organización sin fines de lucro.

Linux Professional Institute (LPI) es la organización global de certificación y apoyo académico para profesionales de código abierto. Con más de 200,000 titulares de certificación, es el primer y más grande organismo de certificación no comercial del mundo para Linux y Open Source. LPI cuenta con profesionales certificados en más de 180 países, realiza exámenes en varios idiomas y tiene cientos de socios de capacitación.

Nuestro propósito es hacer que las oportunidades económicas y creativas estén disponibles para todos, haciendo que el conocimiento de código abierto y la certificación sea universalmente accesible.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contáctenos
  • Política de privacidad y cookies

¿Detecta un error o desea ayudar a mejorar esta página? Por favor háznoslo saber.

© Copyright 1999-2020 The Linux Professional Institute Inc. Todos los derechos reservados.