OP formuló la pregunta para excluir la posibilidad de usar el comando de grupos . Como eso es parte de coreutils en Linux, (a) se eliminó o (b) OP está escribiendo mal el nombre.
OP podría haber usado groups
así, por ejemplo:
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
Una respuesta sugerida es solo grep para el nombre del grupo /etc/group
. A veces eso funciona según lo previsto.
Un uso ligeramente mejor de grep tiene en cuenta la sintaxis de /etc/group
:
group_name:password:GID:user_list
para que solo la parte anterior al primer colon sea un nombre de grupo válido. Un grep simple sin tener en cuenta la sintaxis puede (y lo hará) recoger coincidencias engañosas del archivo. Use expresiones regulares para hacer que grep coincida exactamente con lo que se necesita:
grep -E '^users:' /etc/group |sed -e 's/^.*://'
o usando una variable de shell:
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
Sin embargo, eso solo enumera aquellos que no están en un grupo predeterminado . Para añadir aquellos , es necesario tener en cuenta el archivo de contraseñas, por ejemplo, mediante la extracción del número de grupo-id de /etc/group
, y la impresión de los usuarios cuyo grupo predeterminado de partidos /etc/passwd
, por ejemplo,
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
Podría hacer lo mismo usando solo grep y sed, pero es más trabajo que usar awk.
Otra respuesta sugerida propuso usar getent
, que también es probable que esté en una máquina Linux (con Debian, es parte de GNU libc). Sin embargo, una comprobación rápida de eso muestra que solo proporciona el /etc/group
contenido.
Yo (como la mayoría) no tengo libusers
ni lid
estoy instalado, por lo que no puedo comentar si cumple con las condiciones de OP.
También está el id
programa, que brinda información grupal. Alguien podría ampliar eso como una posible respuesta.
groups
comando. Es poco probable que no lo tenga en Linux, ya que es parte de coreutils.