В сценарии bash я пытаюсь получить дату последнего входа с last
например:
last bob -n 1
Что дает мне:
bob tty1 Fri Jul 18 10:43 - 10:43 (00:00)
wtmp begins Wed Feb 5 17:47:13 2014
а затем извлечь дату из этой строки и вставить ее в lastb
чтобы получить количество неудачных логинов с момента последнего успешного завершения.
например:
lastb bob -t $MYLASTLOGIN
man lastb показывает, что формат даты должен быть -t YYYYMMDDHHMMSS
user=bob lastb $user -t $(date -d "$(last $user | head -n 1 | tr -s '[:space:]' '\t' | cut -f 4-7)" +%Y%m%d%H%M%S)
Более читаемо
user=bob
last_login=$(last $user | head -n 1 | tr -s '[:space:]' '\t' | cut -f 4-7)
datetime=$(date -d "$last_login" +%Y%m%d%H%M%S)
lastb $user -t $datetime
Обратите внимание, что мой last
результат немного отличается от вашего, с дополнительным полем: отрегулируйте ваши cut
столбцы соответственно
$ last glennj -n 1
glennj pts/7 :0 Sun Jul 20 19:01 still logged in
wtmp begins Fri Jul 4 21:15:28 2014
Вы можете попробовать сопоставить строку даты с grep
, сохранить результат в переменной, используя date
для преобразования и поместить результат этого в команду:
LOGINDATE=$(last bob -n1 | egrep -o '[A-Z][a-z]{2} [A-Z][a-z]{2} [0-9]{1,2} [0-9]{2}:[0-9]{2}')
BLOCKDATE=$(date --date="$LOGINDATE" "+%Y%m%d%H%M%S")
lastb bob -t $BLOCKDATE