(Observação: o groups
comando, embora ainda seja útil, é substituído principalmente pelo comando id .)
Um usuário tem um grupo principal que é tradicionalmente definido no
/etc/passwd
arquivo com o qual ele efetua login, mas que hoje pode ter outras fontes. Ele também pode ser membro de grupos adicionais, conhecidos como grupos secundários ou suplementares, tradicionalmente especificados no arquivo /etc/groups
, mas que hoje também podem vir ou ser implícitos por fontes adicionais (como NIS, LDAP, SAMBA etc.).
Grupos primários e suplementares são definidos no momento do login e permanecem atualizados . No entanto, o usuário pode a qualquer momento alterar seu grupo principal ativo atual
usando o newgrp
comando
O processo de login define os grupos primário e suplementar. Para o posterior, normalmente chama a função libc
initgroups , que compila a lista de dados suplementares do grupo e os passa para a
função setgroups , que o estabelece no contexto do processo.
As fontes de informação para initgroups
são:
usado pela GNU C Library e outros aplicativos para determinar as fontes das quais obter informações sobre o serviço de nomes em várias categorias e em que ordem. Cada categoria de informação é identificada por um nome de banco de dados.
O groups
comando mostra os grupos atualmente aplicados ao seu usuário e a lista começará com o grupo principal atual seguido pelos grupos suplementares a partir do momento do login. Quaisquer alterações nas fontes de dados após o horário do login não são refletidas na lista exibida.
O groups username
comando está pedindo Linux para calcular os grupos para o usuário, o que ele vai fazer usando principalmente os arquivos /etc/password
e /etc/groups
e, em seguida, as fontes adicionais. Isso refletirá a situação atual dos arquivos do sistema e pode não ser igual aos grupos atuais que ainda estão em vigor desde o momento do login.
O groups username
comando pode dar um resultado diferente quando não usa todas as fontes que o processo de login usou para calcular seus grupos suplementares, o que aparentemente aconteceu no seu caso. Essas fontes podem não estar acessíveis no seu login ou simplesmente não podem ser consultadas pelo comando.
O uso do id username
comando pode fornecer melhores resultados, embora também não seja garantido que seja tão completo quanto o do processo de login. O id
comando é mais recente que, e pretendia ser mais preciso que, o groups
comando antigo .
Enquanto o groups
comando fornece um resultado preciso e correto, você demonstrou bem que groups username
não se pode confiar nele para fazer o mesmo.
Sem examinar o código-fonte do groups
comando, acho que a implementação do groups username
comando em suas análises de distribuição do Linux /etc/groups
, que no seu caso não continha nada, mas não o utiliza /etc/nsswitch.conf
, de onde vieram todos os seus grupos suplementares. Portanto, está listado apenas o nome do grupo principal
jacob
.
Para mais informações, veja: