Was ist Unix Epoch und wie funktioniert Unix Time?


Zifferblatt mit verzerrtem Wirbeldesign.
Michail Leonov / Shutterstock

Unix speichert die Zeit als Anzahl der Sekunden seit dem 1. Januar 1970. Und das bedeutet, dass Linux dies auch tut. Wir erklären dieses scheinbar seltsame System und warum der Weltuntergang für 2038 geplant war.

Die Anfänge von Unix

Goethe ( 1749–1832 ) erklärte: „Jede Sekunde hat einen unendlichen Wert“. Das stimmt, jeder von uns hat hier auf dem Planeten Erde nur wenige Sekunden, und wir wissen nicht, wann unsere letzte Sekunde sein wird. Aber wir kennen unseren Geburtstag und wissen, wann unser tödlicher Countdown begann.

Unix hat wie die britische Königin zwei Geburtstage. Genauer gesagt, es gab zwei verschiedene Gelegenheiten, bei denen er anfing, die Sekunden seines Daseins zu zählen. Das erste Mal, dass Unix am 1. Januar 1971 ab Mitternacht zu zählen begann.

Wir können dies ganz deutlich sehen , durch einen Abschnitt der ersten Ausgabe des UnixProgrammierhandbuch, datiert 3. November 1971. Blättern Sie zu Seite 13 dieser Abschnitt der Überprüfung und Sie werden eine Beschreibung des siehe time (jetzt weg). Uns wird gesagt, dass "die time die Zeit seit 00:00:00 am 1. Januar 1971 zurückgibt, gemessen in sechzig Sekunden."

Kalender und Zeitrahmen messen die Zeit von einem wichtigen Punkt in der Vergangenheit, wie einem kosmologischen Ereignis, der Gründung eines Imperiums oder dem Erfolg einer Revolution. In Betriebssystemen werden ein beliebiges Datum und eine beliebige Uhrzeit als Startpunkt der Zählung gewählt. Dies ist die Ära dieses Betriebssystems.

Unix verwendet eine 32-Bit-Ganzzahl ohne Vorzeichen, um die 60-Sekunden-Zählung der Epoche zu speichern. Dies ist eine numerische Variable, die Werte im Bereich von 0 bis 4.294.967.295 (2 32 −1) enthalten kann. Das klingt nach viel. Aber der Zähler wurde auf 60 Mal pro Sekunde inkrementiert und, wie das Programmierhandbuch vermerkt: "Der chronologisch denkende Benutzer wird feststellen, dass 2 ** 32 Sechzigersekunden nur etwa 2,5 Jahre sind."

Bei einer Verbrauchsrate von 60 Ziffern pro Sekunde hätte der Zähler am 8. April 1973, knapp 829 Tage später, seinen Maximalwert erreicht.

Die zweite Epoche von Unix

Unnötig zu erwähnen, dass schnell gehandelt wurde. Die Ganzzahl ohne Vorzeichen wurde durch eine 32-Bit- Ganzzahl mit Vorzeichen ersetzt. Dies mag wie eine überraschende Wahl erscheinen, da eine ganze Zahl mit Vorzeichen weniger positive Werte (2.147.483.647 (2 31 )) enthalten kann als eine ganze Zahl ohne Vorzeichen. Allerdings wurde auch die Verbrauchsgeschwindigkeit von 60 Sekunden auf volle Sekunden reduziert.

Es dauert länger, von 0 bis 2.147.483.647 zu zählen, wenn eine Zahl pro Sekunde gezählt wird, als von 0 bis 4.294.967.295 bei 60 Zählungen pro Sekunde. Und zwar mit ziemlichem Abstand. Die neue Regelung würde ihren Höchstwert erst in gut 68 Jahren erreichen. Dies schien so weit in der Zukunft zu liegen, dass die Epoche sogar auf einen früheren Zeitpunkt zurückgesetzt wurde. Die neue Epoche wurde für den 1. Januar 1970 um Mitternacht UTC festgelegt.

Dieser Punkt, 68 Jahre in der Zukunft, ist jetzt unheimlich nah. Genauer gesagt erreichen wir ihn am 19. Januar 2038 um 03:14:07 UTC.

Ein einfaches, aber effektives Schema

