如何使用time命令计时命令执行

来自菜鸟教程
跳转至:导航、​搜索

介绍

有时您会想知道执行命令或脚本需要多长时间。 您可以跟踪开始和结束时间并计算差异以获得持续时间。 你甚至可以抓住你值得信赖的秒表应用程序并以这种方式跟踪事物。 或者,您可以利用 time 命令为自己省去所有麻烦。

命令行充满了一堆小型的、单一用途的实用程序,可以帮助消除您自己编写任何额外代码的需要。 time 命令就是这样一种命令。 time 命令与提供系统日期和时间的 date 命令没有任何关系。 相反,它会计算程序或脚本的执行时间,并告诉您它花费了多长时间。

在本教程中,您将使用 time 命令并探索其输出。

本教程中的示例(除非另有说明)将使用 Linux 上 Bash shell 中内置的 time

启动交互式终端!

第 1 步 — 定时命令执行

要计时命令的执行持续时间,请在命令前加上 time

但是,如何执行 time 取决于您的操作系统。 time 既作为某些 shell 的内置命令存在,例如 bashzsh,也作为独立命令存在,称为 GNU [X142X ],它的参数与 shell 中内置的 time 不同。

使用以下命令查看 time 如何在您的系统上工作:

type -a time

您将看到如下输出:

Outputtime is a shell keyword
time is /usr/bin/time

在这种情况下,有一个名为 time 的内置 shell 命令,以及安装在 /usr/bin/timetime 版本。

如果你想使用 time 的 GNU 版本,你可以在它前面加上一个反斜杠:

\time

如果你不这样做,你的 shell 将使用它的内置版本。

注意: fish shell 不提供自己的 time 实现。 如果您碰巧在使用 fish,则需要确保已安装 GNU time 命令。


尽管 GNU 版本具有更高级的格式化选项,但这两种方法都具有相同的目的。

让我们通过在文件系统的根 / 上使用 tree 命令来探索计时程序的执行,该命令将列出所有文件和目录的可视化树。

tree 命令并不总是默认安装在许多系统上,但您可以使用 apt 在 Ubuntu 和 Debian 系统上安装它:

sudo apt install tree

在 macOS 上,您可以使用 Homebrew 安装 tree

brew install tree

现在已经安装了 tree 命令,可以用它来查看系统上的所有文件,但是在它前面加上 time 以查看需要多长时间:

time tree /

您将看到文件信息滚动。 最终,它会停止并向您展示所花费的时间:

Output# The output of tree will scroll by here.

166590 directories, 1568127 files
tree /  12.24s user 10.37s system 66% cpu 33.827 total

请注意,您执行的命令 tree / 也由 time 命令回显。 输出显示了一些信息,但现在,关注 total 和前面的数字:

Outputtree /  12.24s user 10.37s system 66% cpu 33.827 total

这就是命令执行所需的时间(以秒为单位)。

如果您碰巧用 CTRL+C 取消命令,time 命令也可以工作。 如果您再次运行 time tree / 并快速点击 CTRL+Ctree 命令将停止滚动,您将看到 time 结果在您停止命令之前执行命令的时间。

第 2 步 — 了解资源使用情况

除了总持续时间之外,time 的输出还包括三个值。

Outputtree /  12.24s user 10.37s system 66% cpu 33.827 total

第一个是命令在用户模式下花费的总时间(以 CPU 秒为单位)。 这就是后面带有 user 的值。

下一个,以 system 为后缀,是命令在系统或内核模式中花费的时间量(同样,以 CPU 秒为单位)。

最后是分配给命令的CPU百分比,后缀为cpu

usersystem 时间的区别在于 CPU 使用率是按访问级别细分的。 当代码在用户模式下执行时,它不能直接访问硬件或引用内存,必须依赖系统的 API 进行委托。 这是大多数代码在您的系统上运行的方式,并且由于其隔离性,崩溃总是可以恢复的。

另一方面,内核模式是指正在执行的代码可以不受限制地访问系统硬件。 这种模式几乎是为操作系统最受信任的功能保留的。 由于具有完全访问权限,当内核模式下发生崩溃时,它们会严重崩溃并倾向于使系统崩溃。

结论

在本教程中,您探索了如何使用 time 命令来查看命令和脚本运行所需的时间,以及该时间的去向。 您的 shell 的 time 命令可让您快速访问计时命令的执行持续时间,而无需任何额外的脚本。