Aprende GNU/Linux 2

El tiempo es oro: Administrando el reloj en Linux

Un elemento imprescindible de cualquier sistema es su reloj, tanto para consulta personal como para tareas del sistema. Normalmente el reloj se configura en la instalación del SO y no suele ser necesario tocarlo más, aun así, ya sea por tener que administrar algún sistema ajeno o simplemente porque el reloj de nuestro ordenador personal se ha desconfigurado, es recomendable conocer cómo funcionan los relojes en Linux y las diferentes herramientas que actúan sobre este.

Dos relojes

Cualquier computadora tiene dos relojes,  el reloj del sistema y el reloj físico o de hardware:

 Reloj del sistema: Cuando se configura el sistema, el kernel de Linux genera un reloj a partir del reloj físico, que una vez configurado, funciona de forma independiente. Linux para todas sus tareas utiliza este reloj,  simplemente porque acceder al reloj de hardware es demasiado lento. Este reloj funciona en formato UTC.

 Reloj de hardware o físico: Estos relojes típicamente de cuarzo, van conectados a una batería en la placa base, esta batería asegura que el reloj continúe funcionando aún cuando el ordenador se encuentra apagado y sin suministro eléctrico. En los portátiles suele ser difícil acceder a esta pila, pero en los ordenadores de sobremesa se identifica fácilmente: una pila redonda, que si se extrae y se vuelve a conectar reinicia todos los parámetros de la BIOS (reloj incluido) al valor por defecto. El valor de este reloj puede ser modificado, o bien desde la BIOS, o desde el propio sistema operativo. Este reloj puede funcionar en hora universal o local.

El tiempo universal coordinado o UTC es el principal estándar de tiempo por el cual el mundo regula los relojes y el tiempo. Las zonas horarias de todo el mundo se expresan como desviaciones positivas o negativas de UTC, tomando como referencia el meridiano cero o meridiano de Greenwich. < Wikipedia>
UTC

Conociendo la hora

Antes de empezar con tareas administrativas, vamos con lo más básico: Visualizar la hora.

Para visualizar el reloj del sistema se utiliza el comando date. Si utilizamos el comando date sin ningún parámetro el resultado es el siguiente:

$ date
jue feb 12 12:55:19 CET 2015

El resultado esta configurado en función del uso horario. Si se quiere imprimir la hora UTC basta con añadir el parámetro utc de la siguiente forma: date –utc.

$ date --utc
jue feb 12 12:55:24 UTC 2015

Además, es posible modificar el formato de la fecha según nuestras necesidades, para este cometido tenemos las siguientes variables:

Variables para configuración de date
Variable Resultado
%H Hora en formato: 00…23
%M Minutos 00..59.
%S Segundos 00..60.
%T Hora actual sobre 24 horas.
%r Hora actual sobre 12 horas.
%Z Huso horario.
%a Día abreviado: lun, mar,…,dom.
%A Día completo.
%b Mes abreviado: En, feb,…,dic.
%B Mes completo.
%d Día del mes.
%j Día del año.
%m Número del mes 00..12.
%U Numero de la semana 00..53.
%y Dos ultimas cifras del año.
%Y Año completo.

De forma que si por ejemplo queremos visualizar una fecha completa seria:

$ date +"Son las %H horas, %M minutos y %S segundos del dia %d de %B del %Y."
Son las 20 horas, 35 minutos y 02 segundos del día 14 de febrero del 2015.

También es posible imprimir horas basadas en cálculos o en fechas especificas. Para conseguir esto se utiliza el parámetro –date. En este comando se aceptan las siguientes palabras clave: días de la semana (palabra completa o abreviación de tres letras), meses, next, ago, last, today, tomorrow, yesterday, day(s), week(s), month(es), year(s), hour(s), minute(s) y second(s) y los simbolos + y –. Aquí unos ejemplos:

$ date
mié feb 18 18:10:41 CET 2015

$ date --date "yesterday"
mar feb 17 18:11:03 CET 2015

$ date --date "yesterday + 1 day"
mié feb 18 18:11:26 CET 2015

$ date --date "5/05/2005 05:55:55 + 1 year"
vie may  5 06:55:55 CEST 2006

$ date --date "5/05/2005 05:55:55  1 year ago"
mié may  5 05:55:55 CEST 2004
Para consultar el reloj de hardware se usa el comando hwclock. Para poder utilizar este comando es necesario hacerlo con privilegios y en este caso, no es posible modificar el formato ni realizar cálculos:

$ sudo hwclock
mié 18 feb 2015 18:22:21 CET  -0.313307 segundos

