add getlogins
This commit is contained in:
parent
2bea15b5cd
commit
604e7a7f72
1 changed files with 53 additions and 0 deletions
53
bin/getlogins
Executable file
53
bin/getlogins
Executable file
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/bash
|
||||
|
||||
# Grab a point in time snapshot of the output from the last command
|
||||
last > /tmp/last_output
|
||||
|
||||
# Alternatively because there are output variances to deal with,
|
||||
last | grep '+' > /tmp/day_more && last | grep -v '+' > /tmp/day_less
|
||||
|
||||
# Now we have complete output of last, and split versions of sessions
|
||||
# that are shorter or longer than one day. We should convert days in
|
||||
# the day_more file to hours and append to day_less for consistency.
|
||||
# placeholder to code this thought process...
|
||||
|
||||
# we are not interested in 00 minute entries (unless we also decide to count logins)
|
||||
# We are not interested in any users that are currently logged in or the wtmp footer
|
||||
# We are not interested in system entries either. Let's hope no users match our egrep
|
||||
egrep -v '(00:00|logged|^$|wtmp|system)' /tmp/last_output | sed 's/[()]//g' > /tmp/last_clean
|
||||
cut -d' ' -f1 /tmp/last_clean | sort -u > /tmp/unique_users
|
||||
|
||||
# We can crunch data (output) in several ways; Read a line, test each field, process...
|
||||
# Or we can break our data into separate outputs (by user) before crunching the data.
|
||||
for user in $(cat /tmp/unique_users)
|
||||
do
|
||||
# Guarantee we are starting each loop with clean variables
|
||||
minute=0
|
||||
tm=0
|
||||
hour=0
|
||||
th=0
|
||||
day=0
|
||||
td=0
|
||||
|
||||
for time in $(awk /^${user}/'{print $NF}' /tmp/last_clean)
|
||||
do
|
||||
temp=$(echo ${time} | cut -d+ -f1)
|
||||
if [ ${time} = ${temp} ]; then # The day indicator (+) does not exist
|
||||
day=0
|
||||
hour=$(echo ${time} | cut -d: -f1 | sed 's/^0//')
|
||||
else
|
||||
day=$(echo ${time} | cut -d+ -f1)
|
||||
hour=$(echo ${time} | cut -d+ -f2 | cut -d: -f1 | sed 's/^0//')
|
||||
fi
|
||||
# We use sed to strip padded 0's in single digit values for math (07 becomes just 7)
|
||||
minute=$(echo ${time} | cut -d: -f2 | sed 's/^0//')
|
||||
((td = td + day))
|
||||
((th = th + hour))
|
||||
((tm = tm + minute))
|
||||
done
|
||||
# We have our column totals, but now we need to normalize the output again
|
||||
minute=$(expr $tm % 60)
|
||||
hour=$(expr `echo "$tm / 60 + $th" | bc` % 24)
|
||||
day=$(expr `echo "$tm / 60 + $th" | bc` / 24 + $td)
|
||||
printf "%8s %4d + %02d : %02d \n" $user $day $hour $minute
|
||||
done
|
Loading…
Reference in a new issue