如何查看bash历史记录中的时间戳?


259

从bash历史记录中可以看到我什么时候执行了命令?我们可以看到订单,但是还有什么办法可以让我得到时间?

底线:Bash历史记录中的执行时间


7
我很惊讶在手册页中在Linux和BSD上对这方面的记录多么糟糕。
Sridhar Sarnobat,2016年


4
如果您使用的是zsh:history -E
Vahid

4
不知道为什么下面两个答案觉得有必要告诉你如何打开一个终端..
mwfearnley

2
根据@ dog0引用的博客,除非HISTTIMEFORMAT发出命令时设置了变量,否则显然不会保存时间戳。换句话说,如果您没有设置它,那么现在进行设置将无助于您检索以前发出的命令的时间戳。
Tomislav Nakic-Alfirevic

Answers:


316

Ctrl+ Alt+ T打开终端,然后运行以下命令:

HISTTIMEFORMAT="%d/%m/%y %T "

或者,将更改永久保留给当前用户:

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc
source ~/.bashrc

然后

history

有关更多信息,请参见man bashLinux上Bash命令行的AZ索引

对于设置之前 运行的命令,当前时间将保存为时间戳。设置后运行的命令将保存正确的时间戳。HISTTIMEFORMATHISTTIMEFORMAT


7
为什么用exportin 声明.bash_profile?它是一个变量,只能由读取bash,而不能由它启动的命令读取,因此不应导出。
2015年

71
请注意,在为会话设置之后,这只会记录历史记录项的时间戳HISTTIMEFORMAT,即您不能追溯使用。这里的一些答案给人的印象是历史命令立即显示带有时间戳的条目
Louis Maddox

9
@Louis-其实这对我来说对我有效吗?!?!
stephenmm '16

19
@Jamil:对于遵循ISO标准的人,日期部分为“%y-%m-%d”;)
Gauthier

13
@Gauthier-实际上,仅将%F用作ISO日期;-) man7.org/linux/man-pages/man3/strftime.3.html
brianmearns

73

开放端子Ctrl+ Alt+ T和运行,

HISTTIMEFORMAT="%d/%m/%y %T "

然后,

history

要使更改永久生效,请执行以下步骤,

gedit ~/.bashrc

您需要将以下行添加到.bashrc文件中,然后将其保存,

export HISTTIMEFORMAT="%d/%m/%y %T "

运行以下命令以获取.bashrc文件,

source ~/.bashrc

在那之后运行history命令。

在此处输入图片说明

来源http : //www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/


感谢您的回答。
rɑːdʒɑ

1
嘿,我正在OS X和Windows中(通过MINGW)进行此操作,并将其添加到.bash_profile中,profile和rc之间有什么区别?
LasagnaAndroid

18

是的,您可以:如果设置了$HISTTIMEFORMAT.bash-history则将正确打上时间戳。这对现有.bash-history内容没有帮助,但将来会有所帮助。


1
您可以扩大它的清晰度吗?
rɑːdʒɑ

5
对上一篇文章的更正:设置HISTTIMEFORMAT可以显示时间戳...甚至存在。我最喜欢的是:HISTTIMEFORMAT ='%F%T',因为它与您居住的国家无关紧要...每个人都立即知道现在几点。:)

4
我设置了$ HISTTIMEFORMAT,即使在此命令之前,我也得到了今天的时间。
YasinOkumuş17年

@ user491029“ ...甚至存在”。的确如此,但具有误导性。至少在ubuntu 14.04上,设置了HISTTIMEFORMAT后,它确实开始显示所有历史记录条目的时间戳,但是看起来在当前会话之前运行的任何命令的时间戳都是当前会话的登录时间戳。
jbobbins

1

您下次登录时会看到更改。

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc

0

要为所有用户启用历史记录时间戳,请在/etc/profile.d中创建一个脚本:

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh

1
这对于通过GUI登录的用户可能不起作用,因为默认终端不会运行登录Shell。/etc/bash.bashrc会是一个更好的地方。
muru

0

我知道,我回答得很晚,但是要为所有用户执行此操作,您可以在其中创建任何.sh文件,/etc/profile.d并在其中添加以下行:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' >> /etc/profile.d/existing-foo-file.sh

如果您未以root超级用户或超级用户身份登录,则需要使用以下tee命令执行此操作:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee /etc/profile.d/mytimestamp.sh

如果要附加到任何现有文件,请将-a标志传递给tee命令:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee -a /etc/profile.d/mytimestamp.sh

在此处输入图片说明


您好Shashank,感谢您添加答案,但是这个答案与其他答案有何不同?如果您的答案是完全不同的,那么我们很高兴收到,但是如果没有,您可以改善现有的答案。
rɑːdʒɑ

嗨,谢谢你的评论。这与其他方式在以下方面有所不同:1.他们中有些人提到为所有用户创建,而没有人提及在中创建/解释任何文件名/etc/profile.dtimestamp.sh看起来非常接近技术性(因此会造成混乱),所以我使用了名称existing-foo-file.sh(foo-bar概念)。2.没有人提及与非root用户一起使用它。因此,我给出了一个使用示例sudo。3.第三个示例改进了附加到现有文件的第二个示例。由于linux / unix初学者可以解决此问题,因此我进行了详细说明。
Shashank Agrawal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.