time 命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(修改系统时间是 date 命令干的事情)。
time [options] COMMAND [arguments]
参数:
-o 或 --output=FILE:设定结果输出文件。这个选项会将 time 的输出写入所指定的文件中。如果文件已经存在,系统将覆写其内容。
-a 或 --append:配合 -o 使用,会将结果追加到文件的末端,而不会覆盖掉原来的内容。
-f FORMAT 或 --format=FORMAT:以 FORMAT 字串设定显示方式。当这个选项没有被设定的时候,会用系统预设的格式。不过你可以用环境变量 time 来设定这个格式,如此一来就不必每次登入系统都要设定一次。
可用的 FORMAT 格式:
%E real时间,显示格式为[小时:]分钟:秒
%U user时间
%S sys时间
%C 进行计时的命令名称和命令行参数
%D 进程非共享数据区域,以KB为单位。
%x 命令退出状态
%k 进程接收到的信号数量
%W 进程被交换出主存的次数
%Z 系统的页面大小,这是一个系统常量,不用系统中常量值也不同
%P 进程所获取的CPU时间百分百,这个值等于user+system时间除以总共的运行时间
%K 进程的平均总内存使用量(data+stack+text),单位是KB
%w 进程主动进行上下文切换的次数,例如等待I/O操作完成
%c 进程被迫进行上下文切换的次数(由于时间片到期)
特别注意
shell 内建也有一个 time 命令,当直接运行 time 命令的时候是调用的系统内建 time 命令;因为系统内建 time 命令功能有限,所以需要 time 命令其他功能时,需要执行二进制文件 /usr/bin/time。
(1)使用 time 统计 uname -a 指令执行耗时,如下:
hxstrive@ubuntu:~/Desktop$ time uname -a Linux ubuntu 5.11.0-34-generic #36~20.04.1-Ubuntu SMP Fri Aug 27 08:06:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux real 0m0.002s user 0m0.001s sys 0m0.000s
上面示例中,执行命令“time uname -a”(见第1行)。系统先执行命令“uname -a”,第2行为命令“uname -a”的执行结果。
后续的为执行“uname -a”命令的时间统计结果,其中:
real 为实际时间
user 为用户CPU时间
sys 为系统CPU时间
以上三种时间的显示格式均为MMmNN[.FFF]s。
(2)使用-o选项将执行时间写入到文件中,如下:
hxstrive@ubuntu:~/Desktop$ /usr/bin/time -o ./time.txt uname -a Linux ubuntu 5.11.0-38-generic #42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux hxstrive@ubuntu:~/Desktop$ ll total 20 drwxr-xr-x 3 hxstrive hxstrive 4096 10月 23 20:56 ./ drwxr-xr-x 20 hxstrive hxstrive 4096 10月 21 13:32 ../ drwxrwxr-x 2 hxstrive hxstrive 4096 10月 21 13:33 bak/ -rw-rw-r-- 1 hxstrive hxstrive 130 10月 23 20:56 time.txt hxstrive@ubuntu:~/Desktop$ cat time.txt 0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 2156maxresident)k 0inputs+0outputs (0major+81minor)pagefaults 0swaps
(3)使用 -a 选项追加信息到 time.txt 文件,如下:
hxstrive@ubuntu:~/Desktop$ /usr/bin/time -a -o ./time.txt ls bak time.txt hxstrive@ubuntu:~/Desktop$ cat time.txt 0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 2156maxresident)k 0inputs+0outputs (0major+81minor)pagefaults 0swaps 0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 2636maxresident)k 0inputs+0outputs (0major+118minor)pagefaults 0swaps
(4)使用 -f 选项格式化时间输出,如下:
hxstrive@ubuntu:~/Desktop$ /usr/bin/time -f "time: %U" ls bak time.txt time: 0.00