Zeitzone vom Terminal aus einstellen

210

Ich möchte die Zeitzone der Systemuhr vom Terminal aus ändern.

Dies kann mit erfolgen

tzselect

"was eine GUI im Terminal öffnet"

oder

sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime

"was auf gmt gesetzt wird"

Aber gibt es eine Möglichkeit, die Zeitzone nur mit dem Offset einzustellen, dh-1 oder +5 usw.?

Ich muss dies tun, während ich eine Anwendung zum Anpassen von Timeoffset- oder Berichtsprotokollen schreibe. Die einzigen Informationen, die ich habe, sind die Benutzer-IP-Adressen. Ich kann eine Web-App verwenden, um den Ort der IP zu finden, aber dann muss ich den Versatz einstellen, was einfach wäre, wenn ich nur den Versatz des Ortes erhalten könnte, aber wenn ich Zone und Stadt finden müsste, wäre es ein echtes Problem .

Wenn jemand die Antwort auf das Einstellen der Systemuhr mit +/- Stunde weiß, wäre das großartig.

user2155009
quelle
Bitte helfen Sie uns, die akzeptierte Antwort zu finden. Ich denke, @ Mitch Antwort ist die beste askubuntu.com/a/323163/22308
Nam G VU
1
@NamGVU Nein, Mitch ist nicht die beste Lösung, sondern eine Antwort auf die Frage "GUI in einem Terminal". Sogar das OP sagte: "Dies wird nicht funktionieren, da ich die Zeitzone von einem Programm ohne Benutzereingabe abändern muss. Ich brauche einen Befehl, den ich in die Terminal-Nicht-GUI-Lösung einspeisen kann. " "eine skriptfreundliche. Collin Anderson ist besser, wenn Sie eine Stadt kennen, oder Ryan ist für einfache GMT + -n
Xen2050
In Ubuntu 18.04 öffnet tzselect keine GUI. Es verfügt über eine terminalbasierte Menüauswahl.
Tim Richardson

Antworten:

321

Um die Zeitzone vom Terminal aus zu ändern, drücken Sie einfach Ctrl+ Alt+ Tauf Ihrer Tastatur, um das Terminal zu öffnen. Führen Sie beim Öffnen die folgenden Befehle aus:

sudo dpkg-reconfigure tzdata

Befolgen Sie nach dem Öffnen einfach die Anweisungen auf dem Bildschirm, um die Zeitzone zu ändern.

Mitch
quelle
14
dies wird nicht funktionieren , wie ich brauche , um altr Zeitzone aus einem Programm ohne i Benutzereingabe einen Befehl muss ich in die Klemme gui Lösung dank nicht für die Antwort ernähren
user2155009
1
Vielen Dank!!! das hilft, wenn ich schon manuell geändert habe etc / timezone =) wie php.net/manual/en/timezones.php !!! absolut identisch !!!
Vladimir Ch
Die Neukonfiguration von tzdata scheint auch die Hardware-Uhr so ​​anzupassen, dass die angezeigte Zeit nach dem Wechsel der Zeitzone gleich bleibt. Vielleicht möchten Sie das, wenn Ihre Zeit korrekt war, aber die Zeitzone falsch war. Sie möchten jedoch auf keinen Fall Ihre Hardware-Uhr auf Reisen berühren. Der Zeitdatensatz-Ansatz scheint nur die Zeitzone zu ändern.
SnakE
@SnakE für mich angezeigt Zeit ändert sich entsprechend
RiaD
Ich habe es ohne Probleme von Putty von Commad Line geändert, warum hast du das gesagt, mein Freund? @ADTC
Sabre Tabatabaee Yazdi
170

Sie können auch die neue verwenden timedatectl, um die Uhrzeit in 14.04 einzustellen.

sudo timedatectl set-timezone America/New_York
Collin Anderson
quelle
Wie installierst du es auf Ubuntu?
Division durch Null
1
Es ist standardmäßig am 14.04 installiert.
Collin Anderson
6
Um alle verfügbaren Optionen anzuzeigen, können Sie ausführen ls -R --group-directories-first /usr/share/zoneinfo. (Achten Sie darauf, hier keine Datei zu ändern oder zu löschen.) Weitere Informationen zu posixund rightPräfixe finden Sie hier .
ADTC
Das funktioniert! ...
Dan Nissenbaum
3
Verwenden Sie sudo timedatectl set-timezone Etc/UTCfür UTC.
Zoltán
19