Die Verwendung einer einzelnen Ganzzahl zum Zählen der Zeitschritte ab einem bestimmten Zeitpunkt ist eine effiziente Möglichkeit, Zeit zu speichern. Keine Notwendigkeit, komplizierte Strukturen über Jahre, Monate, Tage und Stunden zu speichern. und es ist unabhängig von Land, Ort und Zeitzone.

Die Multiplikation der Zahl in der Ganzzahl mit der Größe des Zeitschritts (in diesem Fall eine Sekunde) ergibt die Zeit seit der Epoche, und die Umwandlung von dieser in ortsspezifische Formate mit Zeitzoneneinstellungen ist relativ trivial.

Es gibt Ihnen jedoch eine integrierte Obergrenze. Früher oder später erreicht sie den maximalen Wert, den sie im gewählten Variablentyp aufnehmen kann. Zum Zeitpunkt der Abfassung dieses Artikels sind es nur noch 17 Jahre bis zum Jahr 2038.

Es ähnelt dem Problem der ersten Computersysteme des letzten Jahrhunderts, die zwei Ziffern zum Speichern von Jahren verwendeten, jedoch geringfügig davon verschieden. Wenn der Kalender auf das neue Jahr und das neue Jahrhundert von 2000 verschoben wurde, würde der Wert eines als "00" gespeicherten Jahres als 2000 oder 1900 interpretiert?

Schätzungen zufolge hat die Korrektur des sogenannten „ Millennium-Fehlers “ allein die Vereinigten Staaten mehr als 100 Milliarden Dollar gekostet und weltweit Tausende von Mannjahren gebraucht, um sie zu beheben. In den ersten Januartagen 2000 gab es einige Probleme, aber nichts wie die Katastrophen, die passiert wären, wenn der Fehler ignoriert worden wäre.

Der Weltuntergang wird verschoben

Da Linux und alle Unix-ähnlichen Betriebssysteme das gleiche Problem haben, wird das Jahr 2038-Problem seit einiger Zeit ernst genommen und seit 2014 wurden dem Kernel Korrekturen hinzugefügt. Dies wird fortgesetzt und dem Kernel wurden vor kurzem Korrekturen hinzugefügt als Januar. .2020, um das 32-Bit-Integer-Problem zu lösen.

Natürlich enthält ein funktionierender Linux-Computer viel mehr als nur einen Kernel. Alle Betriebsdienstprogramme und Benutzerbereichsanwendungen, die die Systemzeit über die verschiedenen APIs und Schnittstellen verwenden, müssen geändert werden, um 64-Bit-Werte zu erwarten. Dateisysteme müssen auch aktualisiert werden , um 64-Bit-Zeitstempel für Dateien und Verzeichnisse zu akzeptieren.

Linux ist überall . Ein katastrophaler Fehler in Linux würde Fehler in allen Arten von computerbasierten Systemen bedeuten. Linux betreibt den größten Teil des Webs, den größten Teil der öffentlichen Cloud und sogar Raumschiffe. Fahren Sie Smart Homes und autonome Autos. Smartphones haben einen von Unix abgeleiteten Kernel im Herzen. Praktisch alles, in das Betriebssysteme integriert sind, wie Netzwerk-Firewalls, Router und Breitbandmodems, läuft unter Linux.

Es ist großartig, dass Linux auf dem Weg ist, repariert zu werden. Wir installieren die Updates und das wars. Aber wie stehen die Chancen, dass all diese Geräte gepatcht und aktualisiert werden? Viele von ihnen werden bis dahin noch nicht einmal in Betrieb sein, also wird das ein strittiger Punkt sein, aber einige werden immer noch offline gehen. Verstecken sich vielleicht in dunklen, staubigen Ecken in Serverräumen und Rack-Schränken, aber sie werden da sein und lautlos arbeiten, während die Sekunden bis zum 19. Januar 2038 um viertel nach drei Uhr morgens vergehen.

Aber solche Geräte sollten eine kleine Minderheit sein. Die überwiegende Mehrheit der Systeme wird die Zeit der Krise ohne Zwischenfälle kommen und vergehen sehen. Noch einmal können wir uns entspannen. Zumindest bis das Jahr 2486 näher rückt, was genau das gleiche Problem für Systeme mit sich bringt, die 64-Bit-basierte Ganzzahlen verwenden, um die Zeit seit der Epoche zu zählen.

