Zahlungsmethoden Abuse

Uhrzeit-Befehl in Linux

18.03.2022, 01:39

Wenn Sie mit dem Linux-Terminal arbeiten, müssen Sie manchmal die Ausführungszeit bestimmter Befehle wissen, um beispielsweise Probleme aufzuspüren. Für diesen Zweck gibt es ein Dienstprogramm namens time. Wir werden Ihnen erklären, wie der Linux-Befehl time funktioniert und wie seine Syntax aussieht. Dann gehen wir zur Beschreibung der verfügbaren Optionen über. Und am Ende werden wir einige beliebte Anwendungsszenarien erwähnen.

Syntax und Optionen

Das Dienstprogramm führt einen benutzerdefinierten Befehl aus und zeigt dann Informationen über dessen Ausführungszeit an. Seine Syntax ist recht einfach. Zuerst müssen Sie die Optionen für die Zeit angeben, dann den auszuführenden Befehl und schließlich die Argumente dafür:

$ time [options] command_to_execute [arguments]

Betrachten wir die Liste der verfügbaren Optionen:

  • -o, --output - speichert die Daten in der ausgewählten Datei anstelle der Standardausgabe im Terminal. In diesem Fall werden die alten Daten in der Datei überschrieben.
  • -a, --append - fügt neue Informationen zur Datei hinzu, anstatt die alten zu überschreiben. Diese Option ist nur in Kombination mit -o sinnvoll.
  • -f, --format - wählt ein bestimmtes Ausgabeformat. Details zur Formatierung werden im nächsten Abschnitt dieses Artikels beschrieben.
  • -p, --profitably - verwendet ein Datenausgabeformat, das dem Standard POSIX 1003.2 entspricht.
  • -v, --verbose - gibt detaillierte Informationen über die Ausführung des Programms aus.
  • -V, --version - gibt die Version des Zeitprogramms aus.

Diese Liste enthält nur die grundlegenden Optionen. Detaillierte Informationen können Sie mit dem Befehl erhalten:

$ man time

Optionen für die Ausgabeformatierung

Standardmäßig kann time Informationen in einer Form ausgeben, die für das Lesen unangenehm ist,

Es ist daher wünschenswert, Optionen für die Ausgabeformatierung festzulegen, die jetzt besprochen werden sollen. Es gibt insgesamt drei davon. Nehmen wir den Befehl apt-get update als Beispiel.

Die Option -v wird verwendet, um detaillierte Informationen auszugeben:

$ sudo time -v apt-get update

Die Option -p wird benötigt, um Daten in einem POSIX 1003.2-konformen Format auszugeben:

$ sudo time -p apt-get update

Die Formatierungsdatenzeile enthält in der Regel Ressourcenspezifikationen und einfachen Text. Das %-Zeichen zeigt an, dass das darauf folgende Zeichen als Ressourcenspezifizierer behandelt werden soll.

Das -Zeichen wird zur Angabe des Begrenzungszeichens verwendet. Es sind drei Optionen verfügbar: t - Tabulator, n - neue Zeile, \\ - Backslash. Wenn Sie ein anderes Zeichen nach angeben, zeigt das Terminal ein Fragezeichen (?) an, was auf einen Eingabefehler hinweist.

Der Rest des Textes in der Formatzeichenkette wird vollständig in das Ausgabefeld kopiert. In diesem Fall beginnt time immer mit der Ausgabe von Daten in einer neuen Zeile nach den Informationen über die Ausführung des Befehls selbst.

Betrachten wir die verfügbaren Ressourcenbezeichner:

  • % - literales %, d.h. um ein Prozentzeichen auszugeben, sollten Sie %% im Befehl angeben.
  • C - Befehlsname und verwendete Argumente.
  • D - durchschnittliche Größe des ungeteilten Datenbereichs. Sie wird in Kilobytes angezeigt.
  • E - tatsächliche Zeit der Befehlsausführung im üblichen Stundenformat. Sie wird als [Stunden:]<Minuten:Sekunden angezeigt.
  • N - Anzahl der Haupt- oder E/A-Fehler, die während der Prozessausführung aufgetreten sind.
  • I - Anzahl der Dateisystemzugriffe.
  • K - Durchschnittswert des für Code(Text), initialisierte Daten(Daten) undStack (Stack) verwendeten Speichers. Er wird in Kilobytes angezeigt.
  • M - maximale Größe der residenten Menge während der Prozessausführung in Kilobyte.
  • O - Anzahl der Beendigungen des Dateisystems.
  • P - Prozentuale Auslastung der CPU (Central Processing Unit).
  • R - Anzahl der kleinen Fehler.
  • S - Zeit in Sekunden, in der die CPU vom System im Auftrag des Prozesses im Supervisor-Modus(Kernel-Modus) verwendet wurde.
  • U - Zeit in Sekunden, in der die CPU durch den Prozess direkt imBenutzermodus verwendet wurde.
  • W - wie oft der Prozess aus dem RAM entladen wurde.
  • Z - Größe der Systemseiten. Dieser Wert ist eine Konstante, variiert jedoch von System zu System.
  • c - Anzahl der unfreiwilligen Kontextwechsel während der Prozessausführung.
  • e - tatsächliche Zeit der Befehlsausführung im üblichen Stundenformat. Sie wird in Sekunden angezeigt.
  • k - Anzahl der Signale, die den Prozess erreicht haben.
  • p - durchschnittliche Größe des nicht gemeinsam genutzten Stacks des Prozesses, in Kilobyte.
  • r - Anzahl der empfangenen Socket-Nachrichten.
  • s - Anzahl der gesendeten Socket-Nachrichten.
  • t - durchschnittliche Größe des Resident Set des Prozesses, in Kilobytes.
  • w - Anzahl der freiwilligen Kontextwechsel während der Prozessausführung
  • x - Rückgabecode für den Befehl.

