Não sei se entendi bem. É para isso que você está depois?
lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$"
Aqui está o detalhamento:
-
awk '{if (NR > 1) print $1 }'
- imprime a primeira coluna ignorando a primeira linha (cabeçalho do último registro) -
grep -f - /etc/passwd
- use a entrada padrão como um arquivo para obter padrões e pesquisar padrões em/etc/passwd
-
grep "/bin/bash$"
- grep para / bin / bash,$
significaEOL
.
Algumas notas:
-
lastlog -b 90
- que fornece registros mais antigos de 90 dias. Se você quiser que os usuários que fizeram login nos últimos 90 dias, uselastlog -t 90
. - Eu só fui com
(NR > 1)
solution porque estamos usandoawk
de qualquer maneira. Uma maneira mais sucinta de pular a primeira linha de um arquivo seriased 1d
.
EDITAR
Você pode usar um idioma semelhante se também quiser filtrar os registros com !
de / etc / shadow. Então o comando completo seria:
lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$" | cut -d ':' -f 1 | grep -f - /etc/shadow | grep -v ":\!:"
-
cut -d':' -f 1
divide a linha usando:
como um delimitador e retorna o primeiro campo -
grep -v
significa inverter correspondência (selecione linhas não correspondentes).