您可能知道命令/进程的开始时间,并且 一个进程运行了多长时间 在 Linux 和类 Unix 系统中。 但是,你怎么知道命令或进程何时结束和/或命令/进程完成的总时间是多少? 嗯,这很容易! 在类 Unix 系统上,有一个名为 ‘GNU 时间’ 这是专门为此目的而设计的。 使用 Time 实用程序,我们可以轻松测量 Linux 操作系统中命令或程序的总执行时间。 好在大多数 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
” 与您选择的任何命令/进程一起查找总执行时间。
这里,
real
– 指命令/程序花费的总时间,user
– 指程序在用户模式下花费的时间,sys
– 指程序在内核模式下所花费的时间。
我们也可以将命令限制为仅运行一段时间。 有关详细信息,请参阅以下指南。
- 如何在 Linux 中运行特定时间的命令
时间与 /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 时间 程序。 因此,为了访问真正的命令,您可能需要指定其显式路径。 清除? 好的!
内置的 ‘time’ shell 关键字在 BASH、ZSH、CSH、KSH、TCSH 等大多数 shell 中都可用。’time’ shell 关键字的选项比可执行文件少。 您可以在“时间”关键字中使用的唯一选项是 -p
.
您现在知道如何使用“时间”命令查找给定命令/进程的总执行时间。 想了解更多关于“GNU time”实用程序的信息吗? 继续阅读!
‘GNU time’ 程序简介
GNU 时间程序运行带有给定参数的命令/程序,并在命令完成后将系统资源使用情况汇总为标准输出。 与“时间”关键字不同,GNU 时间程序不仅显示命令/进程使用的时间,还显示其他资源,如内存、I/O 和 IPC 调用。
Time 命令的典型语法是:
/usr/bin/time [options] command [arguments...]
上述语法中的“选项”是指一组标志,可与 time 命令一起使用以执行特定功能。 下面给出了可用选项的列表。
-f
,--format
– 使用此选项可根据需要指定输出格式。-p
,--portability
– 使用便携式输出格式。-o
文件,--output
=文件 – 将输出写入 文件 而不是显示为标准输出。-a
,--append
– 将输出附加到文件而不是覆盖它。-v
,--verbose
– 此选项显示“时间”实用程序输出的详细说明。--quiet
– 此选项可防止时间“时间”实用程序报告程序状态。
当使用不带任何选项的“GNU time”程序时,您将看到如下输出。
$ /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
正如您在输出中看到的那样,Time 实用程序不显示输出。 因为,我们将输出写入一个名为 file.txt
. 让我们看一下这个文件:
$ cat file.txt 0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k 0inputs+0outputs (0major+106minor)pagefaults 0swaps
当你使用 -这 标志,如果没有名为“file.txt”的文件,它将在其中创建并写入输出。 如果 file.txt
已经存在,它将覆盖其内容。
您还可以将输出附加到文件而不是使用覆盖它 -a
旗帜。
$ /usr/bin/time -a file.txt ls
这 -f
flag 允许用户根据自己的喜好控制输出的格式。 例如,以下命令显示 ‘ 的输出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 命令“时间”不支持 GNU 时间程序的所有功能。
有关 GNU 时间实用程序的更多详细信息,请参阅手册页。
$ man time
要了解有关 Bash 内置“时间”关键字的更多信息,请运行:
$ help time
资源:
- 尼克斯克拉夫特
- AskUbuntu
BASH执行时间查找命令执行时间GNU TimeLinuxLinux基础Linux命令Linux howtoLinux技巧Shell