Come modificare la data di sistema in Linux?
Voglio cambiare:
- Solo anno
- Solo mese
- Solo data
- Qualsiasi combinazione di cui sopra tre
sudo ntpd -gq
in modo che l'aggiornamento del sistema venga eseguito automaticamente utilizzando il servizio ntp.
Come modificare la data di sistema in Linux?
Voglio cambiare:
sudo ntpd -gq
in modo che l'aggiornamento del sistema venga eseguito automaticamente utilizzando il servizio ntp.
Risposte:
Utilizzare date -s
:
date -s '2014-12-25 12:34:56'
Eseguilo come root o sotto sudo
. Cambiare solo uno dell'anno / mese / giorno è più una sfida e comporterà la ripetizione di bit della data corrente. Esistono anche strumenti per la data della GUI integrati nei principali ambienti desktop, solitamente accessibili tutto il giorno.
Per modificare solo una parte del tempo, è possibile utilizzare la sostituzione dei comandi nella stringa della data:
date -s "2014-12-25 $(date +%H:%M:%S)"
cambierà la data, ma manterrà l'ora. Vedi man date
per formattare i dettagli per realizzare altre combinazioni: i singoli componenti sono %Y
, %m
, %d
, %H
, %M
, e %S
.
date -s "2014-12-25 $(date +%H:%M:%S)"
Tuttavia, è possibile utilizzare per modificare la data e riutilizzare l'ora corrente.
date: cannot set date: Invalid argument
date -s 2018-01-01
. Qualcuno ha condiviso questo in una risposta anche: superuser.com/questions/870068/…
Ora di sistema
È possibile utilizzare date
per impostare la data di sistema. L'implementazione GNU di date
(come si trova sulla maggior parte dei sistemi basati su Linux non incorporati) accetta molti formati diversi per impostare l'ora, qui alcuni esempi:
impostare solo l'anno:
date -s 'next year'
date -s 'last year'
impostare solo il mese:
date -s 'last month'
date -s 'next month'
impostare solo il giorno:
date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
insieme tutti:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Tempo hardware
Ora l'ora del sistema è impostata, ma potresti voler sincronizzarla con l'orologio hardware:
Utilizzare --show
per stampare l'ora dell'hardware:
hwclock --show
È possibile impostare l'orologio hardware sull'ora di sistema corrente:
hwclock --systohc
O l'ora di sistema per l'orologio hardware
hwclock --hctosys
Si modifica la data con il date
comando. Tuttavia, il comando prevede una data completa come argomento:
# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
Per modificare parte della data, emettere la data corrente con la parte della data che si desidera modificare come stringa e tutte le altre come variabili di formattazione della data. Quindi passalo al date -s
comando per impostarlo:
# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
cambia il mese al 12 ° mese - dicembre.
I formati della data sono:
%Y
- Anno%m
- Mese%d
- Giorno%H
- Ora%M
- MinutoPer quelli come me con ESXI 5.1, ecco cosa mi ha risposto il sistema
~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'
Invece ho dovuto usare un comando ESX specifico:
esxcli system time set -y 2016 -M 03 -d 23 -H 10 -m 05 -s 00
Il comando per modificare la data di sistema è date
.
Esistono due modi per chiamare il comando date (in Linux):
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Il modo più semplice è utilizzare date -s
in quanto consente l'uso di semplici date relative
$ 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 data non è cambiata perché è stata eseguita con un utente limitato $
. Se vuoi davvero cambiare la data, usa root ( #
) o sudo:
$ sudo date -s yesterday; date
Sat Jan 5 07:21:07 EST 2019
Sat Jan 5 07:21:07 EST 2019
Quindi, cambiare qualsiasi parte di una data relativa è facile come nominarla:
$ 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
Le date assolute sono un po 'più complesse in quanto hanno bisogno di maggiori dettagli:
$ date -s "2001-07-23 10:11:12"
In alternativa, è possibile utilizzare il comando date due volte:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
sostituire uno qualsiasi di %
con un valore valido e la data verrà impostata (solo come root).
$ date -s "$(date +'%Y-11-%d %H:%M:%S')"
Wed Nov 6 08:37:15 EST 2019
Il secondo modulo di chiamata per data viene utilizzato per modificare direttamente la data di sistema.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Così :
date 11230812 # MMDDhhmm
Imposta la data il 23 novembre alle 08h e 12min.
BSD ha un comando simile ma un formato diverso ([[[[[[cc] yy] mm] dd] HH] MM [.ss]).
Prova date
come utente limitato per vedere cosa farebbe (senza cambiare nulla):
$ date 11230812
date: cannot set date: Operation not permitted
Sat Nov 23 08:12:00 EST 2019
Oppure, se vuoi davvero cambiare la data, come root:
# date 11230812
# date
Sat Nov 23 08:12:00 EST 2019
Notare che saranno interessati servizi come NTP o chrony. E, se riavviato, reimposterà la data su quella reale.
Aggiungi un AA per impostare l'anno:
$ date 1123081222
date: cannot set date: Operation not permitted
Wed Nov 23 08:12:00 EST 2022
O un CCYY per impostare anno e secolo:
$ date 112308121982
date: cannot set date: Operation not permitted
Tue Nov 23 08:12:00 EST 1982
Ho usato il comando data e il formato ora elencati di seguito per impostare correttamente la data dal comando shell terminale eseguito su Android Things che utilizza Linux Kernal.
data 092615002017.00
MMDDHHMMYYYY.SS
MM - Mese - 09
GG - Giorno - 26
HH - Ora - 15
MM - Min - 00
AAAA - Anno - 2017
.SS - secondo - 00
date
, potresti aggiungere ulteriori informazioni su quale sistema è rilevante e su come è rilevante per questa particolare domanda.
date --set='-2 years'
possibile impostare l'orologio indietro di due anni, lasciando identici tutti gli altri elementi. Puoi cambiare mese e giorno del mese allo stesso modo. Non ho verificato cosa succede se quel calcolo si traduce in un datetime che in realtà non esiste, ad esempio durante una commutazione dell'ora legale, ma il comportamento dovrebbe essere identico al solito comportamento "imposta sia la data che l'ora su valori concreti".