The time command is used to determine how long a given command takes to run. It is useful for testing the performance of your scripts and commands.
Good thing is time command comes preinstalled in most Linux distributions, so you don’t have to bother with installation.
In this article, we will discuss the basics of the time command using some easy to understand examples.
Using Linux Time Command
To use time command, just execute
time with the command/program you want to run as input. Please check below example:
time wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.6.tar.gz
What will be printed as an output depends on the version of the time command you’re using:
$ time wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.6.tar.gz --2019-04-05 11:59:36-- https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.6.tar.gz Resolving cdn.kernel.org (cdn.kernel.org)... 126.96.36.199, 2a04:4e42:3::432 Connecting to cdn.kernel.org (cdn.kernel.org)|188.8.131.52|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 162621355 (155M) [application/x-gzip] Saving to: ‘linux-5.0.6.tar.gz’ linux-5.0.6.tar.gz 100%[===================>] 155,09M 2,77MB/s in 66s 2019-04-05 12:00:52 (2,34 MB/s) - ‘linux-5.0.6.tar.gz’ saved [162621355/162621355] real 1m15,289s user 0m0,708s sys 0m1,787s
- real or total or elapsed (wall clock time) is the time from start to finish of the call. It is the time from the moment you hit the
Enterkey until the moment the
wget commandis completed.
- user – amount of CPU time spent in user mode.
- system or sys – amount of CPU time spent in kernel mode.
How to Make time command writes its output to a file
To write the time command output to a file instead of the print out screen, use the
-o command line option, which expects a file name/path as input.
$ /usr/bin/time -o ~/time-output.txt wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.6.tar.gz
Now we will display wget output on stdout, while the time command output will be written to the text file.
[box type=”note” align=”” class=”” width=””]Note: We used
/usr/bin/time instead of time because the shell built-in time command doesn’t offer the
-o option. [/box]
By default, everytime you run this command, the output file will be overwritten. However, if you want, you can make sure new output is appended by using the
-a command line option.
How to make time produce detailed output
We can use the -v command line option to produce detailed output.
/usr/bin/time -v ping lintut.com
..... Command being timed: "ping lintut.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:05.74 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): 3244 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 1 Minor (reclaiming a frame) page faults: 165 Voluntary context switches: 18 Involuntary context switches: 0 Swaps: 0 File system inputs: 128 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
How to customizing time command output
There are a large number of formatting options as shown in the following list:
C – Name and command line arguments used
D – Average size of the process’s unshared data area in kilobytes
E – Elapsed time in a clock format
F – Number of page faults
I – Number of file system inputs by the process
K – Average total memory use of the process in kilobytes
M – Maximum resident set the size of the process during the lifetime in Kilobytes
O – Number of file system outputs by the process
P – Percentage of CPU that the job received
R – Number of minor or recoverable page faults
S – Total number of CPU seconds used by the system in kernel mode
U – Total number of CPU seconds used by user mode
W – Number of times the process was swapped out of main memory
X – Average amount of shared text in the process
Z – System’s page size in kilobytes
c – Number of times the process was context-switched
e – Elapsed real time used by the process in seconds
k – Number of signals delivered to the process
p – Average unshared stack size of the process in kilobytes
r – Number of socket messages received by the process
s – Number of socket messages sent by the process
t – Average resident set size of the process in kilobytes
w – Number of time the process was context-switched voluntarily
x – Exit status of the command
We can use the formatting switches as follows:
/usr/bin/time -f "\t%C [Command details],\t%K [Total memory usage],\t%k [Number of signals process received]" ping lintut.com
produced this output:
ping lintut.com [Command details], 0 [Total memory usage], 0 [Number of signals process received]
Linux Time Command Versions
There are three-time command Versions, Bash, Zsh and Gnu time command. We can use the type command to determine whether time is a binary or a built-in keyword.
# Bash time is a shell keyword # Zsh time is a reserved word # GNU time (sh) time is /usr/bin/time
The time command man page contains details related to the format command line option.
The time command is mostly used by software developers and testers. More info about this command can be accessed through the tool’s man page. In case if you find this article informative then please do share your feedback and comments.