Как извлечь историю входа?

94

Мне нужно знать историю входа для конкретного пользователя (т.е. время входа и выхода). Как мне извлечь эту историю для определенного диапазона дат в Linux?

Shox
источник

Ответы:

133

Вы можете попробовать lastкоманду:

last john 

Распечатывает историю входа / выхода пользователя john. В то время как работает только

last

распечатывает историю входа / выхода всех пользователей.

Izac
источник
5
Это только возвращает значения за текущий месяц в большинстве дистрибутивов Linux.
ewwhite
42

Если вам нужно пойти дальше в истории, чем на один месяц, вы можете прочитать /var/log/wtmp.1файл с помощью lastкоманды.

last -f wtmp.1 johnпокажет историю логинов за предыдущий месяц john.

Последние выходные данные журнала не слишком тяжелы и относительно просты для анализа, поэтому я бы, вероятно, передал выходные данные в grep, чтобы найти конкретный шаблон даты.

last john | grep -E 'Aug (2[0-9]|30) 'показать 20-30 августа. Или что-то вроде:

last -f /var/log/wtmp.1 john | grep -E 'Jul (1[0-9]|2[0-9]|30) 'приобрести 10-30 июля для пользователя john.

ewwhite
источник
21

Как извлечь историю входа для определенного диапазона дат в Linux?

Пример для списка всех пользователей логин с 25 по 28 августа:

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 }'извлечь дату и время в соответствующем столбце из lastвывода
  • +%s преобразовать дату и время в эпоху
  • -ge стоять больше или равно
  • -le стоять меньше или равно

Вы также можете сделать это для конкретного пользователя с last <username>.

кванты
источник
1
Это очень уродливое выражение. Разве grep не будет чище, так как lastвывод довольно читабелен?
ewwhite
3
Можно ли grepс «15 августа 09:00» на «25 августа 21:00»?
кванты
1
ОП не просил о временных диапазонах.
ewwhite
1
@ewwhite выражение выглядит красиво для меня, если вам не нравится внешний вид синтаксиса bash, это может быть не сайт для вас.
Ekerner
1
@ekerner Ты прав. Я пойду в другое место;)
17