2009-07-21 5 views
8

Ich möchte Python verwenden, um die Gruppen-ID zu einem entsprechenden Gruppennamen zu erhalten. Die Routine muss für ein Unix-ähnliches Betriebssystem (Linux und Mac OS X) funktionieren. DieseGet Gruppen-ID nach Gruppenname (Python, Unix)

ist das, was ich sehe bisher

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

Antwort

15

Wenn Sie lesen die grp module documentation Sie, dass grp.getgrnam sehen werden (Gruppenname) wird ein Eintrag aus der Gruppe Datenbank zurückgeben, die ein Tupel artiges Objekt ist. Sie können entweder Zugriff auf die Informationen über den Index oder Attribut:

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

Andere Einträge sind der Name, das verschlüsselte Passwort und alle Gruppenmitglieder (in der Regel leer, wenn eine Schattendatei verwendet wird, wird es ein Dummy-Wert) Namen. Dies funktioniert auf jedem Unix-System, einschließlich meinem Mac OS X Laptop:

>>> 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'] 

Das Modul bietet auch eine Methode Einträge von gid zu bekommen, und wie Sie entdeckt, eine Methode, um eine Schleife über alle Einträge in der Datenbank:

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

Last but not least bietet python ähnliche Funktionalität Informationen über das Passwort und Schattendateien zu bekommen, in dem pwd und spwd Module, die eine ähnliche API haben.

+0

Beachten Sie, dass einige (große) Systeme mehrere Unix-Gruppen mit derselben GID, aber einem anderen Namen haben, da es eine Begrenzung für die Anzahl der Mitglieder einer Unix-Gruppe gibt. Beispiel: 'admin',' admin2', 'admin3', usw. Das ist Ihnen vielleicht nicht bewusst, weil Dateien mit ihrer numerischen UID/GID gespeichert werden und Tools wie 'ls' die GID nachschlagen und den ersten gefundenen Namen anzeigen, der in meinem Beispiel 'admin' wäre. So können Sie überrascht sein zu finden, ein bestimmtes Benutzerkonto ist nicht in der Gruppe "admin", aber eigentlich der "admin2" oder andere Alias. Sie müssen alle Gruppen nach GID filtern, um Aliase AFAICT zu finden. – RobM

5

grp.getgrnam(name) gefunden:

grp.getgrnam(name)

Rückkehr der Gruppe Datenbankeintrag für den angegebenen Gruppennamen. KeyError wird ausgelöst, wenn der angeforderte Eintrag nicht gefunden werden kann.

Einträge Gruppendatenbank werden als Tupel-ähnliches Objekt berichtet, dessen Attribute zu den Mitgliedern der Gruppe Struktur entsprechen:

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 

Die numerische ID-Gruppe mit Index 2 ist, oder 2. von den letzten, oder das Attribut gr_gid.

GID root 0:

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

Sie sollten wahrscheinlich auch einen Link zu http://docs.python.org/library/grp.html – Stobor

+0

Richtig. Vielleicht könnten Sie in Ihrem Browser zum oberen Rand des Dokuments scrollen. – gimel

Verwandte Themen