Wie extrahiere ich den Anmeldeverlauf?

94

Ich muss den Anmeldeverlauf für einen bestimmten Benutzer kennen (dh Anmelde- und Abmeldezeit). Wie extrahiere ich diesen Verlauf für einen bestimmten Datumsbereich in Linux?

shox
quelle

Antworten:

133

Sie können den lastBefehl versuchen :

last john 

Es druckt den Login / Out-Verlauf von Benutzer john aus. Wobei gerade läuft

last

druckt den Login / Out-Verlauf aller Benutzer aus.

Izac
quelle
5
Dies gibt in den meisten Linux-Distributionen nur Werte für den aktuellen Monat zurück.
Ewwhite
42

Wenn Sie mehr als einen Monat in der Geschichte zurücklegen müssen, können Sie die /var/log/wtmp.1Datei mit dem lastBefehl lesen .

last -f wtmp.1 johnzeigt den Verlauf der Logins des Vormonats für den Benutzer an john.

Die letzte Protokollausgabe ist nicht zu umfangreich und relativ einfach zu analysieren. Daher würde ich die Ausgabe wahrscheinlich an grep leiten, um nach einem bestimmten Datumsmuster zu suchen.

last john | grep -E 'Aug (2[0-9]|30) '20. bis 30. August zu zeigen. Oder so etwas wie:

last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) '10-30 Juli für Benutzer zu erwerben john.

ewwhite
quelle
21

Wie extrahiere ich den Anmeldeverlauf für einen bestimmten Datumsbereich in Linux?

Ein Beispiel, um alle Benutzer aufzulisten, die sich vom 25. bis 28. August anmelden:

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 }'um das Datum und die Uhrzeit in der entsprechenden Spalte aus der lastAusgabe zu extrahieren
  • +%s um datetime in Epochenzeit umzuwandeln
  • -ge stehen für größer als oder gleich
  • -le stehen für weniger als oder gleich

Sie können dies auch für einen bestimmten Benutzer mit tun last <username>.

Quanten
quelle
1
Das ist ein mächtig hässlicher Ausdruck. Wäre grep nicht sauberer, da die lastAusgabe ziemlich lesbar ist?
ewwhite
3
Können Sie grepvon "15. August 09:00" bis "25. August 21:00"?
Quanten
1
Das OP hat nicht nach Zeiträumen gefragt.
Ewwhite
1
@ewwhite der Ausdruck sieht für mich wunderschön aus, wenn Sie das Aussehen der Bash-Syntax nicht mögen, ist dies möglicherweise nicht die richtige Seite für Sie.
Ekerner
1
@ekerner Du hast recht. Ich gehe woanders hin;)
ewwhite