Linux: Datum über die Befehlszeile einstellen

76

Wie ändere ich das Systemdatum unter Linux?

Ich will es verändern:

  • Nur Jahr
  • Nur Monat
  • Nur Datum
  • Beliebige Kombination der obigen drei
SHW
quelle
2
Sie können z. B. date --set='-2 years'die Uhr um zwei Jahre zurückstellen, wobei alle anderen Elemente identisch bleiben. Sie können Monat und Tag des Monats auf die gleiche Weise ändern. Ich habe nicht überprüft, was passiert, wenn diese Berechnung zu einer Datums- und Uhrzeitangabe führt, die nicht tatsächlich vorhanden ist, z. B. während einer Sommerzeitumstellung. Das Verhalten sollte jedoch mit dem üblichen Verhalten "Datum und Uhrzeit auf konkrete Werte einstellen" identisch sein.
Christian Severin
Angenommen, Sie sudo ntpd -gqmöchten das Datum auf die aktuelle Uhrzeit einstellen, können Sie das System mithilfe des Dienstes ntp automatisch aktualisieren lassen.
Steven Soroka

Antworten:

95

Verwendung date -s:

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

Führen Sie das als root oder unter sudo. Das Ändern von nur einem Jahr / Monat / Tag ist eine größere Herausforderung und erfordert das Wiederholen von Bits des aktuellen Datums. Es gibt auch GUI-Datumstools, die in die wichtigsten Desktop-Umgebungen integriert sind und auf die normalerweise rund um die Uhr zugegriffen wird.

Um nur einen Teil der Zeit zu ändern, können Sie die Befehlsersetzung in der Datumszeichenfolge verwenden:

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

ändert das Datum, behält aber die Uhrzeit bei. Siehe man dateDetails Formatierung andere Kombinationen zu konstruieren: die einzelne Komponenten %Y, %m, %d, %H, %M, und %S.

Michael Homer
quelle
Ich möchte die Zeit nicht ändern
SHW
5
Dafür gibt es keine Option. Sie können date -s "2014-12-25 $(date +%H:%M:%S)"jedoch das Datum ändern und die aktuelle Uhrzeit wiederverwenden.
Michael Homer
kamen hierher und Stunden und Minuten stimmten mit der aktuellen Zeit überein. - schön
Alex2php
2
date: cannot set date: Invalid argument
Chris Stryczynski
@MichaelHomer @SHW Es ist möglich, nur das Datum mit einem Befehl wie zu ändern date -s 2018-01-01. Jemand geteilt dies in einer Antwort auch: superuser.com/questions/870068/...
baptx
42

Systemzeit

Mit können Sie datedas Systemdatum einstellen. Die GNU-Implementierung von date(wie sie auf den meisten nicht eingebetteten Linux-basierten Systemen zu finden ist) akzeptiert viele verschiedene Formate, um die Zeit einzustellen. Hier einige Beispiele:

setze nur das Jahr:

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

setze nur den Monat:

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

setze nur den Tag:

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

Set alle zusammen:

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

Hardware-Zeit

Jetzt ist die Systemzeit eingestellt, aber Sie können sie mit der Hardware-Uhr synchronisieren:

Verwenden Sie --show, um die Hardware-Zeit zu drucken:

hwclock --show

Sie können die Hardware-Uhr auf die aktuelle Systemzeit einstellen:

hwclock --systohc

Oder die Systemzeit zur Hardwareuhr

hwclock --hctosys
Chaos
quelle
2
Bonuspunkte zur Veranschaulichung der nicht offensichtlichen Art und Weise, wie Sie das Datum anhand von Beispielen festlegen und auf den Unterschied zwischen der "Systemzeit" und der "Hardware-Uhr" hinweisen können. Sehr hilfreiche Antwort!
Mark Edington
3

Sie ändern das Datum mit dem dateBefehl. Der Befehl erwartet jedoch ein vollständiges Datum als Argument:

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

Um einen Teil des Datums zu ändern, geben Sie das aktuelle Datum mit dem Datumsteil, den Sie ändern möchten, als Zeichenfolge und alle anderen als Datumsformatierungsvariablen aus. Übergeben Sie das dann an den date -sBefehl, um es festzulegen:

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

ändert den Monat auf den 12. Monat - Dezember.

Die Datumsformate sind:

  • %Y - Jahr
  • %m - Monat
  • %d - Tag
  • %H - Stunde
  • %M - Minute
garethTheRed
quelle
Ich versuche zu ändern, aber es ändert sich nicht: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Mi Sep 30 10:05:59 +0530 2015 $ date Do Mai 23 15:10:37 +0530 2019
Vinod
2

Für diejenigen wie mich, die ESXI 5.1 ausführen, hat mir das System die folgenden Antworten gegeben

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

Ich musste stattdessen einen bestimmten ESX-Befehl verwenden:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00
Balmipour
quelle
3
Vielen Dank für die -1, aber würde es Ihnen etwas ausmachen zu erklären, warum ? Wenn Sie eine bessere / vollständigere / genauere Antwort haben, können Sie dies gerne kommentieren.
Balmipour
1

Der Befehl zum Ändern des Systemdatums lautet date.

Es gibt zwei Möglichkeiten, den Date-Befehl aufzurufen (unter Linux):

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

Einfach

Die einfachste Methode ist die Verwendung, date -sda einfache relative Daten verwendet werden können

 $ 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

Das Datum hat sich nicht geändert, da es mit einem eingeschränkten Benutzer ausgeführt wurde $. Wenn Sie das Datum tatsächlich ändern möchten, verwenden Sie root ( #) oder sudo:

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

Das Ändern eines Teils eines relativen Datums ist also so einfach wie das Benennen:

 $ 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

Absolute Daten sind etwas komplexer, da sie detaillierter sein müssen:

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

Oder Sie können den Datumsbefehl zweimal verwenden:

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

Ersetzen Sie einen der %Werte durch einen gültigen Wert und das Datum wird festgelegt (nur als Root).

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

Direkte

Das zweite Datumsaufrufformular wird verwendet, um das Systemdatum direkt zu ändern.

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

Damit :

 date 11230812              # MMDDhhmm

Stellt das Datum auf den 23. November um 08h und 12min ein.

BSD hat einen ähnlichen Befehl, aber ein anderes Format ([[[[cc] jj] mm] tt] HH] MM [.ss]).

Versuchen Sie dateals eingeschränkter Benutzer zu sehen, was dies tun würde (ohne etwas zu ändern):

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

Oder, wenn Sie das Datum tatsächlich ändern möchten, als root:

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

Beachten Sie, dass Dienste wie NTP oder chrony betroffen sind. Und wenn neu gestartet wird, wird das Datum wieder auf das echte zurückgesetzt.

Fügen Sie ein JJ hinzu, um das Jahr einzustellen:

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

Oder ein CCYY zum Einstellen von Jahr und Jahrhundert:

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

Ich habe den Datumsbefehl und das Uhrzeitformat verwendet, die unten aufgeführt sind, um das Datum erfolgreich über den Terminal-Shell-Befehl festzulegen, der unter Android Things ausgeführt wird, das den Linux-Kernel verwendet.

Datum 092615002017.00

MMDDHHMMYYYY.SS

MM - Monat - 09

DD - Tag - 26

HH - Stunde - 15

MM - Min - 00

JJJJ - Jahr - 2017

.SS - Sekunde - 00

Brook Oldre
quelle
Da dies weder mit GNU noch mit BSD funktioniert date, können Sie weitere Informationen darüber hinzufügen, für welches System dies relevant ist und wie es für diese bestimmte Frage relevant ist.
Kusalananda