How do I extract login history?
I need to know the login history for specific user (i.e. login and logout time), How do I extract this history for a specific date range in Linux ?
You can try the last
command:
last john
It prints out the login/out history of user john. Whereas running just
last
prints out the login/out history of all users.
If you need to go further back in history than one month, you can read the /var/log/wtmp.1
file with the last
command.
last -f wtmp.1 john
will show the previous month's history of logins for user john
.
The last log output isn't too heavy and relatively easy to parse, so I would probably pipe the output to grep to look for a specific date pattern.
last john | grep -E 'Aug (2[0-9]|30) '
to show August 20-30. Or something like:
last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) '
to acquire July 10-30 for user john
.
How to extract login history for specific date range in Linux?
An example to list all users login from 25 to 28/Aug:
last | while read line
do
date=`date -d "$(echo $line | awk '{ print $5" "$6" "$7 }')" +%s`
[[ $date -ge `date -d "Aug 25 00:00" +%s` && $date -le `date -d "Aug 28 00:00" +%s` ]] && echo $line
done
-
awk '{ print $5" "$6" "$7 }'
to extract the date time at corresponding column fromlast
output -
+%s
to convert datetime to Epoch time -
-ge
stand for greater than or equal -
-le
stand for less than or equal
You can also do it for specific user with last <username>
.