Jak wyodrębnić historię logowania?

94

Muszę znać historię logowania dla określonego użytkownika (tj. Czas logowania i wylogowania). Jak wyodrębnić tę historię dla określonego zakresu dat w systemie Linux?

shox
źródło

Odpowiedzi:

133

Możesz spróbować wykonać lastpolecenie:

last john 

Drukuje historię logowania / wylogowywania użytkownika Johna. Podczas gdy bieganie właśnie

last

drukuje historię logowania / wylogowywania wszystkich użytkowników.

Izac
źródło
5
Zwraca to wartości tylko dla bieżącego miesiąca w większości dystrybucji Linuksa.
ewwhite
42

Jeśli chcesz cofnąć się do historii o więcej niż miesiąc, możesz odczytać /var/log/wtmp.1plik za pomocą lastpolecenia.

last -f wtmp.1 johnpokaże historię logowania użytkownika z poprzedniego miesiąca john.

Ostatni wynik dziennika nie jest zbyt ciężki i stosunkowo łatwy do przeanalizowania, więc prawdopodobnie przepuściłbym dane wyjściowe do grep w celu znalezienia określonego wzorca daty.

last john | grep -E 'Aug (2[0-9]|30) 'pokazać 20-30 sierpnia. Lub coś takiego:

last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) 'uzyskać 10-30 lipca dla użytkownika john.

ewwhite
źródło
21

Jak wyodrębnić historię logowania dla określonego zakresu dat w systemie Linux?

Przykład listy wszystkich użytkowników logujących się od 25 do 28 sierpnia:

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 }'aby wyodrębnić datę i godzinę w odpowiedniej kolumnie z lastdanych wyjściowych
  • +%s przekonwertować datę i godzinę na czas epoki
  • -ge oznacza większe lub równe
  • -le oznacza mniejszy lub równy

Możesz to również zrobić dla konkretnego użytkownika za pomocą last <username>.

kwanty
źródło
1
To niesamowicie brzydkie wyrażenie. Czy grep nie byłby czystszy, ponieważ lastdane wyjściowe są dość czytelne?
ewwhite
3
Czy potrafisz grepod „15 sierpnia 09:00” do „25 sierpnia 21:00”?
kwanty
1
OP nie poprosił o przedziały czasowe.
ewwhite
1
@ewwhite wyrażenie wygląda dla mnie pięknie, jeśli nie podoba ci się wygląd składni bash, może to nie być strona dla ciebie.
ekerner
1
@ekerner Masz rację. Pójdę gdzie indziej;)
ewwhite