Sie können die GMT ± x- Dateien in verwenden /usr/share/zoneinfo/Etc.

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime
Ry-
quelle
Danke, allot, für die Antwort. Ich erhalte einen Fehler. ln: Fehler beim Erstellen des symbolischen Links. `/ etc / localtime ': Datei existiert oboiusly. Ich bin nicht sicher, was ich tue Befehl richtig benutzen? Ich verwende sudo ln / usr / share / zoneinfo / Etc / GMT $ + 1 / etc / localtime, um die Uhr auf + 1gmt zu stellen
user2155009
9
Minitech hat das Force-Flag vergessen, denke ich. -> sudo ln -sf ....
Tele
1
Dies wird irgendwie funktionieren, aber den tz-Namen in nicht aktualisieren /etc/timezone.
Poolie
1
Um die / etc / timezone zu aktualisieren, führen Siesudo dpkg-reconfigure --frontend noninteractive tzdata
Pierre Gramme
17

Mir ist klar, dass dieser Thread etwas veraltet ist, aber ich suchte nach einer besseren Lösung, da ich die Zeitzone in einer VM automatisch festlegen musste, nachdem ein Benutzer sie von unserer Website heruntergeladen und bereitgestellt hatte. Folgendes ist mir eingefallen:

echo "Setting TimeZone..."
export tz=`wget -qO - http://geoip.ubuntu.com/lookup | sed -n -e 's/.*<TimeZone>\(.*\)<\/TimeZone>.*/\1/p'` &&  timedatectl set-timezone $tz
export tz=`timedatectl status| grep Timezone | awk '{print $2}'`
echo "TimeZone set to $tz"

Dadurch wird geoip.ubuntu.com vom Server abgefragt, sobald er im neuen Netzwerk gestartet wurde (mein Skript prüft zuerst, ob Konnektivität besteht), und anschließend wird die Zeitzone des Servers basierend auf der Antwort festgelegt.

Der Befehl "wget ​​-q0 -" weist wget an, nur die Ergebnisse an stdout auszugeben, die dann an die Variable $ tz weitergeleitet werden.

Hoffe es hilft jemandem!

Clayton Dukes
quelle
1
Toll! Auf Ubuntu 16.04 sollte es stattdessen "grep zone" und "print $ 3" ​​sein.
user334639
Ich schlage ein anderes CLI vor, um die Zeitzone zu ermitteln. Ein bisschen sauberer aus meiner Sicht: curl -s ' geoip.ubuntu.com/lookup ' | xmllint --xpath '/ Response / TimeZone / text ()' -
Darko Miletic
11

TL; DR /etc/localtime ist ein symbolischer Link, der auf eine Datei in verweist /usr/share/zoneinfo/Continent/City. Durch Ändern der Position können Sie Ihre Zeitzone ändern.

Um die Zeitzone zu ändern, entfernen Sie den /etc/localtimeLink und weisen Sie der gewünschten Stadt einen symbolischen Link zu. Beispielsweise wird ls -l /etc/localtimeberichtet, dass diese Datei auf verweist /usr/share/zoneinfo/America/Denver. Um es nach New York zu ändern, tue ich

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. Warten Sie eine Minute, bis meine Uhr aktualisiert wurde

Der Screenshot unten zeigt die Schritte und Bestätigung von timedatectl

Bildbeschreibung hier eingeben

