Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
time dient zur Messung der Laufzeit von Programmen und Shell-Befehlen. Es wird häufig zur Optimierung selbstgeschriebener Programme verwendet.
Die Bash enthält eine Version des time-Programms als reserviertes Schlüsselwort. Das Schlüsselwort time
hat im Gegensatz zum externen Programm eine eingeschränkte Auswahl an Optionen und eine unterschiedliche Syntax. Um auch in der Bash den externen Befehl aufzurufen, muss entweder der komplette Programmpfad /usr/bin/time
oder die Anweisung command time
angegeben werden.
In einer anderen Shell (wie z.B. Dash oder Zsh) wird mit dem Befehl time
das externe Programm ausgeführt. Das ist zu berücksichtigen, wenn in Skripten damit gearbeitet wird, deren Shebang z.B. #!/bin/sh
lautet. Bei Ubuntu verweist die Skript-Shell nicht auf bash sondern auf dash.
Der externe Befehl sollte standardmäßig bereits installiert sein, kann aber mit dem folgenden Paket bei Bedarf nachinstalliert [1] werden:
time
mit apturl
Paketliste zum Kopieren:
sudo apt-get install time
sudo aptitude install time
In der Bash ist time
ein reserviertes Schlüsselwort (wie if
oder for
). Die allgemeine Syntax ist [2]:
time <Optionen> PIPELINE
PIPELINE
ist dabei entweder ein einzelner Befehl oder eine Pipeline.
Das Bash-Schlüsselwort kennt eine einzige Option für eine modifizierte Anzeige der Ergebnisse:
time - Optionen | |
Option | Beschreibung |
-p | Ausgabe der Laufzeit in einem Format kompatibel zu Posix. |
Die folgende Anweisung sucht im HOME-Verzeichnis des Benutzers nach MP3-Dateien und gibt am Ende der Liste die Laufzeit aus:
time find ~ -name *.mp3 -type f
Im Gegensatz zum externen time
-Befehl können auch Pipelines verwendet werden. In diesem Beispiel wird ein sortiertes Inhaltsverzeichnis ausgegeben mit Angabe der kompletten Laufzeit:
time ls ~ | sort
Es kann auch die Laufzeit von mehreren hintereinander laufenden Befehlen gemessen werden:
time (echo "Start"; sleep 1; sleep 0.5; echo "Ende")
Umleiten des Standardfehlerkanals stderr
eines Programms:
time tar -cf sicherung.tgz "/home" 2>> backup.log
Die Fehlermeldungen von tar landen dabei in der Datei backup.log, die Laufzeiten erscheinen aber im Terminal.
Soll die Laufzeit ebenfalls in die Datei geschrieben werden, muss mit geschweiften Klammern gruppiert werden:
{ time tar -cf sicherung.tgz "/home"; } 2>> backup.log
Um den externen Befehl time
zu starten, öffnet man ein Terminal [2] und führt den folgenden Befehl aus:
/usr/bin/time <Optionen> BEFEHL PARAMETER
oder
command time <Optionen> BEFEHL PARAMETER
Als BEFEHL
wird das Programm oder der Befehl eingegeben, von dem die Laufzeit gemessen werden soll. Falls dieser Befehl zusätzliche Parameter benötigt, können sie direkt im Anschluss an den Befehl angegeben werden.
Der externe Befehl time kennt viele Optionen, mit denen die anzuzeigenden Daten beeinflusst werden können:
Hier sind nicht alle Formatierungen aufgeführt. Die komplette Übersicht kann man in den Manpages zu time finden.
time - Formatierungen | |
Format | Beschreibung |
\n | Eine neue Zeile wird begonnen. |
\t | Ein Tabulator wird ausgegeben. |
\\ | Ein Backslash '\' wird ausgegeben. |
%% | Das Prozent-Zeichen '%' wird ausgegeben. |
%C | Den Namen und die Parameter des zu testenden Befehls ausgeben. |
%E | Komplette Laufzeit des Befehls in \[Stunden:]Minuten:Sekunden. |
%e | Komplette Laufzeit des Befehls in Sekunden. |
%I | Anzahl der Lesezugriffe auf das Dateisystem. |
%K | Durchschnittlicher Speicherverbrauch des Befehls in Kilobyte. |
%O | Anzahl der Schreibzugriffe auf das Dateisystem. |
%P | Auslastung der CPU in Prozent. |
%S | Anzahl der Sekunden, die der Befehl im Systembereich (kernel space) verbracht hat. |
%U | Anzahl der Sekunden, die der Befehl im Benutzerbereich (user space) verbracht hat. |
%x | Beendigungscode des getesteten Befehls. |
Die Ausgabe der gesammelten Daten kann mit folgenden Optionen beeinflusst werden:
time - Optionen (Ausgabe) | |
Option | Beschreibung |
-a | Fügt die Ausgabe ans Ende der Datei hinzu statt sie zu überschreiben - nur in Verbindung mit der Option '-o ' sinnvoll. |
-o DATEI | Schreibt die Ausgabe in die angegebene Datei statt auf den Bildschirm. |
-f 'FORMAT' | Bereitet die Ausgabe mit der angegebenen Formatierung auf. Wird diese Option nicht angegeben, dann dient die Shell-Variable $TIME als Vorlage. |
-p | Die Ausgabe erfolgt im POSIX-Standard 1003.2 |
-v | Sämtliche gesammelten Daten werden mit einer englischen Beschreibung zeilenweise ausgegeben. |
time - Optionen (Sonstige) | |
Option | Beschreibung |
--help | Anzeige aller möglichen Optionen des time-Befehls. |
-V | Anzeige der aktuellen Version des time-Befehls. |
Die folgende Anweisung sucht im HOME-Verzeichnis des Benutzers nach MP3-Dateien und gibt am Ende der Liste die Laufzeit aus:
/usr/bin/time find ~ -name *.mp3 -type f
Über einen Umweg lassen sich auch mit dem externen Programm eine Pipeline oder mehrere Skriptbefehle messen. Dazu startet man die zu testenden Befehle innerhalb einer eigenen Shell-Umgebung:
/usr/bin/time -f 'Laufzeit: %e Sekunden' sh -c 'find ~ -name *.mp3 -type f|sort'
Mit dem time
-Befehl können drei verschiedene Zeiten angezeigt werden:
Die system
- bzw. sys-Zeit zeigt an, wieviel Zeit innerhalb des Linux-Kernels verbraucht wurde.
Die user
-Zeit zeigt an, wieviel Zeit innerhalb der Anwendung selbst (ohne Linux-Kernel) verbraucht wurde.
Die elapsed
- bzw. real
-Zeit gibt die gesamte Laufzeit des Befehls an. Da Linux ein Multitasking-Betriebssystem ist, werden gleichzeitig auch noch andere Programme ausgeführt, die natürlich auch noch Extra-Zeit benötigen. Wenn bei Dateizugriffen auf Daten von der Festplatte gewartet wird, dann befindet sich die Anwendung in einer Warteposition und verbraucht keine CPU-Zeit - die Laufzeit verlängert sich aber natürlich durch das Warten. Daher kann dieser Wert höher sein als die Summe von system
- und user
-Zeit.
Diese Revision wurde am 28. Juli 2012 18:03 von Shakesbier erstellt.