A volte, durante l'esecuzione di un programma, potresti voler conoscere il suo utilizzo delle risorse di sistema. Ad esempio quanto tempo ha trascorso il processo in modalità kernel e modalità utente e altre informazioni.
Per fortuna, esiste uno strumento chiamato tempo - che è costruito appositamente per questo scopo. In questo articolo, discuteremo le basi del comando 'time' usando alcuni esempi di facile comprensione.
Ma prima di farlo, vale la pena ricordare che tutti gli esempi in questo tutorial sono stati testati su una macchina Ubuntu 18.04 LTS.
Comando dell'ora Linux
Il comando time in Linux consente di eseguire programmi e riassumere l'utilizzo delle risorse di sistema. Di seguito è riportata la sua sintassi:
time [OPTIONS] COMMAND [ARGS]
Ecco come lo descrive la pagina man dello strumento:
time run the program COMMAND with any given arguments ARG.... When COMMAND finishes, time displays
information about resources used by COMMAND (on the standard error output, by default).
If COMMAND exits with non-zero status, time displays a warning message and the exit status.
time determines which information to display about the resources used by the COMMAND from the
string FORMAT. If no format is specified on the command line, but the TIME environment variable
is set, its value is used as the format. Otherwise, a default format built into time is used.
Options to time must appear on the command line before COMMAND. Anything on the command line after
COMMAND is passed as arguments to COMMAND.
Di seguito sono riportati alcuni esempi in stile domande e risposte che dovrebbero darti un'idea migliore di come funziona il comando time.
Q1. Come usare il comando del tempo?
L'utilizzo di base è semplice:esegui semplicemente 'time' con il comando/programma che desideri eseguire come input.
Ad esempio, ho usato il comando time nel modo seguente:
time ping howtoforge.com
Ed ecco l'output:
PING howtoforge.com (104.24.0.68) 56(84) bytes of data.
64 bytes from 104.24.0.68 (104.24.0.68): icmp_seq=1 ttl=59 time=93.8 ms
64 bytes from 104.24.0.68 (104.24.0.68): icmp_seq=2 ttl=59 time=91.5 ms
64 bytes from 104.24.0.68 (104.24.0.68): icmp_seq=3 ttl=59 time=93.1 ms
64 bytes from 104.24.0.68 (104.24.0.68): icmp_seq=4 ttl=59 time=102 ms
^C
--- howtoforge.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 91.510/95.249/102.490/4.267 ms
real 0m3.472s
user 0m0.000s
sys 0m0.004s
Le ultime tre righe nell'output vengono aggiunte dal comando time. Mentre 'real' indica il tempo impiegato dal comando 'ping' dall'esecuzione fino alla conclusione, 'user' e 'sys' sono il tempo impiegato dal 'ping' rispettivamente dello spazio utente e dello spazio del kernel. Dettagli su queste tre volte sono disponibili qui.
Q2. Come fare in modo che 'time' scriva il suo output su un file?
Se vuoi che il comando time scriva il suo output su un file invece che sul terminale, usa l'opzione della riga di comando -o, che prevede un nome file/percorso come input.
Ad esempio:
/usr/bin/time -o /home/himanshu/time-output.txt ping howtoforge.com
Questo comando visualizzerà l'output di ping su stdout, mentre l'output del comando 'time' verrà scritto nel file di testo.
NOTA :Abbiamo usato /usr/bin/time invece di 'time' perché il comando time integrato nella shell non offre l'opzione -o.
Per impostazione predefinita, ogni volta che esegui questo comando, il file di output verrà sovrascritto. Tuttavia, se lo desideri, puoi assicurarti che il nuovo output venga aggiunto utilizzando l'opzione -a della riga di comando.
T3. Come fare in modo che il tempo produca risultati dettagliati?
Questo può essere fatto usando l'opzione della riga di comando -v. Ad esempio, quando ho utilizzato questa opzione durante l'esecuzione di 'time' con un comando 'ping', nell'output del comando 'time' sono stati prodotti i seguenti dettagli:
Command being timed: "ping howtoforge.com"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:11.77
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3064
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 158
Voluntary context switches: 14
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
Quindi puoi vedere che il comando time produce molti altri dettagli in questa modalità.
Q4. Come personalizzare l'output del comando orario?
Il comando time offre anche un'opzione della riga di comando "formattazione" che ti consente di personalizzare l'output di questo strumento. Fornisce una serie di identificatori di risorse che puoi utilizzare per recuperare qualsiasi tipo di informazione supportata dal comando 'time' (vedi sezione precedente).
Ad esempio, il comando time nella seguente esecuzione:
/usr/bin/time -f "\t%C [Command details],\t%K [Total memory usage],\t%k [Number of signals process received]" ping howtoforge.com
prodotto questo output:
ping howtoforge.com [Command details], 0 [Total memory usage], 0 [Number of signals process received]
La pagina man del comando time contiene dettagli relativi all'opzione della riga di comando di formattazione.
Conclusione
Il comando time è utilizzato principalmente da sviluppatori e tester di software. Tuttavia, non c'è nulla di male nel saperlo anche se non sei uno di quelli, perché non sai mai quando potresti averne bisogno. Ulteriori informazioni su questo comando sono accessibili tramite la pagina man dello strumento.