Bash para monitorar sessões

1

Estou procurando escrever um BASH para monitorar por quanto tempo as sessões do nome de usuário logado. Aqui está o que eu tenho até agora. Eu quero que funcione como qualquer usuário

( lastlog awk ' {print  } ' | tail -n +2)
do
NOW=$(date +%s)
USR=$(lastlog | awk '( print , , ,  )' | grep $U)
USRDATE=$(echo $USR | cut -d":" -f2)
(( USRDATE = $(date --date ""$USRDATE" +%s) / 86400 ))
(( NOW = NOW / 86400 ))
(( DAYS = NOW - USRDATE ))
echo "The user $U: logged in $DAYs days ago"
done
    
por Macenbro 25.09.2013 / 20:18

1 resposta

1

Eu pulo o lastlog completamente e vejo o comando who . Isso faz praticamente tudo o que você está perguntando:

$ who
oli      tty7         2013-09-20 14:33 (:0)
oli      pts/0        2013-09-20 14:33 (:0)
oli      pts/2        2013-09-21 22:00 (:0)
oli      pts/4        2013-09-25 20:09 (:0)
oli      pts/5        2013-09-24 11:02 (:0)

w é muito bom também, mas o tempo de login é um pouco mais coloquial, por isso não é adequado para scripts:

$ w
 20:13:15 up 5 days,  5:39,  5 users,  load average: 0.49, 0.53, 0.45
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
oli      tty7     :0               Fri14    5days  8:35m  0.03s /bin/sh /usr/bin/startkde
oli      pts/0    :0               Fri14    5days  0.00s  3:36  kdeinit4: kded4 [kdeinit]                      
oli      pts/2    :0               Sat22    3days  0.08s  0.08s /bin/bash
oli      pts/4    :0               20:09    3.00s  0.08s  0.00s w
oli      pts/5    :0               Tue11    5:45m  2:42   2:42  node /usr/bin/grunt watch
    
por Oli 25.09.2013 / 21:12