我想查看一周前某一天我在 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
设置之前运行的命令将显示错误的时间。