Sergiy Kolodyazhnyy
quelle
Es ist schön zu verstehen, was sich hinter dem Vorhang abspielt, aber ist es nicht besser, die dafür vorgesehenen Tools wie dpkg-reconfigure tzdata usw. vorzuschlagen?
Patrick Cornelissen
@PatrickCornelissen Erstens gibt es bereits Antworten tzdata, weshalb es sinnlos ist, dasselbe vorzuschlagen . Zweitens tzdatamacht so ziemlich das Gleiche. Es liegt an den Nutzern, zu entscheiden, was sie bevorzugen. Es ist also weder besser noch schlechter - nur die Präferenz einer Person.
Sergiy Kolodyazhnyy
1
Nun, die Arbeit "gegen" die Verteilungstools führt oft zu Problemen, so dass ich Ihren Ansatz nach Möglichkeit vermeiden würde, aber fairerweise würde Ihre Lösung (derzeit) funktionieren
Patrick Cornelissen
Diese Lösung funktioniert meines Wissens über verschiedene Distributionen hinweg. Benötigt jedoch weiterhin die Zeitzonendatenbank im Verzeichnis / usr / share / zoneinfo. Gibt es eine Möglichkeit, die Zeitzonendatenbank abzurufen, ohne das tzdata-Paket zu installieren?
Andho
@andho Da vorgeschlagen wird /var/lib/dpkg/info/tzdata.list, dass alle Elemente in /usr/share/zoneinfodiesem Paket enthalten sind, würde ich davon ausgehen, dass Sie das Paket installieren müssen, um alle Elemente zu haben, aber ehrlich gesagt bin ich mir nicht ganz sicher und weiß nicht genau, wie dies bei anderen funktioniert Verteilungen. Überlegen Sie, ob Sie dies unter Unix & Linux als Frage stellen möchten, und verweisen Sie auf diesen Beitrag, wenn Sie den Kontext für die Frage bereitstellen möchten.
Sergiy Kolodyazhnyy
10

Die einfache Möglichkeit, die Zeitzone zu aktualisieren, ist die Verwendung von sudo dpkg-reconfigure tzdata. Dies ist jedoch nicht so einfach zu skripten.

Wenn Sie die Zeitzone explizit über ein Skript festlegen möchten (z. B. zum Einrichten einer VM), finden Sie hier ein Rezept:

Stellen Sie eine Variable für die gewünschte Zeitzone ein, z. B. eine von

tz=Europe/London
tz=America/Anchorage
tz=Etc/GMT+6

Gültige Werte sind die Verzeichnisse und Dateinamen unter /usr/share/zoneinfo.

Dann einfach

sudo cp -vf /usr/share/zoneinfo/$tz /etc/localtime
echo $tz | sudo tee /etc/timezone

Beachten Sie, dass beide /etc/localtimeund /etc/timezonekonsistent sein müssen.

Führen Sie jetzt wahrscheinlich einen Neustart durch, um alle Ihre Dienste zu aktualisieren (z. B. cron).

Rick-777
quelle
-1: Verwenden Sie niemals cp/ etc / localtime. / etc / localtime ist ein Symlink zur richtigen Datei. Wenn Sie cpsie ändern, werden Sie tatsächlich den Inhalt der TZDATA-Datei überfrachten, auf die sie aktuell verweist. Daher enthält die UTC-TZDATA-Datei plötzlich (z. B.) Zeitzonendaten für Europa / London anstatt für UTC, was schlecht (und ärgerlich) ist zur Fehlerbehebung, wie ich aus eigener Erfahrung sagen kann)
Foogod
5

Hier ist die Methode, die ich verwende und die auf die USA ausgerichtet ist, da ich mich nicht um Zeitzonen außerhalb der USA kümmern muss.

Wenn ich die aktuelle Zeitzone ermitteln muss, tue ich Folgendes:

cat /etc/timezone  

oder

sudo hwclock --show  

Ich mache dann:

timedatectl set-timezone <_designation_>

wo <_designation_>ist einer der folgenden:

USA / Ost-
USA / Zentral-
USA / Berg-
USA / Pazifik-
USA / Alaska-
USA / Aleuten-
USA / Arizona-
USA / Ost-Indiana-
USA / Hawaii-
USA / Indiana-Starke-
USA / Michigan-
USA / Pazifik-Neue-
USA / Samoa

Z.B:

timedatectl set-timezone US/Eastern  

Weitere Zeitzonenbezeichnungen finden Sie hier: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Rotunschärfe
quelle
tzselectist ein guter Weg, um die Zeitzone Zeichenfolge zu bekommen
Martin Thoma
0

Dies ist nur möglich, wenn Sie die Zeitzonendatei auswählen, die jedem Zeitzonenversatz entsprechen soll.

Einige Antworten schlugen die Verwendung der Dateien in / usr / share / zoneinfo / Etc vor, aber das Problem mit diesen ist, dass sie DST-Agnostiker sind.

Wenn Sie also nicht für jeden Versatz eine Zeitzonenkonfiguration auswählen oder sich nicht für die Sommerzeit interessieren, können Sie dies nicht generisch tun.

Alex G
quelle