Команда Bash для определения первого входа в систему в течение периода определенного времени

Существует ли способ решить, например, что текущий день является первым входом в систему в течение этого месяца? Я пытаюсь использовать его в своем сценарии. Я знаком с last но это, кажется, не команда для этого задания.

Давайте возьмем это для примера:

  • Если сегодня первый вход в систему месяца, эхо "сначала!"
  • еще повторите "нет"

Демонстрационный сценарий:

2 июля мой первый вход в систему в течение месяца июля, я зарегистрировался в 5 раз в тот день. Это должно только отозваться эхом "сначала" на моем первом входе в систему и "нет" на последующих 4.

1
задан 15 July 2015 в 14:22

4 ответа

Используя last и awk

last -R "$USER" | \
    perl -ne 'print unless /wtmp\sbegins/ || /^$/' | \
    awk 'END {print $4,$5,$6}'

last поиски назад через файл /var/log/wtmp (или файл, определяемый -f флаг), и дисплеи, список всех пользователей вошел в систему (и) начиная с того файла, был создан.

На значение по умолчанию /var/log/wtmp создается на каждом новом месяце:

% awk '/\/var\/log\/wtmp/,/}/' /etc/logrotate.conf 
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

last -R $USER возвраты все записи от /var/log/wtmp для данного пользователя. Первый вход в систему помещается у основания вывода, поэтому END в моем awk команда.

% last -R "$USER"   
aboettge pts/1        Wed Jul 15 12:04   still logged in   
aboettge pts/1        Wed Jul 15 11:29 - 12:04  (00:34)    
aboettge pts/1        Wed Jul 15 08:08 - 11:29  (03:21)    
aboettge pts/1        Wed Jul 15 08:08 - 08:08  (00:00)    
aboettge pts/1        Wed Jul 15 08:07 - 08:08  (00:00)    
aboettge tty2         Wed Jul 15 08:03   still logged in   
aboettge pts/1        Tue Jul 14 12:58 - down   (00:53)    
aboettge pts/1        Tue Jul 14 09:06 - 12:58  (03:51)    
aboettge pts/1        Tue Jul 14 09:03 - 09:06  (00:02)    
aboettge pts/1        Tue Jul 14 08:23 - 09:03  (00:40)    
aboettge pts/1        Tue Jul 14 08:22 - 08:23  (00:00)    
aboettge tty2         Tue Jul 14 08:22 - down   (05:28)    
aboettge pts/1        Mon Jul 13 12:01 - 16:26  (04:24)    
aboettge pts/1        Mon Jul 13 11:49 - 11:59  (00:10)    
aboettge pts/1        Mon Jul 13 11:46 - 11:49  (00:02)    
aboettge tty2         Mon Jul 13 11:44 - down   (04:42)    
aboettge pts/2        Mon Jul 13 11:26 - 11:35  (00:08)    
aboettge tty2         Mon Jul 13 11:25 - down   (00:09)    
aboettge pts/3        Fri Jul 10 14:26 - 14:28  (00:01)    
aboettge pts/3        Fri Jul 10 14:23 - 14:26  (00:03)    
aboettge pts/2        Fri Jul 10 13:34 - 15:27  (01:53)    
aboettge pts/2        Fri Jul 10 13:31 - 13:31  (00:00)    
aboettge pts/2        Fri Jul 10 13:25 - 13:30  (00:05)    
aboettge pts/2        Fri Jul 10 10:28 - 13:19  (02:50)    
aboettge pts/1        Fri Jul 10 08:35 - 15:27  (06:52)    
aboettge tty2         Fri Jul 10 08:00 - down   (07:28)    
aboettge pts/1        Thu Jul  9 16:25 - 16:27  (00:01)    
aboettge tty2         Thu Jul  9 16:21 - down   (00:06)    
aboettge tty1         Thu Jul  9 16:03 - crash  (00:00)    
aboettge tty1         Thu Jul  9 15:29 - 16:03  (00:33)    
aboettge pts/1        Thu Jul  9 14:32 - 14:32  (00:00)    
aboettge pts/1        Thu Jul  9 08:51 - 08:51  (00:00)    
aboettge pts/1        Thu Jul  9 08:51 - 08:51  (00:00)    
aboettge pts/1        Thu Jul  9 08:50 - 08:51  (00:00)    
aboettge pts/1        Thu Jul  9 08:46 - 08:46  (00:00)    
aboettge pts/1        Thu Jul  9 08:46 - 08:46  (00:00)    
aboettge pts/1        Thu Jul  9 08:45 - 08:45  (00:00)    
aboettge pts/1        Thu Jul  9 08:44 - 08:44  (00:00)    
aboettge pts/1        Thu Jul  9 08:42 - 08:42  (00:00)    
aboettge pts/1        Thu Jul  9 08:42 - 08:42  (00:00)    
aboettge pts/1        Thu Jul  9 08:42 - 08:42  (00:00)    
aboettge pts/1        Thu Jul  9 08:41 - 08:41  (00:00)    
aboettge pts/1        Thu Jul  9 08:41 - 08:41  (00:00)    
aboettge pts/1        Thu Jul  9 08:40 - 08:41  (00:00)    
aboettge pts/1        Thu Jul  9 08:39 - 08:39  (00:00)    
aboettge pts/1        Thu Jul  9 08:38 - 08:38  (00:00)    
aboettge pts/1        Thu Jul  9 08:36 - 08:36  (00:00)    
aboettge pts/1        Thu Jul  9 08:36 - 08:36  (00:00)    
aboettge pts/1        Thu Jul  9 08:36 - 08:36  (00:00)    
aboettge pts/1        Thu Jul  9 08:35 - 08:35  (00:00)    
aboettge pts/1        Thu Jul  9 08:35 - 08:35  (00:00)    
aboettge pts/2        Thu Jul  9 07:50 - 16:03  (08:12)    
aboettge :0           Thu Jul  9 07:50 - crash  (08:13)    
aboettge pts/1        Wed Jul  8 16:13 - 16:27  (00:13)    
aboettge pts/2        Wed Jul  8 13:47 - 16:27  (02:39)    
aboettge pts/1        Wed Jul  8 11:30 - 14:14  (02:44)    
aboettge pts/1        Wed Jul  8 08:18 - 11:29  (03:11)    
aboettge :0           Wed Jul  8 08:02 - crash  (23:47)    
aboettge pts/2        Tue Jul  7 08:54 - 08:55  (00:00)    
aboettge pts/1        Tue Jul  7 08:02 - 13:13  (05:10)    
aboettge :0           Tue Jul  7 07:50 - down   (05:23)    
aboettge pts/1        Mon Jul  6 09:55 - 14:48  (04:53)    
aboettge :0           Mon Jul  6 08:27 - crash  (23:19)    
aboettge pts/2        Fri Jul  3 07:52 - 15:30  (07:38)    
aboettge :0           Fri Jul  3 07:51 - down   (07:40)    
aboettge pts/2        Thu Jul  2 15:16 - 15:18  (00:01)    
aboettge pts/2        Thu Jul  2 15:07 - 15:07  (00:00)    
aboettge pts/1        Thu Jul  2 14:46 - 16:21  (01:35)    
aboettge pts/1        Thu Jul  2 09:53 - 09:53  (00:00)    
aboettge pts/2        Thu Jul  2 08:00 - 14:41  (06:40)    
aboettge :0           Thu Jul  2 08:00 - crash  (23:47)    
aboettge pts/5        Wed Jul  1 14:16 - 14:38  (00:21)    
aboettge pts/3        Wed Jul  1 14:01 - 16:10  (02:09)    
aboettge pts/2        Wed Jul  1 13:27 - 16:10  (02:42)    
aboettge pts/1        Wed Jul  1 13:22 - 16:10  (02:48)    
aboettge :0           Wed Jul  1 13:15 - 16:21  (03:05)    
aboettge pts/2        Wed Jul  1 11:30 - 11:36  (00:06)    
aboettge pts/1        Wed Jul  1 11:29 - 13:02  (01:32)    
aboettge pts/1        Wed Jul  1 11:27 - 11:29  (00:01)    
aboettge pts/2        Wed Jul  1 08:28 - 11:27  (02:58)    

