Uma maneira melhor de obter usuários locais é ver se o usuário possui um shell de login válido:
getent passwd | grep -f /etc/shells
Aqui está algo que deve funcionar:
getent passwd | grep -f /etc/shells | tr ',' ':' | \
awk -F: '{print $1, $5}' | while read USER NAME
do
echo $NAME:$(chage -l $USER| awk -F': ' '/Password expires/{print $2}')
done | column -ts:
Usando xargs
, pode-se fazer:
getent passwd | grep -f /etc/shells | tr ',' ':' | awk -F: '{print $1, $5}' | \
xargs -L1 bash -c 'echo ${@:2}:$(chage -l $1| awk -F": " "/Password expires/{print \}")' : | \
column -ts:
- Usar
tr
para substituir o,
por:
nos permite levantar o nome completo diretamente do campo GECOS. -
column
pode receber um delimitador de entrada com-s
, o que nos permite manter nomes com várias palavras em uma coluna. -
-L
fazxargs
usar uma linha de entrada por comando, para que o nome de usuário e o nome completo sejam passados para cada comando. -
${@:2}
- todos os parâmetros do segundo parâmetro em diante (ignorando o primeiro).
Exemplo de saída:
root never
Murukesh Mohanan never
Guest never