2009-07-21 3 views
8

私はPythonを使ってグループIDを対応するグループ名にしたいと思っています。 このルーチンは、UnixライクなOS(LinuxおよびMac OS X)で動作する必要があります。グループ名でグループIDを取得する(Python、Unix)

これは私がこれまでに見つけたもの

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

他のエントリは、名前、暗号化されたパスワード(shadowファイルを使用している場合、通常は空、それはダミーの値になるだろう)であり、すべてのグループメンバー:あなたは、インデックスまたは属性によって情報にアクセスしますか、名前。これは私のMac OS Xのラップトップを含む任意のUnixシステム上で正常に動作します:

>>> 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は同様のAPIを持ってpwdspwdモジュールで、パスワードとshadowファイルの情報を取得するために同様の機能を提供しています。

+0

Unixグループが持つことができるメンバーの数には制限があるため、いくつかの(大規模な)システムでは、同じGIDを持ち、名前が異なる複数のUNIXグループがあります。例えば、 'admin'、' admin2'、 ファイルは数字のUID/GIDで保存され、 'ls 'のようなツールはGIDを検索して遭遇した最初の名前を表示するので、これは気付かないかもしれません。私の例では' admin'でしょう。 与えられたユーザアカウントが 'admin'グループにはなく、実際には' admin2'または他のエイリアスであることに驚くかもしれません。 エイリアスAFAICTを検索するには、すべてのグループをGIDでフィルタリングする必要があります。 – RobM

5

ではgrp.getgrnam(name)を参照してください:

grp.getgrnam(name)

戻り与えられたグループ名に対するグループデータベースエントリ。要求されたエントリが見つからない場合、KeyErrorが発生します。数値のグループIDが、インデックス2、または最後から2番目にある

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 

グループデータベースのエントリは、その属性グループ構造体のメンバーに対応するタプル状物として報告されていますまたは属性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