Kết quả của id -Gn
khi người dùng thuộc về một hoặc nhiều nhóm trong đó bản đồ nhiều tên nhóm với cùng gid
có thể không giống như các câu trả lời được đăng. Ví dụ nếu /etc/groups
là tương tự như sau:
% ypcat group | grep mygroup
mygroup:*:66485:user1,user2,user3,...
mygroup1:*:66485:user101,user102,user103,...
mygroup2:*:66485:user201,user202,user203,...
...
Và nếu người dùng không được liệt kê trong mygroup
nhưng trong mygroup<n>
, id -Gn
lợi nhuận mygroup
nhưng câu trả lời gửi trả mygroup<n>
. Có vẻ như trong môi trường của tôi, vì nhóm UNIX có thể có hàng trăm hoặc hàng ngàn người dùng, đây là chính sách quản lý nhóm chung, mặc dù tôi không biết chính xác giới hạn người dùng cho mỗi nhóm là gì và tại sao id -Gn
luôn trả về mygroup
.
Tuy nhiên, với mã dưới đây tôi có một trận đấu với 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]
Ít nhất tôi có thể sử dụng từ subprocess nhập khẩu check_output mygroups = check_output ([ 'id', '-Gn', thành viên này]). Split() –