15 votes

obtenir l'identifiant du groupe par le nom du groupe (Python, Unix)

Je veux utiliser Python pour convertir l'identifiant du groupe en un nom de groupe correspondant. La routine doit fonctionner pour les systèmes d'exploitation de type Unix (Linux et Mac OS X).

Voici ce que j'ai trouvé jusqu'à présent

>>> import grp
>>> for g in grp.getgrall():
...     if g[0] == 'wurzel':
...         print g[2]

22voto

Martijn Pieters Points 271458

Si vous lisez le documentation du module grp vous verrez que grp.getgrnam(groupname) renverra une entrée de la base de données des groupes, qui est un objet de type tuple. Vous pouvez accéder aux informations par index ou par attribut :

>>> import grp
>>> groupinfo = grp.getgrnam('root')
>>> print groupinfo[2]
0
>>> print groupinfo.gr_gid
0

Les autres entrées sont le nom, le mot de passe crypté (généralement vide, si on utilise un fichier fantôme, ce sera une valeur fictive) et tous les noms des membres du groupe. Cela fonctionne bien sur n'importe quel système Unix, y compris mon ordinateur portable Mac OS X :

>>> import grp
>>> admin = grp.getgrnam('admin')
>>> admin
('admin', '*', 80, ['root', 'admin', 'mj'])
>>> admin.gr_name
'admin'
>>> admin.gr_gid
80
>>> admin.gr_mem
['root', 'admin', 'mj']

Le module offre également une méthode pour obtenir les entrées par gid, et comme vous l'avez découvert, une méthode pour boucler sur toutes les entrées dans la base de données :

>>> grp.getgrgid(80)
('admin', '*', 80, ['root', 'admin', 'mj'])
>>> len(grp.getgrall())
73

Enfin, python offre une fonctionnalité similaire pour obtenir des informations sur le mot de passe et les fichiers fantômes, dans la fonction pwd y spwd qui ont une API similaire.

5voto

gimel Points 30150

Véase grp.getgrnam(name) :

grp.getgrnam(name)

Renvoie l'entrée de la base de données des groupes pour le nom de groupe donné. KeyError est soulevé si l'entrée demandée est introuvable.

Les entrées de la base de données des groupes sont présentées sous la forme d'un objet de type tuple, dont les attributs correspondent aux membres de la structure du groupe :

Index   Attribute   Meaning

0   gr_name     the name of the group
1   gr_passwd   the (encrypted) group password; often empty
2   gr_gid  the numerical group ID
3   gr_mem  all the group member’s user names

L'identifiant numérique du groupe est à l'indice 2, ou l'avant-dernier, ou l'attribut gr_gid .

GID de root est égal à 0 :

>>> grp.getgrnam('root')
('root', 'x', 0, ['root'])
>>> grp.getgrnam('root')[-2]
0
>>> grp.getgrnam('root').gr_gid
0
>>>

-2voto

user11122920 Points 1

Utilisation de perl :

$grp_id = getgrnam($ARGV[0]);
print $grp_id."\n";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X