自学内容网 自学内容网

Linux系统之time命令的基本使用

在这里插入图片描述

一、time命令介绍

统计给定命令所花费的总时间:time 命令在 Unix 和类 Unix 系统(如 Linux)中被用来测量一个命令或程序的执行时间。它能够报告用户 CPU 时间、系统 CPU 时间以及实际经过的时间(也称为墙钟时间)。

二、time版本介绍

2.1 time版本简介

在大多数 Unix 和类 Unix 系统中,time 命令有两个版本:一个是 shell 内置的 time,另一个是 GNU time,通常位于 /usr/bin/time。这两个版本有一些关键的区别:

  • Shell 内置的 time

位置:这个 time 是 shell 的一部分,不是独立的可执行文件。
选项:它支持较少的选项,通常只支持基本的时间测量功能。
输出:它的输出格式比较固定,一般只能显示 real, user, sys 时间。
  • GNU time
位置:这个 time 通常是 /usr/bin/time,是一个独立的可执行文件。
选项:它支持更多的选项,比如 -o(将输出重定向到文件)、-a(追加到文件)、-f(自定义输出格式)等。

2.2 检查 time 的类型

可以使用 type -a time 命令来查看系统中所有可用的 time 版本:

type -a time

如果返回的结果中:

time is a shell keyword #shell 内置的 time
time is /usr/bin/time #第二行表示 GNU time。

2.3 安装GNU time

如果 GNU time 没有安装,你可以通过包管理器来安装它。在 openEuler 中,通常使用 dnf 包管理器:

dnf install time

在这里插入图片描述

三、time命令的使用帮助

3.1 Shell内置time用法

  • 基本语法
time [选项] 命令(指令:指定需要运行的额指令及其参数)

3.2 GNU time用法

使用 /usr/bin/time --help查询 GNU time用法

[root@openEuler-test ~]# /usr/bin/time --help
Usage: /usr/bin/time [OPTIONS] COMMAND [ARG]...
Run COMMAND, then print system resource usage.

  -a, --append              with -o FILE, append instead of overwriting
  -f, --format=FORMAT       use the specified FORMAT instead of the default
  -o, --output=FILE         write to FILE instead of STDERR
  -p, --portability         print POSIX standard 1003.2 conformant string:
                              real %%e
                              user %%U
                              sys %%S
  -q, --quiet               do not print information about abnormal program
                            termination (non-zero exit codes or signals)
  -v, --verbose             print all resource usage information instead of
                            the default format
  -h,  --help               display this help and exit
  -V,  --version            output version information and exit

Commonly usaged format sequences for -f/--format:
(see documentation for full list)
  %%   a literal '%'
  %C   command line and arguments
  %c   involuntary context switches
  %E   elapsed real time (wall clock) in [hour:]min:sec
  %e   elapsed real time (wall clock) in seconds
  %F   major page faults
  %M   maximum resident set size in KB
  %P   percent of CPU this job got
  %R   minor page faults
  %S   system (kernel) time in seconds
  %U   user time in seconds
  %w   voluntary context switches
  %x   exit status of command

选项解释·:

选项描述
-a, --append-o FILE 一起使用时,追加到文件而不是覆盖。
-f, --format=FORMAT使用指定的 FORMAT 而不是默认格式。
-o, --output=FILE将输出写入指定的文件而不是标准错误(STDERR)。
-p, --portability打印符合 POSIX 标准 1003.2 的字符串:
real %%e
user %%U
sys %%S
-q, --quiet不打印关于异常程序终止的信息(非零退出码或信号)。
-v, --verbose打印所有资源使用信息,而不是默认格式。
-h, --help显示帮助信息并退出。
-V, --version输出版本信息并退出。

四、time命令的直接使用

time后跟执行的命令,则可以可以统计该命令的时间消耗。

[root@openEuler-test ~]# time hostname
openEuler-test

real0m0.002s
user0m0.000s
sys0m0.001s

