Есть ли способ определить, например, что текущий день является первым входом для этого месяца? Я пытаюсь использовать его в своем сценарии. Я знаком с last, но это не похоже на команду для этой работы.
Давайте возьмем это для примера:
Если сегодня первый вход месяца, эхо «первый!» else echo "nope"Пример сценария:
2 июля - мой первый логин за июль, я зашел в систему 5 раз в этот день. Он должен только эхо «первым» на моем первом входе и «nope» на последующие 4.
Вы можете проанализировать текущий файл журнала 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 и по умолчанию на ubuntu они хранятся в /etc/logrotate.conf: [!d5 ]
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
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.
Подход, не полагающийся на 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