Linux / Unix:time 命令示例
我是 Linux 和 Unix 系统的新用户。如何使用 shell 提示符在 Linux 或类 Unix 操作系统上显示命令/脚本的执行时间?
您需要使用 time 命令来显示命令或脚本执行期间经过的时间。本页通过最常见的示例解释了 Linux 和类 Unix 系统中的 time 命令。
- 即时的
- 用户时间
- 系统时间
目的
运行命令/程序或脚本并在屏幕上总结系统资源使用情况。
句法
基本语法如下:
$ time command
$ time command arg1 arg2 ... argN
$ time [options] command arg1 arg2 ... argN
我的时间命令shell是内置的还是外部命令?
time 命令也内置于 BASH/KSH/CSH/TCSH 中,但语法不同。让我们使用 type 命令或 command 命令来验证位置:
这是我看到的:
$ type -a time
$ command -V time
time is a shell keyword time is /usr/bin/time time is /bin/time
使用完整路径调用外部时间命令
bash 或 ksh shell 的用户需要使用显式路径才能运行外部 time 命令,而不是 shell 内置变体。要在 shell 中运行 time 命令,请键入:
$ /usr/bin/time -p command
$ /bin/time -p command arg1 arg2
time 命令示例
要测量运行名为 date 的程序所需的时间,请输入:
$ time date
要使用外部时间命令,请提供时间二进制的完整路径:
$ /usr/bin/time -p date
如何将时间命令输出重定向到文件?
语法如下,要将时间命令信息的记录保存在名为 output.time.txt 的文件中,请运行:
time date 2> output.time.txt /usr/bin/time -p date 2> output.time.txt
如果上述命令失败,请尝试以下操作将时间命令信息记录保存在文件中:
( time date ) 2> output.time.txt ## OR ## { time date ; } 2> output.time.txt
使用cat 命令在屏幕上显示输出:
$ cat output.time.txt
关于 GNU/Linux 时间命令的说明
GNU/Linux 用户可以使用以下语法将资源使用统计信息写入文件而不是标准错误流:
传递选项以将资源使用信息附加到输出文件而不是覆盖它。此选项仅与以下选项一起使用时有用:
$ /usr/bin/time -o output.time.txt -p date
$ cat output.time.txt
-a-o
$ /usr/bin/time -a -o output.time.txt -p sleep 2
$ cat output.time.txt
在我的 Linux 系统上使用 time 命令
$ /usr/bin/time -f 'FORMAT' -p command
用作FORMAT控制时间输出的格式字符串
格式 | 描述 |
---|---|
% | 文字“%”。 |
C | 正在计时的命令的名称和命令行参数。 |
D | 进程的非共享数据区域的平均大小(以千字节为单位)。 |
E | 该进程所用的实际时间(挂钟时间),以[小时:]分钟:秒为单位。 |
F | 进程运行时发生的重大或需要 I/O 的页面错误数。这些错误表示页面实际上已从主内存中移出。 |
I | 该进程的文件系统输入数。 |
K | 该进程的平均总内存使用量(数据+堆栈+文本),以千字节为单位。 |
M | 进程在其生命周期内的最大驻留集大小,以千字节为单位。 |
O | 该进程的文件系统输出数。 |
P | 此作业占用的 CPU 百分比。这只是用户 + 系统时间除以总运行时间。它还会打印百分号。 |
R | 次要或可恢复页面错误数。这些页面无效(因此出现错误),但尚未被其他虚拟页面认领。因此,页面中的数据仍然有效,但必须更新系统表。 |
S | 系统代表进程(在内核模式下)使用的总 CPU 秒数(以秒为单位)。 |
U | 进程直接使用的 CPU 秒总数(在用户模式下),以秒为单位。 |
W | 进程从主内存换出的次数。 |
X | 该过程中共享的文本平均量(以千字节为单位)。 |
Z | 系统的页面大小(以字节为单位)。这是每个系统的常量,但因系统而异。 |
c | 进程非自愿地进行上下文切换的次数(因为时间片已过期)。 |
e | 该进程所用的实际时间(挂钟时间),以秒为单位。 |
k | 传送到进程的信号数量。 |
p | 进程的平均非共享堆栈大小(以千字节为单位)。 |
r | 该进程接收的套接字消息数。 |
s | 进程发送的套接字消息数。 |
t | 进程的平均驻留集大小(以千字节为单位)。 |
w | 程序自愿进行上下文切换的次数,例如等待 I/O 操作完成时。 |
x | 命令的退出状态。 |
在 Linux 或 Unix 上使用带格式的时间命令
在此示例中,使用格式选项仅显示用户、系统和总时间:
示例输出:
$ /usr/bin/time -f "%E real,%U user,%S sys" sleep 2
$ /usr/bin/time -f "%E real,%U user,%S sys" /path/to/script
0:02.00 real,0.00 user,0.00 sys
查看命令使用的 CPU 百分比:
$ /usr/bin/time -f "CPU Percentage: %P" command
$ /usr/bin/time -f "CPU Percentage: %P" grep vivek /etc/passwd
$ /usr/bin/time -f "CPU Percentage: %P" find /etc/ -type f -iname "a*.conf"
CPU Percentage: 76%
了解 bash 内置时间使用的 TIMEFORMAT
参数的值TIMEFORMAT用作格式字符串,指定应如何显示以 time 保留字为前缀的管道的时序信息。该%字符引入转义序列,该序列扩展为时间值或其他信息。转义序列及其含义如下;括号表示可选部分。
价值 | 描述 |
---|---|
%% | 文字 %。 |
%[p][l]R | 已过去的时间(以秒为单位)。 |
%[p][l]U | CPU 在用户模式下花费的秒数。 |
%[p][l]S | CPU 在系统模式下花费的秒数。 |
%P | CPU 百分比,计算为 (%U + %S) / %R。 |
如何在 Linux / Unix 中使用 bash 的内置 time 命令
语法几乎相同:
$ time command
$ time ls
$ TIMEFORMAT="%P" time ls
$ TIMEFORMAT="%U" time sleep 3
$ TIMEFORMAT="%S" time sleep 3
$ TIMEFORMAT="%R" time sleep 2
总结
您了解了 time 命令,该命令报告管道执行所消耗的时间。它将在屏幕上总结系统资源使用情况。time 的语法可能会在您当地的 Unix 或 Linux 发行版上发生变化。因此,要获取内置 time 命令的帮助,请键入以下帮助命令:
对于外部 time(/bin/time 或 /usr/bin/time)命令,请运行以下 man 命令:
$ help time
# or read shell man page
$ man bash
$ man time