Eu tentei pesquisar no Google, mas não chego a lugar algum. Como posso listar todos os membros de um grupo chamado mygroup
na linha de comando no OS X?
$ dscl . list /groups
vai me dar todos os grupos ... mas como posso ver os membros de cada grupo?
macos
command-line
user-accounts
Meltemi
fonte
fonte
dscacheutil -q group -a name admin
só me deu 1 resultado, enquanto o script de shell do respondente aceito me deu 2 resultados.Não há comando padrão que lista todos os membros de um grupo no OS X, então aqui está uma função shell que faz isso:
Copie a linha de comando acima para o Terminal e digite (onde mygroup é o nome de um grupo existente).
members mygroup
Alguma explicação para quem está interessado:
Existem cinco maneiras diferentes (que eu conheço) de que um usuário possa ser membro de um grupo no OS X. Não é garantido que o comando produza todos ou todos os membros do mygroup , porque a associação também vem dos usuários ' ID do grupo primário , associação por UUID do usuário , herança de associação de um grupo para outro e associações calculadas pelo sistema, como o grupo todos .
dscl . -read /Groups/mygroup GroupMembership
Portanto, em vez de tentar acompanhar tudo isso, parece uma idéia melhor simplesmente verificar a associação de todos os usuários do sistema (usando dsmemberutil ), e é isso que a função shell e o script abaixo fazem.
Esse script de membros é equivalente à função shell, mas possui um tratamento melhor da entrada inválida:
Informações complementares:
As cinco maneiras de ser membro do grupo são:
Estes podem ser explorados com comandos como
dscl . -read /Groups/somegroup
Exemplo de 4 : A associação ao grupo Operador de Impressão __lpoperator_ é herdada pelos membros do grupo Administrador de Impressão __lpadmin_, e a associação nesse grupo é herdada pelos membros do grupo administrador .
Exemplo de 5 :
VEJA TAMBÉM
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)
fonte
Nota: Esta foi a minha resposta inicial, escrita antes que eu percebesse que esta resposta ainda fornece um resultado incompleto . (Por exemplo, ele não encontra os membros do todos grupo!) Então eu escrevi uma resposta melhor, que inclui um script que lista todos os membros de um grupo no OS X .
A propriedade GroupMembership do mygroup pode ser impressa com dscl assim:
Mas isso não garante a saída de todos (ou mesmo de todos) membros do grupo. O que falta são os usuários que são membros do grupo apenas por tê-lo como seu ID de grupo principal .
Um exemplo comum disso no OS X são as contas de login regulares, que têm a equipe (grupo 20) como seu grupo principal, mas não são listadas na propriedade GroupMembership do grupo de equipes .
Esses usuários podem ser encontrados pesquisando o ID do grupo primário numérico (gid), como este exemplo, para o grupo de funcionários (gid 20):
e o gid numérico (PrimaryGroupID) do mygroup é encontrado por:
fonte
Para obter todos os grupos em que um usuário está , você pode usar o seguinte:
Saída de exemplo:
Utilizando o comando acima, é possível obter todos os usuários que pertencem a um grupo :
OSX :
Unix :
fonte
ATENÇÃO: O comando acima nem sempre exibe uma lista completa de TODOS os membros do grupo. Por exemplo, para o grupo "equipe", você só obtém "raiz" como um membro do grupo incompleto. Para verificar, use um dos seguintes comandos como usuário padrão (NÃO "raiz"):
id -Gn
OUgroups
Como resultado, você verá todos os grupos dos quais o usuário logado padrão é membro. Um deles deve ser "equipe". Assim, além de "root", há mais membros do grupo "staff", que não são listados pelo comando
dscl . -read /Groups/[groupname] | grep GroupMembership
. O mesmo vale para o comandodscacheutil -q group -a name staff
que também sugere que apenas "root" é um membro do grupo "staff", o que é obviamente incompleto.O único método confiável para obter realmente TODOS os membros de um grupo no terminal no OSX já é fornecido aqui por Arne Stenström. Isso está usando sua função shell resp. seu script shell. Ambos funcionam muito bem!
fonte
Comando
Semelhante à resposta do @ duperuser, o seguinte imprimirá apenas os usuários do grupo
admin
com espaços entre eles:Resultado
A execução do comando acima produzirá algo como isto:
Demolir
O
dscacheutil
comando é usado para consultar informações sobre várias categorias do cache do Serviço de Diretório do sistema. A-q
opção permite especificar a categoria que você deseja consultar. As categorias disponíveis são grupo, host, montagem, protocolo, rpc, serviço e usuário. Além disso, consultamos essa categoria especificando um par de valores-chave com a-a
opção Nesse caso, queremos listar o grupo com a chavename
igual ao valoradmin
. Odscacheutil
comando acima produz resultados como este:Em seguida, inserimos esse texto
grep
e selecionamos a linha que contém a stringusers:
no início. A-e
opção faz com que o grep reconheça expressões regulares . O^
caractere especifica que queremosusers:
estar no início da linha.Isso nos dá
Finalmente, passamos isso para sed e substituímos o texto
users:
pela string vazia. No sed , a primeira letras
significa substituir. O texto entre o primeiro par de barras (/users: /
) é o que queremos substituir, e o próximo par de barras (//
) é o que queremos substituir (neste caso, nada).fonte
Aqui está uma implementação para esse problema, derivada de uma implementação em uma discussão relacionada . A rotina é um tanto genérica, com um gancho de pesquisa de serviço de diretório para qualquer plataforma / arquitetura específica, para que possa ser usada sem modificação em uma rede heterogênea. Instalamos um link simbólico para esse utilitário chamado
zed
. Outras origens para esta implementação são mencionadas na seção de atribuição do script. Esta ferramenta deve ser executada em pelo menos OSX, HP-UX, linux e SunOS, mas não foitestado no SunOS e HP-UX. O script foi testado na medida do possível no Ubuntu Linux 12.04 e Mavericks OSX 10.9.1. A saída desse script corresponde à saída da primeira implementação de script de shell para esse problema e, portanto, é considerada correta.fonte