按日期检索 Linux 命令行历史记录

按日期检索 Linux 命令行历史记录

我想查看一周前某一天我在 bash 命令行上输入的内容。有没有办法检索命令行历史记录?也许像下面这样?

> history --include-date | grep 2012-02-27`

答案1

默认情况下,History记录您运行命令时的时间,但不显示它。这样做的原因是当您运行命令时History,它会查找名为 的环境变量HISTTIMEFORMAT,该变量告诉它如何格式化时间。如果null设置或未设置该值,则默认情况下它不会显示任何时间。

举个例子-

[qweet@superbox ~]$ export HISTTIMEFORMAT='%F %t '
[qweet@superbox ~]$ history
    1  2012-03-06        su -
    2  2012-03-06        [email protected]
    3  2012-03-06        mysql
    4  2012-03-06        ll
    5  2012-03-06        cd /opt/
    6  2012-03-06        ll
    7  2012-03-06        exit
    8  2012-03-06        ll
    9  2012-03-06        ls -lsa
   10  2012-03-06        cd ../
   11  2012-03-06        ll
   12  2012-03-06        ll
....

但这并不是全部。由于HISTTIMEFORMAT需要strftime值(您可以在这里顺便说一下,你可以做各种神奇的事情。但是对于你想做的事情,下面的方法有效。

[qweet@superbox ~]$ export HISTTIMEFORMAT='%F %T %t'
[qweet@superbox ~]$ history | grep -e "2012-03-06 14:48"
 1006  2012-03-06 14:48:05      export HISTTIMEFORMAT='%F %T %t'
 1007  2012-03-06 14:48:07      history
 ...

此外,如果您希望 HISTTIMEFORMAT 持久保存,请考虑将其附加到您的bashrc类似文件中;

echo 'HISTTIMEFORMAT="variables here"' >> ~/.bashrc

当您在终端中打开新选项卡或者注销并重新登录时,您将看到更改。

答案2

改变 HISTTIMEFORMAT 变量会有所帮助,但不幸的是仅限于未来。这篇 nixCraft 文章解释了如何永久设置该变量,但使用了不明确的日期格式。对于 ISO 8601,请使用:

HISTTIMEFORMAT="%G-%m-%dT%T "

结果:

$ history
[...]
   13  2022-11-07T13:32:01 pwd
   14  2022-11-07T13:32:05 cd
   15  2022-11-07T13:32:10 ls -l

HISTTIMEFORMAT设置之前运行的命令将显示错误的时间。

相关内容