如何使用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
命令可让您快速访问计时命令的执行持续时间,而无需任何额外的脚本。