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