Como posso listar todos os usuários com seu nome de usuário e nome de grupo? em sistemas UNIX

0

Como posso listar todos os usuários com seu nome de usuário e nome de grupo em sistemas UNIX?

Eu quero pegar o formulário de relatório /etc/passwd file e /etc/group file

No arquivo passwd, recebo apenas GIDS, mas também quero obter o nome do grupo de /etc/group , e ele deve vir em um relatório como eu quero abaixo da referência Fotomat

User neme (ID do usuário), nome do grupo,

    
por PRAKASH 23.02.2018 / 12:01

2 respostas

3

Com o comando único awk :

awk -F':' 'NR==FNR{ a[$3]=$1; next }{ print $1", "a[$4] }' /etc/group /etc/passwd
  • -F':' - separador de campos
  • NR==FNR{ a[$3]=$1; next } - processando o primeiro arquivo de entrada (ou seja, /etc/group ):
    • a[$3]=$1 - capture nome do grupo $1 usando identificador de grupo $3 como array a key
    • next - pula para o próximo registro
  • { print $1", "a[$4] } - ação para o segundo arquivo de entrada (por exemplo, /etc/passwd ):
    • $1 - o primeiro campo; indicando nome de usuário
    • a[$4] - obter nome do grupo por id do grupo (apresentado pelo campo $4 )
por 23.02.2018 / 12:13
0

O seguinte faz um JOIN relacional nos dois arquivos no GID e gera o nome de usuário e o nome do grupo com um : intermediário:

join -t : -1 4 -2 3 -o 1.1,2.1 \
    <( sort -t : -k4,4 /etc/passwd ) \
    <( sort -t : -k3,3 /etc/group )

O GID está na coluna 4 no arquivo passwd e na coluna 3 no arquivo group .

Com -1 e -2 especificamos qual é o campo de união nos dois arquivos de entrada e com -o especificamos quais campos queremos gerar de cada arquivo (o primeiro campo de cada arquivo).

A classificação de cada arquivo no campo de associação é necessária para que join funcione.

Para obter isso no formato exato solicitado, apenas canalize-o com sed 's/:/, /' , que substitui os dois-pontos por vírgula e espaço.

    
por 23.02.2018 / 12:10