(Observación: el groupscomando, aunque sigue siendo útil, es reemplazado principalmente por el comando id .)
Un usuario tiene un grupo primario que se define tradicionalmente en el
/etc/passwdarchivo 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 newgrpcomando.
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 initgroupsson:
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 groupscomando 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 usernamecomando está pidiendo Linux para calcular los grupos de ese usuario, lo que hará utilizando principalmente los archivos /etc/password
y /etc/groupsy 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 usernamecomando 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 usernamecomando puede dar mejores resultados, aunque tampoco se garantiza que sea tan completo como el del proceso de inicio de sesión. El idcomando es más reciente que, y estaba destinado a ser más preciso que el groupscomando anterior.
Si bien el groupscomando da un resultado preciso y correcto, usted ha demostrado que groups usernameno se puede depender del comando para hacer lo mismo.
Sin examinar el código fuente del groupscomando, supongo que la implementación del groups usernamecomando 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: