Tutorial de comandos temporales de Linux para principiantes (con ejemplos)
A veces, cuando estás ejecutando un programa, puede que quieras saber el uso que hace de los recursos del sistema. Como cuánto tiempo pasó el proceso en modo kernel y en modo usuario, y otra información.
Afortunadamente, existe una herramienta -denominada tiempo- creada específicamente para este propósito. En este artículo, hablaremos de los fundamentos del comando «tiempo» utilizando algunos ejemplos fáciles de entender.
Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos de este tutorial se han probado en una máquina Ubuntu 18.04 LTS.
El comando tiempo de Linux
El comando tiempo en Linux te permite ejecutar programas y resumir su uso de recursos del sistema. A continuación se muestra su sintaxis:
time [OPTIONS] COMMAND [ARGS]
Así es como lo describe la página man de la herramienta:
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.
A continuación encontrarás algunos ejemplos al estilo de las preguntas y respuestas que te darán una mejor idea de cómo funciona el comando tiempo.
Q1. ¿Cómo se utiliza el comando tiempo?
El uso básico es sencillo: sólo tienes que ejecutar «time» con el comando/programa que quieras ejecutar como entrada.
Por ejemplo, yo utilicé el comando tiempo de la siguiente manera:
time ping howtoforge.com
Y aquí está la salida:
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 tres últimas líneas de la salida son añadidas por el comando tiempo. Mientras que ‘real’ significa el tiempo de reloj de pared que tardó el comando ‘ping’ desde su ejecución hasta su finalización, ‘user’ y ‘sys’ son el tiempo que tardó ‘ping’ en el espacio de usuario y en el espacio del núcleo, respectivamente. Puedes acceder a información detallada sobre estos tres tiempos aquí.
Q2. ¿Cómo hacer que ‘time’ escriba su salida en un archivo?
Si quieres que el comando tiempo escriba su salida en un archivo en lugar de en el terminal, utiliza la opción de línea de comandos -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 stdout, mientras que la salida del comando ‘tiempo’ se escribirá en el archivo de texto.
NOTA: Hemos utilizado /usr/bin/time en lugar de ‘time’ porque el comando time integrado en el shell no ofrece la opción -o.
Por defecto, cada vez que ejecutes este comando, se sobrescribirá el archivo de salida. Sin embargo, si quieres, puedes asegurarte de que se añade una nueva salida utilizando la opción de línea de comandos -a.
Q3. ¿Cómo hacer que time produzca una salida detallada?
Puedes hacerlo utilizando la opción -v de la línea de comandos. Por ejemplo, cuando utilicé esta opción al ejecutar ‘time’ con un comando ‘ping’, se produjeron 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
Así que puedes ver que el comando «tiempo» produce muchos otros detalles en este modo.
Q4. ¿Cómo personalizar la salida del comando tiempo?
El comando tiempo también ofrece una opción de línea de comandos ‘formato’ que te permite personalizar la salida de esta herramienta. Proporciona un conjunto de especificadores de recursos que puedes utilizar para obtener cualquier tipo de información admitida por el comando ‘tiempo’ (ver sección anterior).
Por ejemplo, el comando «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 manual del comando tiempo contiene detalles relacionados con la opción de línea de comandos formato.
Conclusión
El comando «tiempo» lo utilizan sobre todo los desarrolladores y probadores de software. Sin embargo, no está de más que lo conozcas aunque no seas uno de ellos, pues nunca se sabe cuándo puedes necesitarlo. Puedes acceder a más información sobre este comando a través de la página man de la herramienta.