The bash shell provides access to the command history, the list of commands previously typed. The value of the HISTSIZE variable is used as the number of commands to save in a history list. If the HISTTIMEFORMAT is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. This page shows how to display bash History with date and time when running the history command on a Linux or Unix-like systems.
Bash History Display Date And Time For Each Command
By default history command will display output as follows:
$ history
Sample outputs:
1994 ls S*.pdf 1995 ls -lh S*.pdf 1996 xdg-open Statement_Jun\ 2018.pdf 1997 xdg-open System_01Jun2018_30Jun2018_0133*.pdf 1998 ssh vivek@ln.cbz01 1999 gpass 2000 history
The above command won’t display what time the commands were executed from the bash history. To solve this problem create a shell variable called HISTTIMEFORMAT.
How to see time stamps in bash history
Defining the environment variable named HISTTIMEFORMAT as follows:
$ HISTTIMEFORMAT="%d/%m/%y %T "
OR add to your ~/.bash_profile file, enter:
$ echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile
Where,
- %d – Day
- %m – Month
- %y – Year
- %T – Time
Use the source command to load HISTTIMEFORMAT from file into the current shell script or a command prompt:
$ . ~/.bash_profile
OR
$ source ~/.bash_profile
How to retrieve Linux or Unix bash command line history by date and time
Now, to see history, type:
$ history
Sample outputs:
.... .. 986 11/03/10 04:31:36 memcached-tool 10.10.28.22:11211 stats 987 11/03/10 04:31:36 w 988 11/03/10 04:31:37 iostat 989 11/03/10 04:31:37 top 990 11/03/10 04:31:37 at 991 11/03/10 04:31:38 atop 992 11/03/10 04:31:40 collectl 993 11/03/10 04:31:41 grep CPU /proc/cpuinfo 994 11/03/10 04:31:45 vmstat 3 100 995 11/03/10 04:31:55 sar -W -f /var/log/sa/sa12 .... ..
Here is another output from my Ubuntu Linux server:
Fig.01: Adding date and time to my bash history
Conclusion
You just learned how to display or see time stamps in bash history including date when the command were executed. For more info type the following commands or see gnu/bash page here:
man bash
help history
man 3 strftime
See “A Shell Primer: Master Your Linux, OS X, Unix Shell Environment” for more info.
- How to disable bash shell history in Linux
- How to delete a single command from history on Linux/Unix Bash shell
- Clear Shell History In Ubuntu Linux
- Clear Linux / UNIX BASH Shell Command Line Cache / History
- Bash History: Display Date And Time For Each Command
🐧 Get the latest tutorials on Linux, Open Source & DevOps via:
- RSS feed or Weekly email newsletter
- Share on Twitter • Facebook • 40 comments... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Errant ‘ ” ‘; ought it to read:
echo ‘export HISTTIMEFORMAT=”%d/%m/%y %T ‘ >> ~/.bash_profile
?
Deej
Ha, ha – even I messed up ! I see the command has now been amended.
echo ‘export HISTTIMEFORMAT=”%d/%m/%y %T ” ‘>> ~/.bash_profile
Deej
End single quote is missing.
Correct command is:
echo ‘export HISTTIMEFORMAT=”%d/%m/%y %T “‘ >> ~/.bash_profile
Can you please suggest how to comeout from bash to normal user. after giving this command not able to come out from bash
@Deej / Abhijeet,
Thanks for the heads up. Due to caching it takes a few seconds to minutes to clean out old html page cache. The faq has been updated.
Thanks, this helps a lot in an enterprise domain, where different ppl run different commands. Nice trick;)
how to set this on solaris 10 and how to refresh local.login in solaris …
This is bash specific feature. Refer to your local ksh(1) man page or see fc -l. But, there is no $HISTTIMEFORMAT for ksh.
awesome tip. i’ve forgoten to pursue this, but i’ve always wanted to add that to my bash hist file
thx
Is there a way to have cumulative history file where commands typed by all users are logged with date and time?
I don’t think this tip works for all version of Bash? Because I couldn’t get it working even I put this line in .bash_profile and .profile.
@LA, you need to configure system accounting and auditing which can keep track of all user activities, system resource consumptions and more. History is personal user account specific tool. Also, user can delete history or ignore history file. Search our site for sar and auditing howtos.
@cindy, refer to your local bash man page. You can find out bash version number with the following command:
echo $BASH_VERSION
Yes, I figured my bash is way too old to have this environment variable. The version that I have is “GNU bash, version 2.03.0(1)-release” and all the examples I found online is above 3.0. My collegue searched the “HISTTIMEFORMAT” in some man pages for history and other, we cannot find this variable. But it’s a nice tip to use. :(
Thanks!
I would also add
$ echo 'export HISTSIZE=10000' >> ~/.bash_profile
It’s really useful, I think.
you can add it to /etc/profile so it is available to all users. I also add:
# Make sure all terminals save history
shopt -s histappend histreedit histverify
shopt -s no_empty_cmd_completion # bash>=2.04 only
# Whenever displaying the prompt, write the previous line to disk:
PROMPT_COMMAND=’history -a’
#Use GREP color features by default: This will highlight the matched words / regexes
export GREP_OPTIONS=’–color=auto’
export GREP_COLOR=’1;37;41′
Good tip. We have multiple users connecting as root using ssh and running different commands. Is there a way to log the IP that command was run from?
Thanks in advance.
Just for anyone who might still find this thread (like I did today):
export HISTTIMEFORMAT=”%F %T : $(echo $SSH_CONNECTION | cut -d\ -f1) : ”
will give you the time format, plus the IP address culled from the ssh_connection environment variable (thanks for pointing that out, Cadrian, I never knew about that before), all right there in your history output.
You could even add in $(whoami)@ right to get if you like (although if everyone’s logging in with the root account that’s not helpful).
Yup, you can export one of this
env | grep SSH
SSH_CLIENT=192.168.78.22 42387 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=192.168.78.22 42387 192.168.36.76 22
As their bash history filename
set |grep -i hist
HISTCONTROL=ignoreboth
HISTFILE=/home/cadrian/.bash_history
HISTFILESIZE=1000000000
HISTSIZE=10000000
So in profile you can so something like HISTFILE=/root/.bash_history_$(echo $SSH_CONNECTION| cut -d\ -f1)
bash 4 can syslog every command bat afaik, you have to recompile it (check file config-top.h). See the news file of bash: http://tiswww.case.edu/php/chet/bash/NEWS
If you want to safely export history of your luser, you can ssl-syslog them to a central syslog server.
This is good command, It helps me a lot.
You only need to use
in your .bash_profile
— show history with date & time
# HISTTIMEFORMAT=’%c ‘
#history
Hi
Nice trick but unfortunately, the commands which were executed in the past few days also are carrying the current day’s (today’s) timestamp.
Please advice.
Regards
Hi Sohail,
Yes indeed that will be the behavior of the system since you have just enabled on that day the HISTTIMEFORMAT feature. In other words, the system recall or record the commands which were inputted prior enabling of this feature. Hope this answers your concern.
Thanks!
Hi Sohail,
Yes, that will be the behavior of the system since you have just enabled on that day the HISTTIMEFORMAT feature. In other words, the system can’t recall or record the commands which were inputted prior enabling of this feature, thus it will just reflect on the printed output (upon execution of “history”) the current day and time. Hope this answers your concern.
Thanks!
Hi
The command only lists the current date (Today) even for those commands which were executed on earlier days.
Any solutions ?
Regards
hi vivek.do u know any openings for freshers in linux field? I m doing rhce course from rajiv banergy. My samba,nfs-nis,dhcp,telnet,ftp,http,ssh,squid,cron,quota and system administration is over.iptables ,sendmail and dns is remaining.
-9029917299(Nitiratna)
Hi,
Is there anyway to log username also along with the Command Which we typed …
Thanks in Advance
How can i get full comman along with data and path as we het in history command.
Thanks… it worked..
The command is not working properly. It is displaying the date and time of todays for all the commands where as I ran the some command three before.
How come it is displaying the today date
Hi..
I want to collect the history of particular user everyday and want to send an email.I wrote below script.
for collecting everyday history by time shall i edit .profile file of that user
echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile
Script:
Can any one suggest better way to collect particular user history for everyday
Love it, but using the ISO date format is always recommended (YYYY-MM-DD), just as every other sorted group goes from largest sorting (Year) to smallest sorting (day)
https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates
In that case, myne looks like this:
echo ‘export HISTTIMEFORMAT=”%YY-%m-%d/ %T “‘ >> ~/.bashrc
Thanks for the tip!
please delete post 33, my command is messed up.
Love it, but using the ISO date format is always recommended (YYYY-MM-DD), just as every other sorted group goes from largest sorting (Year) to smallest sorting (day)
https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates
In that case, myne looks like this:
echo ‘export HISTTIMEFORMAT=”%Y-%m-%d %T “‘ >> ~/.bashrc
Thanks for the tip!
its show only current date for all the command history
it’s marking all of your current history with today’s date. Try checking again in a few days.
Hi All,
I Have enabled my history with the command given :
echo ‘export HISTTIMEFORMAT=”%d/%m/%y %T “‘ >> ~/.bash_profile
i need to know how i can add the ip’s also , from which the commands are fired to the system.
How to set the history with date format for cshell and also let me know why cshell users also having bashrc, bash profile, in its home path
this shit does not works.