wtmp begins Wed Jul  1 08:28:18 2015

Пример

% last -R "$USER" | perl -ne 'print unless /wtmp\sbegins/ || /^$/' | awk 'END {print $4,$5,$6}'
Jul 1 08:28

Разбивка

  • % last -R "$USER"

    посмотрите выше

  • perl -ne 'print unless /wtmp\sbegins/ || /^$/'

    удаляет пустые строки и wtmp begins …

  • awk 'END {print $4,$5,$6}'

    печатает поля 4, 5 и 6 от последней строки, разделитель по умолчанию (пространство)

2
ответ дан 7 December 2019 в 12:44
last <username> | tac | awk '{
    if ( b != $5 && NR !=1 ){
      b=$5; print $4,$5,$6,$7,$8,$9,$10
    }
}'

Это покажет первый вход в систему на каждом месяце в last.

Здесь tac инвертирует эти last вывод.

awk покажет только первое вхождение новой строки в столбце 5, который является первым входом в систему месяца.

NR !=1 устранит wtmp begins строка.

0
ответ дан 7 December 2019 в 12:44

Подход, не полагающийся last или /var/log/wtmp, если скрипт запущен только однажды сразу после входа в систему, должен создать пустой файл. На следующем запуске, если его время создания ранее, чем одно в течение первого момента текущего месяца, или если файл не существует, то ècho "first!". Или в случае, обновите или создайте файл с touch в следующий раз.

MONTH=`/bin/tempfile`
touch -d "01 $(date +'%b %y')" "$MONTH"
if [ ~/.lastlogin -ot "$MONTH" ]
then echo "first!"
fi
rm "$MONTH"
touch ~/.lastlogin
0
ответ дан 7 December 2019 в 12:44

Вы могли проанализировать ток wtmp файл журнала с rawtmp.

Сначала установите инструмент:

sudo apt-get install sac

Затем используйте следующую команду:

(rawtmp -s 07/01/15; rawtmp -s 07/01/15 -w /var/log/wtmp.1) \
| grep 'LOGIN Process' | sort | head -n 1 | awk -F: '{print $1}' \
| perl -pe 's/(\d+)/localtime($1)/e' 

Для меня это производит:

Wed Jul  1 08:40:58 2015

Убеждаться получить записи в течение целого месяца вызовы команды rawtmp два раза. Во второй раз с помощью сохраненного вращения журналов (/var/log/wtmp.1).

wtmp настройки вращения организованы logrotate и по умолчанию на человечности они хранятся в /etc/logrotate.conf:

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}
1
ответ дан 7 December 2019 в 12:44

Другие вопросы по тегам:

Похожие вопросы: