Результат id -Gn
, когда пользователь принадлежит к одной или нескольким группам, в которых несколько имен групп отображаются на один и тот же gid
, может не совпадать с опубликованным ответом. Например, если /etc/groups
похоже на это:
% ypcat group | grep mygroup
mygroup:*:66485:user1,user2,user3,...
mygroup1:*:66485:user101,user102,user103,...
mygroup2:*:66485:user201,user202,user203,...
...
И если пользователь не указан в mygroup
, а в mygroup<n>
, id -Gn
возвращает mygroup
, а опубликованный ответ возвращает mygroup<n>
.
Похоже, что в моей среде, поскольку группы UNIX могут иметь сотни или тысячи пользователей, это общая политика управления группами, хотя я точно не знаю, каков лимит пользователей на группу и почему id -Gn
всегда возвращает mygroup
.
Тем не менее, с кодом ниже я получил совпадение с id -Gn
:
import pwd, grp
def getgroups(user):
gids = [g.gr_gid for g in grp.getgrall() if user in g.gr_mem]
gid = pwd.getpwnam(user).pw_gid
gids.append(grp.getgrgid(gid).gr_gid)
return [grp.getgrgid(gid).gr_name for gid in gids]