如何在Linux中找到命令或者进程的执行时间
我们可能知道命令/进程的开始时间以及进程在UNIX的系统中运行的时间。
但是,我们如何知道命令或者流程结束何时和/或者命令/流程完成的总时间是什么时候?
好吧,这很容易!在类似UNIX的系统上,有一个名为"GNU TIME"的实用程序,专门为此目的而设计。
使用时间实用程序,我们可以轻松测量Linux操作系统中的命令或者程序的总执行时间。
好事是'time'命令在大多数Linux发行版中预装,所以你不必打扰安装。
查找Linux中的命令或者进程的执行时间
测量命令/程序的执行时间,刚刚运行。
$/usr/bin/time -p ls
或者,
$time ls
示例输出:
dir1 dir2 file1 file2 mcelog real 0m0.007s user 0m0.001s sys 0m0.004s
$time ls -a . .bash_logout dir1 file2 mcelog .sudo_as_admin_successful .. .bashrc dir2 .gnupg .profile .wget-hsts .bash_history .cache file1 .local .stack real 0m0.008s user 0m0.001s sys 0m0.005s
上面的命令显示"ls"命令的总执行时间。
用我们选择的任何命令/进程替换"LS"以找到总执行时间。
其中
- 真实 - refers命令/程序所花费的总时间,
- 用户 - 引用程序在用户模式下所花费的时间,
- sys - 指程序在内核模式下采取的时间。
我们也可以限制仅在一定时间内运行的命令。
时间vs/usr/bin/time
正如我们所明白的那样,我们在上面的例子中使用了两个命令'时间'和'/usr/bin/time'。
所以,你可能想知道它们之间有什么区别。
首先,让我们看看实际上'time'是什么使用'type'命令。
对于那些不知道的人,类型命令用于找出有关Linux命令的信息。
有关更多详细信息,请参阅此教程。
$type -a time time is a shell keyword time is /usr/bin/time
如上所述,时间都是,
- 一个内置于bash shell中的关键字
- 例如,可执行文件:/usr/bin/time
由于shell关键字优先于可执行文件,因此只需在没有完整路径的情况下运行时命令时,就会运行内置shell命令。
但是,当我们运行/usr/bin/time时,我们可以运行真正的GNU时间程序。
因此,为了访问真实命令,我们可能需要指定其显式路径。
清除?
好的!
内置的"时间"shell关键字在大多数shell中可用,如bash,zsh,csh,ksh,tcsh等.'time'shell关键字比可执行文件更少。
我们可以在'time'关键字中使用的唯一选项是-p。
我们现在知道如何使用'time'命令找到给定命令/进程的总执行时间。
想要更多地了解'GNU时间'实用程序?
阅读!
关于"GNU时间"计划的简要介绍
GNU时间程序运行具有给定参数的命令/程序,并在命令完成后,将系统资源使用作为标准输出。
与'time'关键字不同,GNU时间程序不仅仅显示命令/进程所使用的时间,还可以显示内存,I/O和IPC调用等其他资源。
time命令的典型语法是:
/usr/bin/time [options] command [arguments...]
上面语法中的"选项"是指一组标志,可以与Time命令一起使用以执行特定功能。
下面给出的可用选项列表。
- -f,--format - 使用此选项根据需要指定输出的格式。
- -p,--portability - 使用便携式输出格式。
- -o file,--output = file - 将输出写入文件而不是显示为标准输出。
- -a, - append - 将输出添加到文件而不是覆盖它。
- -v, - verbose - 此选项显示"时间"实用程序输出的详细说明。
- --quiet - 此选项可防止时间"时间"实用程序报告程序的状态。
在没有任何选项的情况下使用"GNU时间"程序时,我们将看到如下所示的输出。
$/usr/bin/time wc /etc/hosts 9 28 273 /etc/hosts 0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k 0inputs+0outputs (0major+73minor)pagefaults 0swaps
如果使用Shell内置关键字"Time"运行相同的命令,则输出将有点不同:
$time wc /etc/hosts 9 28 273 /etc/hosts real 0m0.006s user 0m0.001s sys 0m0.004s
有时,我们可能希望将系统资源使用输出写入文件而不是在终端中显示。
为此,请使用如下面的-o标志。
$/usr/bin/time -o file.txt ls dir1 dir2 file1 file2 file.txt mcelog
正如我们在输出中看到的,时间实用程序不显示输出。
因为,我们将输出写入名为file.txt的文件。
让我们看看这个文件:
$cat file.txt 0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k 0inputs+0outputs (0major+106minor)pagefaults 0swaps
当我们使用-o标志时,如果没有名为'file.txt'的文件,它将其中创建和写入输出。
如果File.txt已存在,则会覆盖其内容。
我们还可以将输出添加到文件,而不是使用-a标志覆盖它。
$/usr/bin/time -a file.txt ls
-f标志允许用户根据他/她的喜好控制输出的格式。
例如,以下命令显示"LS"命令的输出,并显示用户,系统和总时间。
$/usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls dir1 dir2 file1 file2 mcelog 0:00.00 real, 0.00 user, 0.00 sys
请注意,内置的shell命令'time'不支持GNU时间计划的所有功能。
有关GNU Time Utility的更多详细信息,请参阅man页面。
$man time
要了解更多关于Bash内置'Time'关键字,请运行:
$help time