其中的三项输出的意思,如下所示:

  • real 表示的是整个过程的实际经过时间。
  • user 表示的是用户空间中的代码执行所花费的 CPU 时间。
  • sys 表示的是内核空间中的代码执行所花费的 CPU 时间。

五、/usr/bin/time的基本使用

5.1 /usr/bin/time直接使用

[root@openEuler-test ~]# /usr/bin/time ls
aa  aa.txt  anaconda-ks.cfg  birthday-cake.jpggift.jpg  k8s.png  output.png  qrcode.svg  wordpress-4.9.1-zh_CN.tar.gz
0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 2424maxresident)k
0inputs+0outputs (0major+113minor)pagefaults 0swaps
  • 第一行:

第一行是 ls 命令的实际输出,列出了当前目录下的文件和目录。

  • 第二行

0.00user:用户空间中的代码执行所花费的 CPU 时间为 0 秒。
0.00system:内核空间中的代码执行所花费的 CPU 时间为 0 秒。
0:00.00elapsed:实际经过的时间(wall clock time)为 0 秒。
100%CPU:CPU 使用率为 100%。这个值是 (user + system) / elapsed 的百分比。由于 elapsed 时间非常短,所以即使 user 和 system 时间都是 0,CPU 使用率也可能显示为 100%。
(0avgtext+0avgdata 2424maxresident)k:
0avgtext:平均文本段大小为 0 KB。
0avgdata:平均数据段大小为 0 KB。
2424maxresident:最大驻留内存大小为 2424 KB。

  • 第三行

0inputs+0outputs:输入和输出的数据量分别为 0 字节。
(0major+113minor)pagefaults:
0major:主要页错误(需要从磁盘读取页面)的数量为 0。
113minor:次要页错误(可以在内存中找到页面)的数量为 113。
0swaps:交换操作的次数为 0。

5.2 打印标准输出

使用-p选项,打印以下标准输出。

[root@openEuler-test ~]# /usr/bin/time -p ls
aa  aa.txt  anaconda-ks.cfg  birthday-cake.jpggift.jpg  k8s.png  output.png  qrcode.svg  wordpress-4.9.1-zh_CN.tar.gz
real 0.00
user 0.00
sys 0.00

5.3 打印所有资源信息

使用-v选项,打印所有资源信息。

[root@openEuler-test ~]#  /usr/bin/time -v ls
aa  aa.txt  anaconda-ks.cfg  birthday-cake.jpggift.jpg  k8s.png  output.png  qrcode.svg  wordpress-4.9.1-zh_CN.tar.gz
Command being timed: "ls"
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:00.00
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): 2456
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 113
Voluntary context switches: 1
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
字段描述
Command being timed“ls”正在计时的命令是 ls
User time (seconds)0.00用户空间中的代码执行所花费的 CPU 时间(秒)。
System time (seconds)0.00内核空间中的代码执行所花费的 CPU 时间(秒)。
Percent of CPU this job got0%该任务获得的 CPU 百分比。
Elapsed (wall clock) time0:00.00实际经过的时间(墙钟时间),格式为 h:mm:ssm:ss
Average shared text size (kbytes)0平均共享文本段大小(KB)。
Average unshared data size (kbytes)0平均非共享数据段大小(KB)。
Average stack size (kbytes)0平均堆栈大小(KB)。
Average total size (kbytes)0平均总大小(KB)。
Maximum resident set size (kbytes)2456最大驻留内存大小(KB)。
Average resident set size (kbytes)0平均驻留内存大小(KB)。
Major (requiring I/O) page faults0需要 I/O 的主要页错误次数。
Minor (reclaiming a frame) page faults113重新分配帧的次要页错误次数。
Voluntary context switches1自愿上下文切换次数。
Involuntary context switches0非自愿上下文切换次数。
Swaps0交换操作次数。
File system inputs0文件系统输入次数。
File system outputs0文件系统输出次数。
Socket messages sent0发送的套接字消息数。
Socket messages received0接收的套接字消息数。
Signals delivered0传递的信号数。
Page size (bytes)4096页面大小(字节)。
Exit status0命令的退出状态码。

5.4 将执行时间写入到文件中