Dies waren alle Ressourcenspezifizierer, die bei der Wahl der Formatierung für die Zeit verwendet wurden. Kommen wir nun zu den Szenarien für die Verwendung des Befehls.

LINUX-Befehlsausführungszeit

Betrachten wir drei grundlegende Beispiele, die recht häufig verwendet werden: Ausgabe auf dem Terminal, Ausgabe in eine separate Datei und Ausgabe mit Formatierung.

Ausgabe der Ausführungszeit auf dem Terminal

Als Beispiel nehmen wir den Befehl sleep, der für eine bestimmte Zeit pausiert. Das Beispiel ist sehr anschaulich, da die Pausenzeit zeitlich mit der Ausführungszeit des Befehls übereinstimmt:

$ time sleep 3

Die Zeit wird sofort in drei Spalten geschrieben. Schauen wir uns jede einzelne davon an:

real - die Gesamtzeit vom Beginn der Prozessausführung bis zu ihrem Abschluss.

user - die Zeit, in der der Prozess imBenutzermodus ausgeführt wurde.

sys - Zeit, in der der Prozess im Supervisor-Modus(Kernel-Modus) lief.

Das nächste nützliche Szenario ist die Ausgabe der Zeit, die benötigt wird, um einen Webseiten-Header über das Dienstprogramm curl zu laden. Nehmen wir unsere Website als Beispiel:

$ time curl -I https://losst.ru

Wir sollten eine Situation erwähnen, in der die Ausführung des Befehls das Terminalfenster in einen anderen Modus versetzt, z. B. wenn Sie den nano-Editor ausführen, um die Datei /home/root-user/script.txt zu ändern:

$ time nano /home/root-user/scripts/main_script.txt

Nachdem der Editor beendet ist, sehen Sie die Gesamtzeit, die Sie an der Datei gearbeitet haben.

Jetzt wissen Sie, wie Sie die Ausführungszeit eines Linux-Befehls sehen können.

Ausgabe der Datei

Die Informationen über die Ergebnisse des Befehls time können mit der Option-o in einer separaten Datei gespeichert werden. In diesem Fall werden sie nicht im Terminalfenster angezeigt. Nehmen wir das Beispiel des Extrahierens des Inhalts des Archivs ~/data/data.tar.gz mit dem Dienstprogramm tar. Wir speichern die Informationen über die Ausführungszeit in einer neuen Datei ~/data/data_data_time.txt. Wir fügen dem Befehl auch die Option-v hinzu, um detaillierte Informationen zu erhalten:

$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Die Datei wird den folgenden Inhalt haben.

Wenn Sie die Option -o verwenden, denken Sie daran, dass damit die alten Informationen in der Ausgabedatei mit den neuen Informationen überschrieben werden. Dies gilt für die Erstellung neuer Dateien, ist aber nicht für die Protokollierung geeignet. Mit der optionalen Option -a wird das Überschreiben des Inhalts durch das Hinzufügen neuer Informationen ersetzt:

$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Ausgabe mit Formatierung

Die ursprüngliche Option, Daten zu formatieren, ist nicht in allen Fällen geeignet. Als Beispiel nehmen wir den zuvor verwendeten Befehl zum Extrahieren eines Archivs, aber wir speichern die Daten nicht in einer Datei. Bei der Ausführung des Befehls sind wir an Folgendem interessiert

  • Informationen über den Befehl selbst und die gegebenen Optionen - dieser Spezifizierer%C.
  • CPU-Last - Kennung%P.
  • Gesamtausführungszeit in Sekunden - Spezifizierer%e.

Zur besseren Übersicht wird jedes Element in einer separaten Zeile mit dem Trennzeichen n angezeigt. Gleichzeitig werden sie alle in einer verständlichen Weise signiert.

So sieht die endgültige Version des Befehls aus:

sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data

Der gesamte Text mit Ausnahme der Zeichen nach % wird vollständig im Terminal angezeigt. Dies ist eine bequeme Art der Kennzeichnung von