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

aaa*_*aaa 23 linux bash shell history command-line

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

> history --include-date | grep 2012-02-27`
Run Code Online (Sandbox Code Playgroud)

qwe*_*eet 35

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

一个有时间的例子-

[qweet@superbox ~]$ export HISTTIMEFORMAT='%F %t '
[qweet@superbox ~]$ history
    1  2012-03-06        su -
    2  2012-03-06        jbach@mobiletribe.net
    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
....
Run Code Online (Sandbox Code Playgroud)

但这还不是全部。由于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
 ...
Run Code Online (Sandbox Code Playgroud)

另外,如果您希望 HISTTIMEFORMAT 保持不变,请考虑将其附加到您的bashrc类似内容中;

echo 'HISTTIMEFORMAT="variables here"' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

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