Se você quiser listar usuários cujo grupo principal é somegroup
:
gid=$(getent group somegroup | awk -F : '{print $3}')
getent passwd | awk -F : -v gid="$gid" '$4 == gid'
Esta resposta pressupõe um Linux não embarcado, pois depende do Glibc getent
.
Você pode configurar os campos que deseja na saída, ajustando o segundo comando awk. Por exemplo, para imprimir apenas o nome real e o número de telefone:
getent passwd | awk -F : -v gid="$gid" '$4 == gid {print $5}'
Se você deseja listar usuários que têm somegroup
como um grupo suplementar, primeiro é necessário recuperar os IDs de usuário do banco de dados do grupo.
usernames=$(getent group somegroup | awk -F : '{print $3 "," $4}')
gid=${usernames%%,*}; usernames=${usernames#*,}
getent passwd | awk -F : -v gid="$gid" -v usernames="$usernames" '
BEGIN {split(usernames, names, /,/); for (name in names) user[name]=1}
name[$1] || $4==gid
'
Você não pode imprimir senhas de usuários porque elas não são armazenadas. Você pode imprimir seu hash de senha se tiver permissão para acessá-lo. Se o seu banco de dados de senha for local, os hashes de senha estarão no arquivo /etc/shadow
. Se você obtiver uma lista de nomes de usuários e outros campos, poderá juntar-se a ele com o arquivo shadow:
… | awk … | join -t : -j 1 - /etc/shadow