web-dev-qa-db-fra.com

Linux: définir la date via la ligne de commande

Comment changer la date du système sous Linux?

Je veux changer:

  • Seulement l'année
  • Seul mois
  • Date unique
  • Toute combinaison de plus de trois
81
SHW

Utilisation date -s :

date -s '2014-12-25 12:34:56'

Exécutez-le en tant que root ou sous Sudo. Changer un seul de l'année/mois/jour est plus un défi et impliquera de répéter des bits de la date actuelle. Il existe également des outils de date GUI intégrés aux principaux environnements de bureau, généralement accessibles via l'horloge.

Pour ne changer qu'une partie du temps, vous pouvez utiliser la substitution de commandes dans la chaîne de date:

date -s "2014-12-25 $(date +%H:%M:%S)"

changera la date, mais gardez l'heure. Voir man date pour les détails de mise en forme pour construire d'autres combinaisons: les composants individuels sont %Y, %m, %d, %H, %M, et %S.

99
Michael Homer

Heure système

Vous pouvez utiliser date pour définir la date système. L'implémentation GNU de date (comme on le trouve sur la plupart des systèmes Linux non intégrés) accepte de nombreux formats différents pour régler l'heure, voici quelques exemples:

réglez uniquement l'année:

date -s 'next year'
date -s 'last year'

réglez uniquement le mois:

date -s 'last month'
date -s 'next month'

régler uniquement le jour:

date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'

ensemble:

date -s '2009-02-13 11:31:30' #that's a magical timestamp

Temps matériel

L'heure du système est maintenant définie, mais vous souhaiterez peut-être la synchroniser avec l'horloge matérielle:

Utilisation --show pour imprimer l'heure du matériel:

hwclock --show

Vous pouvez régler l'horloge matérielle sur l'heure actuelle du système:

hwclock --systohc

Ou l'heure système à l'horloge matérielle

hwclock --hctosys
45
chaos

Vous modifiez la date avec la commande date. Cependant, la commande attend une date complète comme argument:

# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014

Pour modifier une partie de la date, affichez la date actuelle avec la partie de date que vous souhaitez modifier sous forme de chaîne et toutes les autres sous forme de variables de formatage de date. Passez ensuite cela au date -s commande pour le définir:

# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014

change le mois au 12e mois - décembre.

Les formats de date sont:

  • %Y - An
  • %m - Mois
  • %d - Journée
  • %H - Heure
  • %M - Minute
3
garethTheRed

Pour ceux comme moi exécutant ESXI 5.1, voici ce que le système m'a répondu

~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'

J'ai dû utiliser une commande ESX spécifique à la place:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00
2
Balmipour

La commande pour changer la date du système est date.

Il existe deux façons de appeler la commande date (sous Linux):

   date [OPTION]... [+FORMAT]
   date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Facile

Le moyen le plus simple consiste à utiliser date -s car il permet l'utilisation de simple dates relatives

 $ date -s yesterday; date
 date: cannot set date: Operation not permitted
 Sat Jan  5 07:21:07 EST 2019
 Sun Jan  6 07:21:07 EST 2019

La date n'a pas changé car elle a été exécutée avec un utilisateur limité $. Si vous souhaitez réellement modifier la date, utilisez root (#) ou Sudo:

 $ Sudo date -s yesterday; date
 Sat Jan  5 07:21:07 EST 2019
 Sat Jan  5 07:21:07 EST 2019

Donc, changer n'importe quelle partie d'une date relative est aussi simple que de la nommer:

 $ date -s "5 years ago"
 Mon Jan  6 08:26:26 EST 2014

 $ date -s "+6 months"
 Sat Jul  6 08:28:39 EDT 2019

 $ date -s "+3 hours -13 minutes"
 Sun Jan  6 11:16:59 AST 2019

Les dates absolues sont un peu plus complexes car elles nécessitent plus de détails:

 $ date -s "2001-07-23 10:11:12"

Ou, vous pouvez utiliser la commande date deux fois:

 $ date -s "$(date +'%Y-%m-%d %H:%M:%S')"

remplacez l'un des % par une valeur valide et la date sera définie (uniquement en tant que root).

 $ date -s "$(date +'%Y-11-%d %H:%M:%S')"
 Wed Nov  6 08:37:15 EST 2019

direct

Le deuxième formulaire d'appel de date est utilisé pour directement changer la date système.

 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Donc :

 date 11230812              # MMDDhhmm

Fixera la date au 23 novembre à 08h et 12min.

BSD a une commande similaire mais un format différent ([[[[[[cc] aa]] mm] jj] HH] MM [.ss]).

Essayez date en tant qu'utilisateur limité pour voir ce qu'il ferait (sans rien changer):

 $ date 11230812
 date: cannot set date: Operation not permitted
 Sat Nov 23 08:12:00 EST 2019

Ou, si vous voulez réellement changer la date, en tant que root:

 # date 11230812
 # date
 Sat Nov 23 08:12:00 EST 2019

Notez que les services tels que NTP ou chrony seront affectés. Et, si redémarré, la date reviendra à la vraie.

Ajoutez un YY pour régler l'année:

 $ date 1123081222
 date: cannot set date: Operation not permitted
 Wed Nov 23 08:12:00 EST 2022

Ou un CCYY pour définir l'année et le siècle:

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982
1
Isaac