2009-01-07 11 views
16

Estoy tratando de codificar una secuencia de comandos que da salida a cada usuario y su grupo en su propia línea de este modo:script Python a usuarios de la lista y grupos

user1 group1 
user2 group1 
user3 group2 
... 
user10 group6 

etc.

estoy escribiendo hasta un script en python para esto, pero me preguntaba cómo SO podría hacer esto.

p.s. Dale un golpe en cualquier idioma, pero prefiero Python.

EDITAR: Estoy trabajando en Linux. Ubuntu 8.10 o CentOS =)

+0

¿Qué sistema operativo está trabajando? –

+0

Gracias por ese comentario, sin él no tendría ni idea de qué se trataba esta pregunta (¿grupos de usuarios? De ¿QUÉ?). – Ole

+0

Linux - Estoy en Ubuntu 8.10 – Derek

Respuesta

17

Para * nix, que tiene los módulos pwd y grp. Usted itera a través de pwd.getpwall() para obtener todos los usuarios. Busque los nombres de sus grupos con grp.getgrgid(gid).

import pwd, grp 
for p in pwd.getpwall(): 
    print p[0], grp.getgrgid(p[3])[0] 
14

el módulo grp es tu amigo. Consulte grp.getgrall() para obtener una lista de todos los grupos y sus miembros.

EDITAR ejemplo:

import grp 
groups = grp.getgrall() 
for group in groups: 
    for user in group[3]: 
     print user, group[0] 
+0

Esto funcionó, pero parece que no enumera a todos los usuarios. ¿Alguna idea? $ ./script.py | wc -l 81 $ sudo cat/etc/shadow | wc -l 406 – Derek

+0

Creo que lo que estoy viendo es que el servidor en el que estoy usando esto tiene una tonelada de grupos sin usuarios (antiguos, viejos) que todavía estén presentes. Este script ignora grupos sin usuarios, lo cual está bien, ¡eso es lo que necesito! =) – Derek

+1

Esta solución solo muestra los grupos * secundarios * de los usuarios. Mi lectura de la pregunta fue que pregunta por "su grupo", es decir, el grupo * principal * del usuario [singular]? –

4

sh/bash:

getent passwd | cut -f1 -d: | while read name; do echo -n "$name " ; groups $name ; done 
+1

Agradable pero pidió explícitamente Python ... – bortzmeyer

+0

Lo hizo, pero agregó "Dale un golpe en cualquier idioma, pero prefiero Python". –

-2

Fed os.popen o lo que sea ....

"grupos" hombre

GRUPOS (1) Comandos de usuario GRUPOS (1)

NOMBRE grupos - imprime los grupos en los que está el usuario

SINOPSIS grupos [Opción] ... [nombre de usuario] ...

DESCRIPCIÓN pertenencias a grupos de impresión para cada nombre de usuario o, si no se especifica NOMBRE DE USUARIO, para el proceso actual (que puede diferir si el la base de datos de grupos ha cambiado).

....

0

creo que este código se adapte a sus necesidades, simplemente utilizando las funciones básicas del intérprete de Python, sin la necesidad de hacer uso de módulos adicionales:

una función simple que es capaz de manejar la estructura de cualquiera de estos archivos (/ etc/passwd y/etc/group).

Aquí está el código:

#!/usr/bin/python 

data = [] 

def iterator(f): 
    for line in f.readlines(): 
     data.append(line.split(":")[0]) 
    data.sort(); 
    for item in data: 
     print "- " + item , 


with open("/etc/group","r") as f: 
    print "\n* GROUPS *" 
    iterator(f); 
    print 

with open("/etc/passwd","r") as f: 
    print "\n* USERS *" 
    iterator(f);  
Cuestiones relacionadas