Вы можете подойти к этому с помощью простого awk-фильтра; просто передайте текущую метку времени и отсечку, которая вас интересует. Он будет анализировать ввод в поисках имен пользователей и их времени _последнего _значения входа в систему. Если он находит значение, которое старше отсечки, он сообщает соответствующему пользователю.
В приведенном ниже примере используется приблизительное значение 1 год (31 536 000 секунд ).
awk -v now=$(date +%s) -v cutoff=31536000 '
/^[^-+@~ ][^:"#,=\\\/?` ]+:$/ {
user=$1
sub(/:$/, "", user)
}
/time_last_login = [[:digit:]]+/ {
if (now - $3 > cutoff) print user " has not logged in within the cutoff"
}
' /etc/security/lastlog
Регулярное выражение, которое я использовал для поиска имени пользователя, взято из документации mkuser . После захвата строки имени пользователя ()я удаляю завершающее двоеточие из имени пользователя.