2009-01-07 4 views
16

Je tente de coder un script qui affiche chaque utilisateur et leur groupe sur leur propre ligne comme ceci:script Python pour les utilisateurs de la liste et les groupes

user1 group1 
user2 group1 
user3 group2 
... 
user10 group6 

etc.

Je rédaction un script en python pour cela mais se demandait comment SO pourrait faire cela.

p.s. Prenez-le dans n'importe quelle langue, mais je préférerais Python.

EDIT: Je travaille sur Linux. Ubuntu 8.10 ou CentOS =)

+0

Quel système d'exploitation travaillez-vous? –

+0

Merci pour ce commentaire, sans cela je n'aurais aucune idée de ce que cette question était sur (utilisateurs? Groupes? De quoi?). – Ole

+0

Linux - Je suis sur Ubuntu 8.10 – Derek

Répondre

17

Pour * nix, vous avez les modules pwd et grp. Vous parcourez pwd.getpwall() pour obtenir tous les utilisateurs. Vous recherchez leurs noms de groupe avec grp.getgrgid(gid).

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

le module grp est votre ami. Regardez grp.getgrall() pour obtenir une liste de tous les groupes et de leurs membres.

EDIT exemple:

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

Cela a fonctionné, mais il semble que ce n'est pas la liste de tous les utilisateurs. Des pensées? $ ./script.py | wc -l 81 $ sudo cat/etc/shadow | wc -l 406 – Derek

+0

Je pense que ce que je vois, c'est que le serveur sur lequel je l'utilise a une tonne de groupes sans utilisateurs (anciens, anciens groupes) qui sont toujours là. Ce script ignore les groupes sans utilisateurs, ce qui est bien, c'est ce dont j'ai besoin! =) – Derek

+1

Cette solution répertorie uniquement les groupes * secondaires * des utilisateurs. Ma lecture de la question était qu'elle demande "leur groupe", c'est-à-dire le groupe * primaire * de l'utilisateur [singulier]? –

4

sh/bash:

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

Nice mais il a demandé explicitement pour Python ... – bortzmeyer

+0

Il l'a fait, mais il a ajouté: "Prenez un peu de recul dans n'importe quelle langue, mais je préfère python." –

-2

Fed os.popen ou quoi que ....

"groupes" homme

GROUPES (1) Commandes de l'utilisateur GROUPE (1

NAME groupes - imprime les groupes dans lesquels se trouve l'utilisateur

SYNOPSIS groupes [OPTION] ... [USERNAME] ...

DESCRIPTION appartenances de groupe d'impression pour chaque IDENTIFIANT ou, si aucun nom d'utilisateur est spécifiée, pour le traitement (qui peut être différent si le la base de données des groupes a changé).

....

0

Je crois que ce code répond à vos besoins, tout en utilisant les fonctions de base de l'interpréteur Python, sans qu'il soit nécessaire d'utiliser des modules supplémentaires:

une fonction simple qui est capable de gérer la structure de l'un de ces fichiers (/ etc/passwd et/etc/group).

Voici le code:

#!/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);  
Questions connexes