ubuntuusers.de

time

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png 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.

Installation

Der externe Befehl sollte standardmäßig bereits installiert sein, kann aber mit dem folgenden Paket bei Bedarf nachinstalliert [1] werden:

  • time

Paketliste zum Kopieren:

sudo apt-get install time 

Oder mit apturl die Pakete installieren. Link: apt://time

Bedienung (Bash-Schlüsselwort)

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.

Optionen

Das Bash-Schlüsselwort kennt eine einzige Option für eine modifizierte Anzeige der Ergebnisse:

time - Optionen
OptionBeschreibung
-p Ausgabe der Laufzeit in einem Format kompatibel zu Posix.

Beispiele

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 

Bedienung (externer Befehl)

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.

Optionen

Der externe Befehl time kennt viele Optionen, mit denen die anzuzeigenden Daten beeinflusst werden können:

Optionen (Formatierung der Ausgabe)

Hier sind nicht alle Formatierungen aufgeführt. Die komplette Übersicht kann man in den Manpages zu time finden.

time - Formatierungen
FormatBeschreibung
\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.

Optionen (Ausgabe)

Die Ausgabe der gesammelten Daten kann mit folgenden Optionen beeinflusst werden:

time - Optionen (Ausgabe)
OptionBeschreibung
-aFügt die Ausgabe ans Ende der Datei hinzu statt sie zu überschreiben - nur in Verbindung mit der Option '-o' sinnvoll.
-o DATEISchreibt 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.
-pDie Ausgabe erfolgt im POSIX-Standard 1003.2
-vSämtliche gesammelten Daten werden mit einer englischen Beschreibung zeilenweise ausgegeben.

sonstige Optionen

time - Optionen (Sonstige)
OptionBeschreibung
--help Anzeige aller möglichen Optionen des time-Befehls.
-V Anzeige der aktuellen Version des time-Befehls.

Beispiele

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' 

Erläuterung zu den ermittelten Zeiten

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.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell, System