2009-07-21 25 views
8

मैं समूह आईडी को संबंधित समूह नाम पर प्राप्त करने के लिए पायथन का उपयोग करना चाहता हूं। नियमित रूप से यूनिक्स-जैसे ओएस (लिनक्स और मैक ओएस एक्स) के लिए काम करना चाहिए।समूह नाम (पायथन, यूनिक्स) द्वारा समूह आईडी प्राप्त करें

यह मैं अब तक

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

उत्तर

15

तो आप पढ़ सकते हैं grp module documentation आपको लगता है कि grp.getgrnam (समूहनाम) देखेंगे समूह डेटाबेस है, जो एक टपल जैसी वस्तु है से एक प्रविष्टि वापस आ जाएगी।

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

अन्य प्रविष्टियों नाम, एन्क्रिप्टेड पासवर्ड (आमतौर पर खाली है, अगर एक छाया फ़ाइल का उपयोग कर, यह एक डमी मूल्य हो जाएगा) कर रहे हैं और सभी समूह के सदस्य: आप सूचकांक द्वारा या विशेषता के आधार पर जानकारी का उपयोग कर सकते हैं या तो नाम। यह किसी भी यूनिक्स प्रणाली पर ठीक काम करता है, मेरे मैक ओएस एक्स लैपटॉप सहित:

>>> 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 मॉड्यूल है, जो एक समान एपीआई है में प्रदान करता है पासवर्ड और छाया फ़ाइलों के बारे में जानकारी प्राप्त करने के लिए।

+0

ध्यान दें कि यूनिक्स समूह के कितने सदस्यों के पास सीमा है, कुछ (बड़े) सिस्टमों में एक ही जीआईडी ​​के साथ कई यूनिक्स समूह हैं लेकिन अलग-अलग नाम हैं, उदाहरण के लिए: 'admin',' admin2', 'admin3', इत्यादि आपको इस बारे में पता नहीं हो सकता है क्योंकि फाइलें उनके न्यूमेरिक यूआईडी/जीआईडी ​​के साथ संग्रहीत हैं, और 'एलएस' जैसे टूल्स जीआईडी ​​को देखते हैं और पहला नाम सामने आते हैं, जो मेरे उदाहरण में 'admin' होगा। तो आपको आश्चर्य हो सकता है कि कोई दिया गया उपयोगकर्ता खाता 'व्यवस्थापक' समूह में नहीं है, बल्कि वास्तव में 'admin2' या अन्य उपनाम है। आपको उपनाम AFAICT खोजने के लिए सभी समूहों को GID द्वारा फ़िल्टर करना होगा। – 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

root की GID 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

संबंधित मुद्दे