Der Datumsbefehl

Wir können den date Befehl verwenden , um Linux und andere Unix-Derivate zu überprüfen, die immer noch das ursprüngliche und einfache Schema verwenden, den Zeitwert als Anzahl der Sekunden seit der Epoche zu speichern.

Wenn Sie den date ohne Parameter verwenden, werden das aktuelle Datum und die aktuelle Uhrzeit im Terminalfenster gedruckt. Die Zeitzone, für die die Uhrzeit eingestellt ist, wird ebenfalls angezeigt. EDT ist Eastern Daylight Time, was bedeutet, dass sich unser Testcomputer in der östlichen Zeitzone befindet und es gilt Sommerzeit . Wenn die Sommerzeit nicht gilt, verwendet die Eastern Time Zone Eastern Standard Time.

Um den zugrunde liegenden ganzzahligen Wert anzuzeigen, können wir eine Anzeigeformatzeichenfolge verwenden. Formatstrings haben als erstes Zeichen ein Pluszeichen "+". Das Format-Token "% s" bedeutet "Sekunden seit Epoche anzeigen".

Wenn wir den von date Sekundenwert nehmen und ihn mit der -d date Befehl zurückgeben (die durch eine Zeichenfolge beschriebene Zeit anzeigen), wird er in ein normales Datum und eine normale Uhrzeit zurückgewandelt.

 Datum
 Datum +% s
 Datum -d @ 1633183955 

Verwenden des Datums, um Sekunden seit der Unix-Ära anzuzeigen

Wir können zeigen, dass der ganzzahlige Wert tatsächlich die Zeit darstellt, indem wir die Anzahl der Sekunden anzeigen, 10 Sekunden schlafen und die neue Anzahl von Sekunden anzeigen. Die beiden ganzzahligen Werte werden genau 10 unterschiedlich sein.

 Datum +% s && Schlaf 10 && Datum +% s 

Zwei-Sekunden-Werte im Abstand von 10 Sekunden anzeigen

Wir haben gesehen, dass wir einige Sekunden mit dem date verbringen können und es zu einem Datum und einer Uhrzeit für uns wird. Wenn wir das mit null Sekunden als Eingang zu unserem Wert zu tun, date sollten wir das Datum und die Uhrzeit aus der UnixÄra drucken.

 TZ = Datum 'UTC' -d @ 0 + '% x% R' 

Unix-Epoch-Anzeige ab 0 Sekunden Eingabewert

Der Befehl gliedert sich wie folgt auf:

  • TZ = 'UTC' : Die Zeit wurde unter Verwendung der koordinierten Weltzeit (UTC) eingestellt, daher müssen wir das date angeben, um UTC zu verwenden. Das Konstrukt „TZ =“ legt die effektive Zeitzone nur für den aktuellen Befehl fest.
  • date : Der date .
  • -d @ 0 : Wir date an, eine Zeichenfolge als Eingabe zu verwenden, nicht die Zeit "jetzt". Der String, den wir übergeben, hat null Sekunden.
  • + '% x% R' : die Ausgabeformatzeichenfolge. Das Format-Token "% x" gibt ein date , das Jahr, Monat und Tag anzeigt. Das Format-Token "% R" gibt an, dass das date das 24-Stunden-Format für Stunden und Minuten verwenden soll. Da die Formatzeichenfolge Leerzeichen enthält, setzen wir die gesamte Zeichenfolge in einfache Anführungszeichen " ' ", damit die Zeichenfolge als einzelnes Element behandelt wird.

Die Abfahrt ist erwartungsgemäß am 1. Januar 1970 um Mitternacht.

Bis zum nächsten Mal

Einfach ist normalerweise am besten. Das Zählen der Sekunden von einem festen Datum ist der einfachste Weg, um den Lauf der Zeit zu markieren. Doch der Lauf der Zeit bringt neue Herausforderungen mit sich. Mit den implementierten Fixes scheinen wir bis zum Jahr 2486 klar zu sein.

Ich denke, man kann mit Sicherheit sagen, dass wir uns etwas näher darum kümmern werden.

Der Eintrag Was ist Unix Epoch und wie funktioniert Unix Time? wurde zuerst in ResponTodo veröffentlicht .