如何使用time命令计时命令执行
介绍
有时您会想知道执行命令或脚本需要多长时间。 您可以跟踪开始和结束时间并计算差异以获得持续时间。 你甚至可以抓住你值得信赖的秒表应用程序并以这种方式跟踪事物。 或者,您可以利用 time 命令为自己省去所有麻烦。
命令行充满了一堆小型的、单一用途的实用程序,可以帮助消除您自己编写任何额外代码的需要。 time 命令就是这样一种命令。 time 命令与提供系统日期和时间的 date 命令没有任何关系。 相反,它会计算程序或脚本的执行时间,并告诉您它花费了多长时间。
在本教程中,您将使用 time 命令并探索其输出。
本教程中的示例(除非另有说明)将使用 Linux 上 Bash shell 中内置的 time。
启动交互式终端!
第 1 步 — 定时命令执行
要计时命令的执行持续时间,请在命令前加上 time。
但是,如何执行 time 取决于您的操作系统。 time 既作为某些 shell 的内置命令存在,例如 bash 和 zsh,也作为独立命令存在,称为 GNU [X142X ],它的参数与 shell 中内置的 time 不同。
使用以下命令查看 time 如何在您的系统上工作:
type -a time
您将看到如下输出:
Outputtime is a shell keyword time is /usr/bin/time
在这种情况下,有一个名为 time 的内置 shell 命令,以及安装在 /usr/bin/time 的 time 版本。
如果你想使用 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+C,tree 命令将停止滚动,您将看到 time 结果在您停止命令之前执行命令的时间。
第 2 步 — 了解资源使用情况
除了总持续时间之外,time 的输出还包括三个值。
Outputtree / 12.24s user 10.37s system 66% cpu 33.827 total
第一个是命令在用户模式下花费的总时间(以 CPU 秒为单位)。 这就是后面带有 user 的值。
下一个,以 system 为后缀,是命令在系统或内核模式中花费的时间量(同样,以 CPU 秒为单位)。
最后是分配给命令的CPU百分比,后缀为cpu。
user 和 system 时间的区别在于 CPU 使用率是按访问级别细分的。 当代码在用户模式下执行时,它不能直接访问硬件或引用内存,必须依赖系统的 API 进行委托。 这是大多数代码在您的系统上运行的方式,并且由于其隔离性,崩溃总是可以恢复的。
另一方面,内核模式是指正在执行的代码可以不受限制地访问系统硬件。 这种模式几乎是为操作系统最受信任的功能保留的。 由于具有完全访问权限,当内核模式下发生崩溃时,它们会严重崩溃并倾向于使系统崩溃。
结论
在本教程中,您探索了如何使用 time 命令来查看命令和脚本运行所需的时间,以及该时间的去向。 您的 shell 的 time 命令可让您快速访问计时命令的执行持续时间,而无需任何额外的脚本。