2009-07-21 5 views
8

Я хочу использовать Python, чтобы получить идентификатор группы для соответствующего имени группы. Подпрограмма должна работать для Unix-подобных ОС (Linux и Mac OS X).получить идентификатор группы по имени группы (Python, Unix)

Это то, что я нашел до сих пор

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

ответ

15

Если вы читаете grp module documentation вы увидите, что grp.getgrnam (Groupname) вернет одну запись из базы данных группы, которая представляет собой кортеж-подобный объект. Вы можете получить доступ к информации по индексу или по атрибутам:

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

Другие записи являются имя, зашифрованный пароль (обычно пуст, при использовании теневого файла, это будет фиктивное значение) и всех членов группы имена. Это отлично работает на любой операционной системе Unix, включая мой 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'] 

Модуль также предлагает метод для получения записей от GID, и, как вы обнаружили, метод в цикле по всем записям в базе данных:

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

Последнее, но не менее, питон предлагает аналогичные функциональные возможности, чтобы получить информацию о паролях и теневых файлов, в pwd и spwd модулей, которые имеют подобный API.

+0

Обратите внимание, что, поскольку существует ограничение на количество членов группы Unix, некоторые (большие) системы имеют несколько групп Unix с одним и тем же GID, но другое имя, например: 'admin',' admin2', 'admin3', и т. д. Возможно, вы не знаете об этом, потому что файлы хранятся с их числовым UID/GID, а инструменты, такие как 'ls', ищут GID и отображают первое имя, которое в моем примере было бы' admin'. Таким образом, вы можете быть удивлены, обнаружив, что указанная учетная запись пользователя не находится в группе 'admin', но на самом деле' admin2' или другой псевдоним. Вы должны отфильтровать все группы по GID, чтобы найти псевдонимы AFAICT. – RobM

5

См grp.getgrnam(name):

grp.getgrnam(name)

Возвращает запись группы базы данных для данного имени группы. KeyError возникает, если запрашиваемая запись не может быть найдена.

записи базы данных группы представлены в виде кортежа, как объект, атрибуты которого соответствуют членам структуры группы:

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 

Числовой идентификатор группы с индексом 2, или 2-й из прошлого, или атрибут gr_gid.

GID из root 0:

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

Возможно, вы также должны ссылаться на http://docs.python.org/library/grp.html – Stobor

+0

Право. Возможно, вы можете прокручивать верхнюю часть документа в своем браузере. – gimel

Смежные вопросы