使用-o选项将执行时间写入到文件中:

[root@openEuler-test ~]# /usr/bin/time -o aa.txt ping www.baidu.com -c 4
PING www.a.shifen.com (153.3.238.102) 56(84) bytes of data.
64 bytes from 153.3.238.102 (153.3.238.102): icmp_seq=1 ttl=53 time=14.8 ms
64 bytes from 153.3.238.102 (153.3.238.102): icmp_seq=2 ttl=53 time=14.2 ms
64 bytes from 153.3.238.102 (153.3.238.102): icmp_seq=3 ttl=53 time=14.3 ms
64 bytes from 153.3.238.102 (153.3.238.102): icmp_seq=4 ttl=53 time=15.0 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 14.212/14.590/14.991/0.320 ms
  • 查看该文件内容:
[root@openEuler-test ~]# cat aa.txt
0.00user 0.00system 0:03.05elapsed 0%CPU (0avgtext+0avgdata 2920maxresident)k
0inputs+0outputs (0major+144minor)pagefaults 0swaps

5.5 追加信息

使用-a选项,将/usr/bin/time命令的输出信息追加到aa.txt文件中,而不会覆盖该文件。

[root@openEuler-test ~]# /usr/bin/time -a -o aa.txt ls
aa  aa.txt  anaconda-ks.cfg  birthday-cake.jpggift.jpg  k8s.png  output.png  qrcode.svg  wordpress-4.9.1-zh_CN.tar.gz
[root@openEuler-test ~]# cat aa.txt
0.00user 0.00system 0:03.05elapsed 0%CPU (0avgtext+0avgdata 2920maxresident)k
0inputs+0outputs (0major+144minor)pagefaults 0swaps
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 2472maxresident)k
0inputs+0outputs (0major+115minor)pagefaults 0swaps

5.6 格式化时间输出

可参考以下命令,进行格式化时间输出。

/usr/bin/time -f "time: %U" ls

在这里插入图片描述

参数描述
%E实际经过时间(real time),显示格式为 [小时:]分钟:秒
%U用户空间中的代码执行所花费的 CPU 时间(user time)。
%S内核空间中的代码执行所花费的 CPU 时间(system time)。
%C进行计时的命令名称及其命令行参数。
%D进程非共享数据区域的大小,以 KB 为单位。
%x命令退出状态码。
%k进程接收到的信号数量。
%w进程被交换出主存的次数。
%Z系统的页面大小(page size),这是一个系统常量,不同系统中该值可能不同。
%P进程所获取的 CPU 时间百分比,这个值等于 (user + system) 时间 / 总运行时间
%K进程的平均总内存使用量(包括 data + stack + text),单位是 KB。
%W进程主动进行上下文切换的次数,例如等待 I/O 操作完成。
%c进程被迫进行上下文切换的次数(由于时间片到期)。

六、注意事项

  • 区分 Shell 内置 time 和 GNU time:确保你使用的是 /usr/bin/time 而不是 shell 内置的 time,以利用更多高级选项。
  • 使用 -o 选项重定向输出:使用 -o 选项将 time 的输出重定向到文件中,以便后续分析。
  • 自定义输出格式:使用 -f 选项自定义输出格式,以便获取更详细的资源使用信息。
  • 启用详细模式:使用 -v 选项启用详细模式,以获取所有资源使用信息。
  • 处理异常终止:使用 -q 选项来抑制关于异常程序终止的信息,如非零退出码或信号。
  • 检查系统路径:确保 /usr/bin/time 在你的 PATH 环境变量中,或者直接使用完整路径调用。
  • 注意时间精度:对于非常短的命令,time 可能无法提供高精度的时间测量,因为系统计时器有最小分辨率。
  • 理解百分比 CPU 使用率:CPU 使用率是基于 (user + system) / elapsed 计算的,对于极短的命令可能会显示为 100%。
  • 查看帮助和版本信息:使用 -h--help 查看帮助信息,使用 -V--version 查看版本信息。

原文地址:https://blog.csdn.net/jks212454/article/details/142471867

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!