получить идентификатор группы по имени группы (Python, Unix) - PullRequest
11 голосов
/ 21 июля 2009

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

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

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

Ответы [ 3 ]

17 голосов
/ 21 июля 2009

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

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

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

5 голосов
/ 21 июля 2009

См. 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 голосов
/ 27 февраля 2019

Использование perl:

$grp_id = getgrnam($ARGV[0]);
print $grp_id."\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...