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.