A veces, cuando está ejecutando un programa, es posible que desee conocer el uso de recursos del sistema. Por ejemplo, cuánto tiempo pasó el proceso en modo kernel y modo usuario, y otra información.
Afortunadamente, existe una herramienta llamada time - que está construido específicamente para este propósito. En este artículo, discutiremos los conceptos básicos del comando 'tiempo' usando algunos ejemplos fáciles de entender.
Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos de este tutorial se probaron en una máquina con Ubuntu 18.04 LTS.
Comando de tiempo de Linux
El comando de tiempo en Linux le permite ejecutar programas y resumir su uso de recursos del sistema. La siguiente es su sintaxis:
time [OPTIONS] COMMAND [ARGS]
Así es como la página de manual de la herramienta lo describe:
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.
Los siguientes son algunos ejemplos de preguntas y respuestas que deberían darle una mejor idea de cómo funciona el comando de tiempo.
P1. ¿Cómo usar el comando de tiempo?
El uso básico es simple:simplemente ejecute 'tiempo' con el comando/programa que desea ejecutar como entrada.
Por ejemplo, usé el comando de tiempo de la siguiente manera:
time ping howtoforge.com
Y aquí está el resultado:
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
Las últimas tres líneas en la salida son agregadas por el comando de tiempo. Mientras que 'real' significa el tiempo de reloj de pared que tomó el comando 'ping' desde la ejecución hasta la terminación, 'usuario' y 'sys' son el tiempo que tomó 'ping' el espacio del usuario y el espacio del núcleo, respectivamente. Se puede acceder a detalles sobre estos tres tiempos aquí.
P2. ¿Cómo hacer que 'tiempo' escriba su salida en un archivo?
Si desea que el comando de tiempo escriba su salida en un archivo en lugar de en el terminal, use la opción de línea de comando -o, que espera un nombre de archivo/ruta como entrada.
Por ejemplo:
/usr/bin/time -o /home/himanshu/time-output.txt ping howtoforge.com
Este comando mostrará la salida de ping en la salida estándar, mientras que la salida del comando 'tiempo' se escribirá en el archivo de texto.
NOTA :Usamos /usr/bin/time en lugar de 'time' porque el comando de tiempo integrado de shell no ofrece la opción -o.
De forma predeterminada, cada vez que ejecute este comando, se sobrescribirá el archivo de salida. Sin embargo, si lo desea, puede asegurarse de que se agregue una nueva salida utilizando la opción de línea de comando -a.
Q3. ¿Cómo hacer que el tiempo produzca resultados detallados?
Esto se puede hacer usando la opción de línea de comando -v. Por ejemplo, cuando usé esta opción mientras ejecutaba 'time' con un comando 'ping', se generaron los siguientes detalles en la salida del comando 'time':
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
Entonces puede ver que el comando de tiempo produce muchos otros detalles en este modo.
P4. ¿Cómo personalizar la salida del comando de tiempo?
El comando de tiempo también ofrece una opción de línea de comando de 'formato' que le permite personalizar la salida de esta herramienta. Proporciona un conjunto de especificadores de recursos que puede usar para obtener cualquier tipo de información admitida por el comando 'tiempo' (consulte la sección anterior).
Por ejemplo, el comando de tiempo en la siguiente ejecución:
/usr/bin/time -f "\t%C [Command details],\t%K [Total memory usage],\t%k [Number of signals process received]" ping howtoforge.com
produjo esta salida:
ping howtoforge.com [Command details], 0 [Total memory usage], 0 [Number of signals process received]
La página del comando man de tiempo contiene detalles relacionados con la opción de línea de comando de formato.
Conclusión
El comando de tiempo es utilizado principalmente por desarrolladores y probadores de software. Sin embargo, no hay nada de malo en saberlo, incluso si no eres uno de esos, porque nunca sabes cuándo puedes necesitarlo. Se puede acceder a más información sobre este comando a través de la página de manual de la herramienta.