Wer hat an der Uhr gedreht? Für viele Anwendungen ist es äußerst wichtig, dass der PC die korrekte Zeit(zone) kennt. NTP und Co. sorgen dafür, dass ihr PC richtig tickt.
Eine falsch eingestellte PC-Uhr kann fatale Folgen haben: Gerät das Zeitgefühl Ihres Rechners durcheinander, gibt es beispielsweise auf einmal Dateien, die aus der Zukunft stammen, oder drei Jahrzehnte alte E-Mails. Die Folge: Missverständnisse, Fehler oder sogar Abstürze. Fast alle Linux-Distributionen richten Uhrzeit und Zeitzone schon bei der Installation ein, und grafischen Desktops wie KDE und Gnome bieten über die Uhr im Panel schnellen Zugriff auf Tools, welche die Uhr des Rechners konfigurieren (Abbildung 1).

Abbildung 1: Sowohl in KDE als auch in Gnome bringt Sie ein Rechtsklick auf die Uhr im Panel zu den Datums- und Zeiteinstellungen.
Auf der Shell zeigt cal einen einfachen, aber übersichtlich formatierten Kalender an. Datum und Uhrzeit präsentiert – wenn auch in Kurzform – der Befehl date. Dieses Programm hilft dem Administrator außerdem, Datum und Uhrzeit anzupassen. Auch in Skripten und in Kombination mit anderen Kommandozeilentools spielt date seine ganze Stärke aus: Beispielsweise, wenn das Programm Dateinamen generiert, die das aktuelle Datum enthalten. Zur Synchronisation von Systemzeit und Hardware-Uhr steht hwclock zur Verfügung. Allerdings müssen Sie dieses Programm als Root ausführen. Ist der PC permanent mit dem Internet verbunden, automatisieren Sie das Stellen der Uhr, indem Sie die eigenen Zeitmesser über das Network Time Protocol (NTP) mit einem Server im Netz abgleichen.
Kommandozeilenkalender
Rufen Sie den Kalender cal ohne Parameter auf, so zeigt das Programm den aktuellen Monat des aktuellen Jahres an. Mit der Option -3 überreden Sie Cal, zusätzlich den vorherigen und nächsten Monat anzuzeigen; der Zusatz -y schließlich präsentiert den Kalender gleich für das ganze Jahr (Abbildung 2). Um einen ganz bestimmten Monat auszugeben, teilen Sie Cal diesen in Form einer zweistelligen Monats- und einer vierstelligen Jahreszahl mit. Es reicht in diesem Fall nicht, das Jahr anzugeben, denn Cal kennt Daten zurück bis zum 1. Januar des Jahres 1.
Standardmäßig präsentiert Cal die Ausgabe in der Sprache, die die Umgebungsvariable LANG definiert [1]. Bevorzugen Sie beim Zeitformat eine andere Sprache, möchten die restlichen Programmausgaben aber weiterhin auf Deutsch erhalten, dann setzen Sie die Variable LC_TIME – und schon spricht Cal auch Fremdsprachen, im folgenden Beispiel Englisch:
LC_TIME=C cal -y
Wie Sie in der letzten Zu-Befehl-Folge [1] lesen konnten, machen Sie dieses Verhalten über einen entsprechenden export-Aufruf in der Datei ~/.bashrc über die Befehlsfolge export LC_TIME=C dauerhaft.
Wie spät ist es?
Geben Sie den Befehl date auf der Kommandozeile ein, dann sehen Sie Datum, Uhrzeit und Zeitzone:
$ date Di Apr 24 19:27:46 CEST 2007
Auch Date richtet sich bei der Ausgabe nach der über LANG angegebenen Sprache und lässt sich wie Cal über LC_TIME beeinflussen:
$ LC_TIME=C date Tue Apr 24 19:42:30 CEST 2007
Noch flexibler zeigt sich Date, wenn Sie dem Aufruf die Variable TZ (“time zone” = Zeitzone) voranstellen. Welche Angaben zur Zeitzone hinter TZ möglich sind, erfahren Sie mit einem Blick in das Verzeichnis /usr/share/zoneinfo/. Um beispielsweise herauszufinden, welche Zeit eine Uhr in New York gerade anzeigt, genügt ein einziges Kommando:
$ TZ=America/New_York date Tue Apr 24 13:43:02 EDT 2007
Telefonieren Sie zum Beispiel häufiger mit Freunden in New York fragen sich dabei jedes Mal, ob es dort gerade mitten in der Nacht oder viel zu früh ist, dann erstellen Sie für den gerade gezeigten Aufruf einfach ein Alias. Dazu schreiben Sie in die Konfigurationsdatei der Bash, ~/.bashrc, die Zeile
alias NY='TZ=America/New_York date'
und lesen die Einstellungen nach dem Abspeichern mittels des Befehls source ~/.bashrc neu ein. Anschließend reicht die Eingabe von NY, um auf der Shell die New Yorker Ortszeit anzuzeigen.
Formatierte Ausgabe
Das Programm Date kennt eine Vielzahl von Parametern, welche die Ausgabe beeinflussen. Zusammen mit einem Pluszeichen, gefolgt von einem Prozentzeichen und einem Buchstaben, formatieren Sie die date-Ausgabe, zum Beispiel:
$ date +%Y_%m 2007_04
Einige häufig verwendete Aufrufparameter zeigt die Tabelle “Date: Aufrufparameter”; eine vollständige Liste finden Sie in der Manpage (man date) zu Date. Praktisch sind diese Formatierungsoptionen vor allem, wenn Sie Date heranziehen, um automatisch Dateinamen bestehend aus Datum und/oder Uhrzeit zu generieren. Das Kommando
tar -cvjf backup_$(date +%d_%m_%Y).tar.bz2 *
etwa erstellt ein mit Bzip2 komprimiertes Tar-Archiv, dessen Name sich aus dem Textstring backup_, dem Datum – bestehend aus Tag, Monat und Jahr, jeweils mit Unterstrichen voneinander abgetrennt – und der Dateiendung .tar.bz2 zusammensetzt, zum Beispiel backup_25_04_2007.tar.bz2.
Date: Aufrufparameter
| Parameter | Bedeutung |
|---|---|
%M |
Minuten (00 bis 59) |
%H |
Stunden im 24-Stunden-Format |
%I |
Stunden im 12-Stunden-Format |
%a |
Wochentag in Kurzform |
%A |
Wochentag in Langform |
%d |
Tag als zweistellige Ziffer |
%b |
Monatsnamen in Kurzform |
%B |
Monatsnamen in Langform |
%m |
Monat als zweistellige Ziffer |
%y |
Jahr als zweistellige Ziffer |
%Y |
Jahr als vierstellige Ziffer |
%D |
Datum vierstellig (mm/dd/yy) |
%T |
Zeit im 24-Stunden-Format aus (hh:mm:ss) |
%r |
Zeit im 12-Stunden-Format aus (hh:mm:ss) |
%t |
Tabulator |
%n |
Zeilenumbruch |
%% |
%-Zeichen |
Systemzeit setzen
Als Root setzen Sie mit Date die Uhrzeit und das Datum des Systems neu. Dazu machen Sie zum Beispiel eine absolute Zeitangabe, indem Sie die Daten als zwölfstellige Ziffer an den Date-Aufruf anhängen – zwei Stellen für den Monat, zwei für den Tag, zwei für die Stunden, zwei für die Minuten. Zum Schluss kommt die vierstellige Jahreszahl:
# date 060916101973 Sat Jun 9 16:10:00 CET 1973
Verbindlich sind lediglich die erten drei Angaben; lassen Sie die Jahreszahl weg, geht date davon aus, dass Sie das aktuelle Jahr meinen. Möchten Sie das Datum sekundengenau setzen, geben Sie die Sekunden als zweistellige Ziffer hinter der Jahreszahl an.
Alles ist relativ
Alternativ zu Daten und Uhrzeiten versteht Date auch relative Angaben und bringt dafür einige vordefinierte Zeichenketten mit:
yesterday– gesterntomorrow– morgentoday– heutenow– nunsec(s)/second(s)– Sekunde(n)min(s)/minute(s)– Minute(n)hour(s)– Stunde(n)day(s)– Tag(e)week(s)– Woche(n)fortnight– 14 Tagemonth(s)– Monat(e)year(s)– Jahr(e)
Darüber hinaus versteht date bestimmte Begriffe, wie ago (“vor”), so dass Sie day ago anstelle von yesterday schreiben können. Setzen Sie eine dieser Zeichenketten ein, um die Zeit einzustellen, verwenden Sie den Parameter -s:
# date -s '+3 mins' Mi Apr 25 18:03:44 CEST 2007
Um sich einen relativen Zeitpunkt lediglich anzeigen zu lassen, setzen Sie dagegen den Parameter -d ein:
# date -d '+5 days -2 hours' Mi Apr 30 16:03:44 CEST 2007
Die Info-Seite zu date verrät mehr zu den Zeichenketten und ihrem Einsatz. Sie lesen die Dokumentation entweder auf der Kommandozeile mittels info coreutils date[2] oder in KDEs Dateimanager Konqueror über den URI info:/coreutils/Date input formats (Abbildung 3).
Hardware-Uhr einstellen
Neben dieser Software-Uhr tickt in Ihrem Computer ein weiterer Zeitmesser, der Datum und Uhrzeit sogar dann weiterzählt, wenn der Rechner komplett ohne Stromzufuhr auskommen muss. Für die unterbrechnungsfreie Zeitmessung sorgt eine batteriebetriebene Uhr auf dem Mainboard, die man als CMOS-Uhr, RTC (Real Time Clock), BIOS-Uhr oder auch Hardware-Uhr bezeichnet.
Mit dem Programm hwclock lesen Sie diese Hardwareuhr aus und stellen Sie neu. Alle Kommandos erfordern aber Root-Rechte. Zusammen mit der Option -r zeigen Sie die lokale Hardwarezeit an:
# hwclock -r Mi 25 Apr 2007 19:24:26 CEST -0.435565 seconds
Zudem bietet Hwclock Optionen, mit denen Sie die Systemzeit nach der Hardwareuhr stellen (hwclock -s) beziehungsweise andersherum die Hardwareuhr an die aktuelle Systemzeit anpassen (hwclock -w).
Eine Kombination aus --set und --date setzt eine spezifische Zeit. Hinter --date geben Sie eine Zeichenkette an, die das neue Datum und die neue Uhrzeit beschreibt. Das Format sieht genauso aus wie für die Option -s des Programms Date. Die Befehlsfolge
# hwclock --set --date="+2 hours"
stellt beispielsweise die Hardware-Uhr um zwei Stunden vor.
Alles automatisch!
Beim Network Time Protocol (NTP) handelt es sich um einen Standard zur automatischen Synchronisation von Uhren in Computersystemen. Das Zeitsignal wandert dabei über das Netzwerk von einem NTP-Server zu einem Client. Wann genau der NTP-Client Ihres Linux-Rechners mit einem Server im Netz Kontakt aufnimmt, konfigurieren Sie selbst. Das kann beispielsweise beim Booten erfolgen, bei der Interneteinwahl oder auch manuell auf der Kommandozeile.
Die verschiedenen Distributionen bieten unterschiedliche Hilfestellungen beim Installieren und Einrichten von NTP. Unter Opensuse befindet sich die Software beispielsweise im Paket xntp, unter Debian installieren Sie das Paket ntp. Benutzer von Opensuse konfigurieren NTP über YaST im Bereich Netzwerkdienste, unter Debian bearbeiten Sie die entsprechende Konfigurationsdatei /etc/ntp.conf am besten mit einem Texteditor.
Alternativ dazu nehmen Sie als Benutzer Root das Kommando ntpdate zur Hilfe. Beim Aufruf teilen Sie dem Tool den zu kontaktierenden Server mit, zum Beispiel:
# ntpdate de.pool.ntp.org 25 Apr 23:58:21 ntpdate[24405]: adjust time server 85.25.141.60 offset 0.037843 sec
Ntpdate kommt einem eventuell auf Ihrem Rechner laufenden NTP-Daemon ins Gehege – schalten Sie einen solchen also zunächst aus. Unter Debian GNU/Linux tippen Sie dazu als Root beispielsweise: /etc/init.d/ntp stop.
[1] Umgebungsvariablen: Heike Jurzik, “Gut eingerichtet”, LinuxUser 05/2007, S. 88, http://www.linux-user.de/ausgabe/2007/05/088-zubefehl/index.html
[2] Info-Seiten und Manpages: Heike Jurzik, “Fach-Lektüre”, LinuxUser 01/2002, S. 90, http://www.linux-user.de/ausgabe/2002/01/090-zubefehl/man-4.html







