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.

Steve Robbins
fonte
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
EEAA
fonte
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
nohup
fonte
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
Fredrick Gauss
fonte
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
Marcos Valle
fonte
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
Chang
fonte
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
Rui Monteiro
fonte
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
Ayaz Hussain
fonte