在 Linux 中查找命令或进程的执行时间

您可能知道命令/进程的开始时间,并且 一个进程运行了多长时间 在 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” 与您选择的任何命令/进程一起查找总执行时间。

这里,

  1. real – 指命令/程序花费的总时间,
  2. user – 指程序在用户模式下花费的时间,
  3. 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