Date et heure sous Linux

Il y a deux horloges principales dans un système Linux :

A chaque démarrage de l'ordinateur, l'horloge système se base sur l'horloge machine. On comprend aisément qu'il peut y avoir des problèmes si la pile de la carte mère est défectueuse (voir astuce en bas de page).

On affichera respectivement la date et l'heure système et la date et l'heure machine grâce aux commandes date et hwclock.

L'horloge système

Afficher la date et l'heure système

$ date
jeudi 8 janvier 2015, 11:03:33 (UTC+0100)

ou selon votre configuration

$ date
Thu Jan  8 11:03:33 CET 2015

Par défaut c'est l'heure locale qui est affichée, on peut toute fois demander à afficher l'heure universel

$ date -u
jeudi 8 janvier 2015, 10:03:33 (UTC+0000)

Modifier la date et/ou l'heure système

On peut modifier la date et l'heure grâce à l'option -s ou --set. La syntaxe est la suivante:

# date -s 'MM/JJ/AAAA HH:MM:SS'

Il n'est pas nécessaire de renseigner toutes les valeurs, ainsi

# date -s HH:MM:SS

ne modifiera que l'heure sans changer la date. Par contre attention, l'inverse n'est pas vrai, ainsi si vous changez seulement la date,

# date -s AAAA-MM-JJ

ou

# date -s AAAA/MM/JJ

modifiera la date et mettra l'heure à 00:00:00.

L'horloge machine

Afficher la date et l'heure machine

# hwclock
jeu. 08 janv. 2015 11:09:33 CET  -0.359671 seconds

ou selon votre configuration

# hwclock
Thu 08 Jan 2015 11:09:33 AM CET  -0.633075 seconds

Pour être tout a fait exact, la commande hwclock appelée seule correspond réellement à la commande hwclock -r ou hwclock --show

/!\ Cette commande affiche l'heure locale même si votre configuration est en temps universel./!\ Il est possible de forcer l'affichage en local plutôt qu'en universel et vice versa

# hwclock --show --localtime
Thu 08 Jan 2015 01:10:50 PM CET  -0.587661 seconds
# hwclock --show --utc
Thu 08 Jan 2015 02:11:00 PM CET  -0.916051 seconds

Régler la date et l'heure machine

# hwclock --set --date="MM/JJ/AAAA HH:MM:SS"

Ajuster l'heure système par rapport à l'heure machine

# hwclock --hctosys

Ajuster l'heure machine par rapport à l'heure système

# hwclock --systohc

Configurer le fuseau horaire

Il est possible de modifier le fuseau horaire de votre machine grâce à la commande suivante:

# dpkg-reconfigure tzdata

ecran d'accueil de dpkg-reconfigure tzdata

Une fois cet écran fermé la console affichera un résumé de votre configuration.

Current default time zone: 'Europe/Paris'
Local time is now:      Thu Jan  8 14:15:24 CET 2015.
Universal Time is now:  Thu Jan  8 13:15:24 UTC 2015.

Astuces

Synchroniser sa machine sur un serveur de temps

Sur de vielles machines il n'est pas rare que la pile de la carte mère soit partiellement ou totalement vide ce qui aura pour effet qu'à chaque démarrage la date et l'heure de votre système soit complètement erronées. Pour contourner le problème sans avoir à changer la pile il est possible de synchroniser l'horloge système à un serveur de temps.

Pour cela commençons par installer le programme indispensable: ntpdate

# apt-get install ntpdate

Dans notre exemple il s'agit d'une machine seule ou faisant partie d'un petit réseau domestique, pour des architectures réseau plus complexes il convient de s'intéresser au protocole ntp (Network Time Protocol) permettant de distribuer l'heure sur un réseau informatique.

Ceci fait apportons quelque modifications au fichier de configuration

# nano /etc/default/ntpdate

Par défaut ntpdate va chercher à récupérer la liste des serveurs sur les quels se synchroniser dans le fichier /etc/ntp.conf, mais comme ici nous ne souhaitons pas utiliser ntp, ce fichier n'existe donc pas. Il faudra donc modifier le paramètre NTPDATE_USE_NTP_CONF de "yes" à "no" afin que ntpdate utilise la liste de serveurs de son propre fichier de configuration (celui-la même que nous modifions en ce moment).
Enfin, si c'est nécessaire, modifiez le paramètre NTPSERVERS afin d'utiliser des serveurs de temps (ntp) différents que ceux proposés par défaut. J'ai personnellement utilisé www.pool.ntp.org/zone/fr.

Au final voici à quoi ressemble mon fichier de configuration.

# The settings in this file are used by the program ntpdate-debian, but not
# by the upstream program ntpdate.

# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp,
# so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=no

# List of NTP servers to use  (Separate multiple servers with spaces.)
# Not used if NTPDATE_USE_NTP_CONF is yes.
NTPSERVERS="0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org"

# Additional options to pass to ntpdate
NTPOPTIONS=""

Pour terminer il ne reste plus qu'à forcer la synchronisation manuellement pour s'assurer que tout fonctionne bien ...

 # ntpdate 0.fr.pool.ntp.org

... ou à redémarrer la machine pour que ntpdate se synchronise dès qu'une connexion réseau (internet dans notre cas) soit disponible.

^