您的位置:

详解Linux命令history查看执行时间

Linux命令行中使用history命令可以查看之前执行的命令记录,但是,通过history命令也可以查看每个命令执行的时间,方便我们分析、查找和优化命令执行情况。本文将从多个方面对history命令查看命令执行时间做详细阐述。

一、history查看命令执行时间基本用法

history命令可以显示之前执行的命令列表,并且其中包含了执行时间信息,history命令的基本使用方法如下:

$ history
...
 2465  2022-02-15 17:13:34 ls
 2466  2022-02-15 17:13:43 date
 2467  2022-02-15 17:13:49 pwd
 2468  2022-02-15 17:13:54 whoami
...

上面的历史命令显示了之前执行过的一些命令,包括执行时间、命令数字和命令本身。从输出结果可以看出,每一个命令的前面都有一个数字,该数字即为这个命令的唯一标识(也称为历史命令号)。同时,每条命令的前面都有一个时间戳,该时间戳包含了该命令的执行日期和时间。

二、使用history命令查看命令执行的时间范围

有时候,我们需要仅查看一段时间内执行的命令,我们可以通过history命令的选项来实现。history命令的选项-r和-t可以帮助我们检索特定时间范围内的历史记录。

# 下面的命令会显示过去24小时内执行的所有命令
$ history -t $(date +%s -d '24 hours ago') 

# 下面的命令会显示从2022年1月1日到现在的所有命令
$ history -r '2022-01-01'

其中,选项-t接受一个时间戳作为参数,该时间戳是Unix时间(即自1970年1月1日0时0分0秒UTC起的秒数),通过date命令获取24小时前的时间戳,实现了查看过去24小时内执行的所有命令。

选项-r需要指定一个日期和时间的范围,通过此选项我们可以查看特定时间范围内执行的所有命令。上述命令通过-r选项,指定了从2022年1月1日开始的命令执行记录。

三、使用history命令查看具体的命令执行时间和执行时间间隔

除了上述的两种基本使用方法,通过history命令还可以查看具体的命令执行时间和执行时间间隔。具体方法如下:

# 显示最新执行命令的时间信息
$ history 1

# 显示命令号为2465的命令的执行时间信息
$ history 2465

# 显示命令号为2465和2466的命令的执行时间间隔
$ history 2465 2466

上述命令中,history命令通过指定参数,实现了查看具体的命令执行时间和执行时间间隔。

四、结合grep命令查找特定命令的执行时间

有时候我们需要查找某个命令的执行时间,可以使用grep命令结合history命令来实现。grep命令可以按照用户指定的模式,在文件或标准输入流中搜索匹配的行,并返回匹配的结果。

# 显示包含字符串“ls”的命令的执行时间信息
$ history | grep 'ls'

# 显示包含字符串“-a”和“-l”且以“chmod”命令开头的命令的执行时间信息
$ history | grep '^chmod.*-a.*-l'

上述命令中,history命令输出了之前执行的所有命令,然后通过管道符(|)将输出结果传递给grep命令进行过滤。grep命令通过指定搜索模式,筛选出包含指定字符串的命令,并返回相关执行时间信息。

五、使用bash内置变量获取命令执行时间信息

在bash中,还可以通过一些内置变量来获取命令执行的时间信息,比如$SECONDS和$LINENO。

其中,$SECONDS变量表示脚本或命令行shell的运行时间,单位为秒。$LINENO表示正在执行的当前脚本或命令行shell中的命令的行号。

$ echo "该命令执行了 $SECONDS 秒"

$ echo "当前命令所在行号:$LINENO"

上述命令将打印出脚本或命令行shell的运行时长和当前命令所在的行号。

六、结合其他命令查看命令执行时间信息

除了上述命令外,还可以通过其他命令结合history命令来查看命令执行时间信息。比如,我们可以结合awk命令,筛选出历史命令中最早和最晚的时间戳,以及整个命令执行的时间间隔。

# 显示历史列表中最早和最晚的时间戳,以及命令执行的时间间隔
$ history | awk '{print $2}' | {head -n1 && tail -n1; printf "%.2f minutes total.\n",($NF-$2)/60}'

# 显示历史列表中最早和最晚的时间戳,以及命令执行的时间间隔(以小时为单位)
$ history | awk '{print $2}' | {head -n1 && tail -n1; printf "%.2f hours total.\n",($NF-$2)/3600}'

上述命令分别通过head命令和tail命令,获取历史命令列表中最早和最晚的时间戳。随后,使用awk命令进行解析,计算出命令执行的时间间隔,并按照分钟或小时为单位输出。

总结

通过本文的介绍,相信大家已经掌握了Linux命令history查看命令执行时间的各种方法。通过结合不同的命令,我们可以更加灵活方便地查看和分析命令执行时间信息,提高我们的工作效率。