A volte, quando si lavora con il terminale Linux, è necessario conoscere l'ora di esecuzione di alcuni comandi, ad esempio per individuare i problemi. A questo scopo esiste un'utilità chiamata time
. Vi spiegheremo come funziona il comando time di Linux
e qual è la sua sintassi. Poi passeremo alla descrizione delle opzioni disponibili. E alla fine menzioneremo alcuni scenari d'uso popolari.
L'utility esegue un comando definito dall'utente e poi visualizza informazioni sul suo tempo di esecuzione. La sua sintassi è piuttosto comoda. Per prima cosa è necessario specificare le opzioni per il tempo
, poi il comando da eseguire e infine gli argomenti:
$ time [options] command_to_execute [arguments]
Consideriamo l'elenco delle opzioni disponibili:
-o
, --output
- salva i dati nel file selezionato invece che nell'output standard del terminale. In questo caso, i vecchi dati del file verranno sovrascritti.-a
, --append
- aggiunge nuove informazioni al file invece di sovrascrivere quelle vecchie. Questa opzione è utile solo in combinazione con -o
.-f
, --format
- seleziona un formato di output specifico. I dettagli sulla formattazione sono descritti nella prossima sezione di questo articolo.-p
, --profitably
- usa un formato di output dei dati conforme allo standard POSIX 1003.2.-v
, --verbose
- produce informazioni dettagliate sull'esecuzione del programma.-V
, --version
- visualizza la versione dell'utilità temporale
.Questo elenco contiene solo le opzioni di base. È possibile ottenere informazioni dettagliate con il comando:
$ man time
Per impostazione predefinita , time
può produrre informazioni in una forma che non è comoda da leggere,
È auspicabile impostare le opzioni di formattazione dell'output, che verranno discusse ora. In totale ce ne sono tre. Prendiamo come esempio il comando apt-get update
.
L'opzione -v
viene utilizzata per visualizzare informazioni dettagliate:
$ sudo time -v apt-get update
L'opzione -p
è necessaria per produrre i dati in un formato conforme a POSIX 1003.2:
$ sudo time -p apt-get update
La riga dei dati di formattazione include tipicamente specificatori di risorse e testo semplice. Il segno %
indica che il carattere che lo segue deve essere trattato come uno specificatore di risorse.
Il segno viene usato per specificare il carattere delimitatore. Sono disponibili tre opzioni:
t
- tabulazione, n
- nuova riga, \
- backslash. Se si specifica un altro carattere dopo , il terminale mostrerà un punto interrogativo (
?
), che indica un errore di inserimento.
Il resto del testo della stringa di formato viene completamente copiato nel campo di uscita. In questo caso, Time
inizia sempre l'output dei dati da una nuova riga dopo le informazioni sull'esecuzione del comando stesso.
Consideriamo gli specificatori di risorsa disponibili:
%
- letterale %. Cioè, per emettere un segno di percentuale si deve specificare %% nel comando.C
- nome del comando e argomenti utilizzati.D
- dimensione media dell'area dati non suddivisa. Viene visualizzata in kilobyte.E
- ora reale dell'esecuzione del comando nel consueto formato orario. Viene visualizzato come [Ore:]<imuti:secondi
.N
- numero di errori principali o di I/O verificatisi durante l'esecuzione del processo.I
- numero di accessi al file system.K
- valore medio della memoria utilizzata per il codice(testo
), i dati inizializzati(dati
) e lostack (pila
). Viene visualizzato in kilobyte.M
- dimensione massima del set residente durante l'esecuzione del processo, in kilobyte.O
- numero di uscite dal file system.P
- percentuale di carico della CPU (unità centrale di elaborazione).R
- numero di errori minori.S
- tempo in secondi durante il quale la CPU è stata utilizzata dal sistema per conto del processo in modalità supervisore(
modalitàkernel
).U
- tempo in secondi durante il quale la CPU è stata utilizzata dal processo direttamente in modalitàutente
.W
- quante volte il processo è stato scaricato dalla RAM.Z
- dimensione della pagina di sistema. Questo valore è una costante, ma varia da un sistema all'altro.c
- numero di cambi di contesto involontari durante l'esecuzione del processo.e
- tempo reale dell'esecuzione del comando nel solito formato orario. Viene visualizzato in secondi.k
- numero di segnali che hanno raggiunto il processo.p
- dimensione media dello stack non condiviso del processo, in kilobyte.r
- numero di messaggi socket ricevuti.s
- numero di messaggi socket inviati.t
- dimensione media del set residente del processo, in kilobyte.w
- numero di cambi di contesto volontari durante l'esecuzione del processo.x
- codice di ritorno del comando.Questi sono tutti gli specificatori di risorse utilizzati nella scelta della formattazione del tempo
. Passiamo ora agli scenari di utilizzo del comando.
Esaminiamo tre esempi di base che vengono comunemente utilizzati: l'output nel terminale, l'output in un file separato e l'output con formattazione.
Prendiamo come esempio il comando sleep, che mette in pausa per un tempo specifico. Sarà un esempio molto chiaro, perché il tempo di pausa coinciderà con il tempo
di esecuzione del comando:
$ time sleep 3
Il tempo è scritto immediatamente in tre colonne. Esaminiamo ciascuna di esse:
reale
- il tempo totale dall'inizio dell'esecuzione del processo al suo completamento.
user
- il tempo durante il quale il processo è stato eseguito in modalitàutente
.
sys
- tempo durante il quale il processo è stato coinvolto nella modalità supervisore(
modalitàkernel
).
Il prossimo scenario utile è quello di visualizzare il tempo necessario per caricare l'intestazione di una pagina web tramite l'utilità curl
. Prendiamo come esempio il nostro sito web:
$ time curl -I https://losst.ru
È opportuno menzionare una situazione in cui l'esecuzione del comando porta la finestra del terminale in una modalità diversa, come quando si esegue l'editor nano per modificare il file /home/root-user/script.txt
:
$ time nano /home/root-user/scripts/main_script.txt
Al termine dell'editor, verrà visualizzato il tempo totale di lavoro sul file.
Ora sapete come vedere il tempo di esecuzione di un comando Linux.
Le informazioni relative ai risultati del comando time possono essere salvate in un file separato utilizzando l'opzione-o
. In questo caso, non saranno visualizzate nella finestra del terminale. Facciamo l'esempio di estrarre il contenuto dell'archivio ~/data/data.tar.gz
utilizzando l'utilità tar
. Salviamo le informazioni sul tempo di esecuzione in un nuovo file ~/data/data_data_time.txt.
Aggiungeremo anche l'opzione-v
al comando per ottenere informazioni dettagliate:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Il file avrà il seguente contenuto.
Se si utilizza l'opzione -o
, si ricorda che essa sovrascrive le vecchie informazioni nel file di output con quelle nuove. Questo è applicabile quando si creano nuovi file, ma non è adatto per la registrazione. Con l'opzione opzionale -a, la sovrascrittura del contenuto viene sostituita dall'aggiunta di nuove informazioni:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
L'opzione originale di formattazione dei dati non è adatta in tutti i casi. A titolo di esempio, prendiamo il comando precedentemente utilizzato per l'estrazione di un archivio, ma senza salvare i dati in un file. Quando lo eseguiamo, siamo interessati a:
specificatore%C
. specificatore%P
. specificatore%e
.Per una percezione più confortevole, ogni elemento verrà visualizzato in una riga separata utilizzando il separatore n
. Allo stesso tempo, saranno tutti firmati in modo comprensibile.
Ecco come appare la versione finale del comando:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
Tutto il testo, tranne i caratteri dopo %
, viene visualizzato completamente nel terminale. Questo è un modo comodo per contrassegnare