(Observación: el groups
comando, aunque sigue siendo útil, es reemplazado principalmente por el comando id .)
Un usuario tiene un grupo primario que se define tradicionalmente en el
/etc/passwd
archivo con el que inicia sesión, pero que hoy puede tener otras fuentes. También puede ser miembro de grupos adicionales, conocidos como grupos secundarios o complementarios, tradicionalmente especificados en el archivo /etc/groups
, pero que hoy también pueden provenir o estar implicados por fuentes adicionales (como NIS, LDAP, SAMBA, etc.).
Los grupos primarios y suplementarios se definen en el momento del inicio de sesión y permanecen actualizados . Sin embargo, el usuario puede cambiar en cualquier momento su grupo primario activo actual
mediante el newgrp
comando.
El proceso de inicio de sesión establece los grupos primarios y suplementarios. Para lo posterior, generalmente llama a la función libc
initgroups , que compila la lista de datos de grupo suplementarios y la pasa a la
función setgroups , que la establece en el contexto del proceso.
Las fuentes de información para initgroups
son:
utilizado por la Biblioteca GNU C y ciertas otras aplicaciones para determinar las fuentes de las cuales obtener información del servicio de nombres en un rango de categorías, y en qué orden. Cada categoría de información se identifica mediante un nombre de base de datos.
El groups
comando muestra los grupos aplicados actualmente a su usuario, y la lista comenzará con el grupo primario actual seguido de los grupos suplementarios desde el momento del inicio de sesión. Cualquier cambio en las fuentes de los datos después del tiempo de inicio de sesión no se refleja en la lista que se muestra.
El groups username
comando está pidiendo Linux para calcular los grupos de ese usuario, lo que hará utilizando principalmente los archivos /etc/password
y /etc/groups
y luego las fuentes adicionales. Esto reflejará la situación actual de los archivos del sistema y puede que no sea igual a los grupos actuales que todavía están vigentes desde el momento del inicio de sesión.
El groups username
comando puede dar un resultado diferente cuando no usa todas las fuentes que el proceso de inicio de sesión usó para calcular sus grupos suplementarios, que es lo que aparentemente sucedió en su caso. Es posible que no se pueda acceder a estas fuentes desde su inicio de sesión o que el comando no las consulte.
El uso del id username
comando puede dar mejores resultados, aunque tampoco se garantiza que sea tan completo como el del proceso de inicio de sesión. El id
comando es más reciente que, y estaba destinado a ser más preciso que el groups
comando anterior.
Si bien el groups
comando da un resultado preciso y correcto, usted ha demostrado que groups username
no se puede depender del comando para hacer lo mismo.
Sin examinar el código fuente del groups
comando, supongo que la implementación del groups username
comando en sus análisis de distribución de Linux /etc/groups
, que en su caso no contenía nada, pero no usa /etc/nsswitch.conf
, de la que provenían todos sus grupos suplementarios. Por lo tanto, sólo aparece el nombre del grupo primario,
jacob
.
Para más información, ver: