Comment extraire l'historique de connexion?

94

J'ai besoin de connaître l'historique de connexion pour un utilisateur spécifique (c'est-à-dire la connexion et l'heure de déconnexion). Comment extraire cet historique pour une plage de dates spécifique sous Linux?

shox
la source

Réponses:

133

Vous pouvez essayer la lastcommande:

last john 

Il affiche l'historique de connexion / déconnexion de l'utilisateur john. Alors que courir juste

last

affiche l'historique de connexion / sortie de tous les utilisateurs.

Izac
la source
5
Cela ne renvoie que les valeurs du mois en cours dans la plupart des distributions Linux.
ewwhite
42

Si vous devez remonter plus d’un mois dans l’historique, vous pouvez lire le /var/log/wtmp.1fichier à l’aide de la lastcommande.

last -f wtmp.1 johnaffichera l’historique des connexions du mois précédent pour l’utilisateur john.

La dernière sortie du journal n'est pas trop lourde et relativement facile à analyser, je vais donc probablement diriger la sortie vers grep pour rechercher un modèle de date spécifique.

last john | grep -E 'Aug (2[0-9]|30) 'montrer 20-30 août. Ou quelque chose comme:

last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) 'acquérir du 10 au 30 juillet pour un utilisateur john.

ewwhite
la source
21

Comment extraire l'historique de connexion pour une plage de dates spécifique sous Linux?

Un exemple pour lister tous les utilisateurs connectés du 25 au 28 août:

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 }'extraire la date et l'heure de la colonne correspondante de la lastsortie
  • +%s convertir date / heure en époque
  • -ge représenter plus grand ou égal
  • -le représenter moins ou égal

Vous pouvez également le faire pour un utilisateur spécifique avec last <username>.

quanta
la source
1
C'est une expression extrêmement laide. Grep ne serait-il pas plus propre puisque la lastsortie est assez lisible?
ewwhite
3
Pouvez-vous passer grepdu "15 août à 09h00" au "25 août à 21h00"?
quanta
1
Le PO n'a pas demandé d'intervalle de temps.
ewwhite
1
@ewwhite l'expression me semble magnifique, si vous n'aimez pas l'apparence de la syntaxe bash, ce n'est peut-être pas le site pour vous.
ekerner
1
@ekerner Vous avez raison. J'irai ailleurs;)
ewwhite