Mostrar todos os usuários e seus grupos / vice-versa


70

Sei que tenho grupos e usuários existentes, mas não tenho certeza sobre a associação deles. Existe um comando shell que eu possa usar para listar todos os usuários ou todos os grupos e um comando para listar todos os grupos / usuários para um usuário / grupo especificado?

Então, algo como showuserslistaria todos os usuários e showgroups -u thisusermostraria todos os grupos que existem thisusernele.


não existe tal comando. Você precisa escrever por si mesmo.
— Chris

que tal #cat /etc/passwd
— Sudip Bhandari

Respostas:


93

Todos os usuários:

$ getent passwd

Todos os grupos:

$ getent group

Todos os grupos com um usuário específico:

$ getent group | grep username

Descobri que existe um usuário chamado speech-dispatcherque pertence ao grupo de áudio (com base em groups speech-dispatcher). Mas não está listado sob getent groupcomando! Qual é o problema?
— PHP Learner

3
@PHPLearner Se você tiver outra pergunta, poste uma pergunta , não um comentário.
— EEAA

+1, uma vez que também listará usuários / grupos não encontrados nos arquivos /etc/passwd& convencionais, /etc/groupou seja, quando um sistema estiver configurado para usar diretórios centrais como NIS e LDAP, ou qualquer outro banco de dados de usuário / grupo alternativo, desde que seja compatível com a enumeração de usuário / grupo .
— HBruijn

Isso não retornará todos os usuários e grupos em uma configuração ldap ou sssd se a enumeração estiver desativada.
— Jens Timmerman

16

Listar usuários e seus grupos:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

Listar grupos e seus usuários:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done

11
Embora isso provavelmente funcione, parece um pouco complicado demais, não é, quando existem perfeitamente bons comandos simples para fazer isso?
— EEAA 31/01

Certamente não receberia nada que residisse em um repositório centralizado. E essas são definitivamente as informações que você gostaria de ver.
— Magalhães

Excelente, muito útil, seria melhor mencionar que são comandos separados.
— Mian Asbat Ahmad

5

Se você não se importa com usuários remotos, como LDAP ou NIS, para listar usuários e seus grupos associados de uma maneira simples:

cut -d: -f1 /etc/passwd | xargs groups

Resultado;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev

11
Isto tem o mesmo problema que a resposta de Chang em que ele ignora usuários / grupos originários de bases de dados, tais como LDAP, NIS, etc.
— MadHatter

No entanto, isso gera informações muito bem organizadas em um formato incrivelmente claro, portanto ainda pode ser um primeiro passo útil. Isso ajudou minha memória a respeito da sintaxe de / etc / group e / etc / passwd!
— Chris Woods,

3

Listar todos os usuários

cut -d':' -f 1 /etc/passwd

Ou

awk -F ':' '{print $1}' /etc/passwd

Enquanto cat / etc / passwd mostra todos os usuários (e várias outras coisas), cut -d ':' -f 1 é uma maneira simples de dividir cada linha com ':' como delimitador e extrair apenas o primeiro campo (usuários ) Praticamente o mesmo que a versão awk.

Listar todos os grupos

cut -d':' -f 1 /etc/group

Ou

awk -F ':' '{print $1}' /etc/group

Adivinha o quê, muito semelhante à listagem de usuários. Basta analisar / etc / group .

Outra maneira interessante, talvez mais próxima do que o OP queria, é a compgen . Não tenho certeza sobre problemas de compatibilidade.

compgen -u
compgen -g

2
Olá Elliot Baily, bem-vindo ao Server Fault! Observe que esta pergunta tem mais de 5 anos e já tem uma resposta correta e aceita. Observe também que sua solução só funciona se os usuários estiverem armazenados em / etc / passwd; a resposta aceita também funciona para outros bancos de dados do usuário (como NIS ou LDAP). Se você quiser responder perguntas antigas (o que é perfeitamente bom!), Consulte a lista de perguntas não respondidas - muitas perguntas procurando amor!
— marcelm

-1

para debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

2
Em contraste com o já aceitou este não lista os usuários / grupos que se originam a partir de um banco de dados de usuário remoto, como LDAP, NIS etc ....
— HBruijn

-2

Como isso:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

11
Não /etc/gshadow. Não contém membros do grupo (contém /etc/group) e a resposta aceita de 4,5 anos atrás é muito mais geral, pois também lida com grupos remotos.
— Sven

-2

Use este comando para obter todo o grupo e usuários nesse grupo específico.

grep '
> ' /etc/group
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.