Al final del resultado se puede observar el error entre el reloj de hardware y el reloj del sistema.

Modificando la hora

Para modificar la hora del sistema se utiliza el comando date seguido de el parámetro -s y la nueva hora entre doble comillas en el siguiente formato:

“MM/DD/AAAA HH:MM”

Un ejemplo de ajuste seria el siguiente:

$ date
jue feb 19 13:35:33 CET 2015

Retrasamos la hora una hora:

$ sudo date -s "02/19/2015 12:36"
jue feb 19 12:36:00 CET 2015

Resultado:

$ date
jue feb 19 12:36:26 CET 2015
Para modificar el reloj físico se utiliza el comando hwclock seguido de –set y –date. Veamos un ejemplo:

$ sudo hwclock
jue 19 feb 2015 13:45:11 CET  -0.079000 segundos
$ hwclock --set --date "02/19/2015 12:45"

Resultado:

$ sudo hwclock
jue 19 feb 2015 12:45:11 CET  -0.079000 segundos

Como último apunte sobre ajuste de fecha y hora, es posible sincronizar la hora del hardware con la del sistema y viceversa con estas dos instrucciones:

Para sincronizar la hora del reloj físico desde la hora del sistema:

$ sudo hwclock --systohc

Para sincronizar la hora del sistema desde el reloj físico:

$ sudo hwclock --hctosys

Network time protocol o NTP

NTP es un protocolo que permite la sincronización de relojes mediante internet. En ciertos ámbitos es primordial que el reloj esté perfectamente ajustado y que no tenga ningún error por muy minúsculo que sea, y teniendo en cuenta que los relojes pueden sufrir pequeñas alteraciones a lo largo del tiempo, los servidores NTP ofrecen una hora perfectamente configurada para evitar esta problemática.

Los servidores NTP proporcionan la hora en formato UTC y la codifican en 64 bits, siendo de esta manera, muy precisa. El cliente una vez obtiene la hora en formato UTC, la tiene que adaptar a su uso horario. En esta web hay una lista de servidores NTP.

Cliente NTP

Para conectarse a los servidores NTP es necesario un cliente. Para instalar el cliente NTP se hace desde los diferentes repositorios de las distribuciones, aquí algunos ejemplos de las más usadas:

Debian y derivadas:

aptitude install ntp ntpdate

Fedora, Redhat, etc:

yum -y install ntp ntpdate

Archlinux y derivadas:

pacman -S ntp ntpdate

Una vez tenemos instalado el cliente, el fichero de configuración se encuentra en : /etc/ntp.conf . Este fichero trae bastantes lineas de configuración, pero en circunstancias normales sólo sera necesario añadir el servidor al que queramos conectarnos (lista servidores) :

server dirección_servidor

Por ejemplo:

server es.pool.ntp.org

De esta forma, añadimos el servidor al que nuestro cliente NTP se va a conectar. Una vez añadido el servidor reiniciamos el servicio mediante el comando ( con privilegios ) :

service ntpd restart

Además, si se tiene activado un cortafuegos es necesario abrir el puerto 123 por UDP que es el que utiliza el protocolo. Para más información sobre el protocolo NTP ésta es la pagina oficial donde podéis encontrar mucha información en ingles.

Ntpdate

Para sincronizar manualmente con un servidor tenemos el comando ntpdate. Para realizar la sincronización con un servidor se utiliza el parámetro -d seguido del servidor en cuestión (con privilegios):

sudo ntpdate -d es.pool.ntp.org

y se vera como se realizan los envíos de paquetes y la sincronización.

Esto es todo ¡¡Un saludo, el tiempo es oro!!

Sobre el autor / 

AsierPH

Entusiasta de las tecnologías libres y fundador de OvToaster.com | “Las obras de conocimiento deben ser libres, no hay excusas para que no sea así“

Articulos relacionados

2 comentarios

  1. Roi Gallego 22 Febrero, 2015 at 1:07 pm -  Responder

    Creo que tienes un error en la parte del reloj físico:

    Para sincronizar la hora del reloj físico desde la hora del sistema:
    $ sudo hwclock –systoch

    Para sincronizar la hora del sistema desde el reloj físico:
    $ sudo hwclock –hctohc

    serían respectivamente
    $ sudo hwclock –systohc
    $ sudo hwclock –hctosys

    • AsierPH 22 Febrero, 2015 at 3:08 pm -  Responder

      Buenas Roi, gracias por la corrección, tienes mucha razón 🙂
      ¡Un saludo!

Deja tu comentario

Tu correo no sera publicado. Los campos requeridos están marcados *