25

次のように、各ユーザーとそのグループを独自の行に出力するスクリプトをコーディングしようとしています。

user1 group1  
user2 group1  
user3 group2  
...  
user10 group6

私はこれのためにPythonでスクリプトを書いていますが、SOがこれをどのように行うのか疑問に思っていました.

psどの言語でも試してみてください。しかし、私はPythonの方が好きです。

編集:私はLinuxに取り組んでいます。Ubuntu 8.10 または CentOS =)

4

5 に答える 5

27

*nix の場合、pwdおよびgrpモジュールがあります。反復しpwd.getpwall()てすべてのユーザーを取得します。でグループ名を調べますgrp.getgrgid(gid)

import pwd, grp
for p in pwd.getpwall():
    print p[0], grp.getgrgid(p[3])[0]
于 2009-01-07T19:14:47.487 に答える
16

grpモジュールはあなたの友達です。grp.getgrall()すべてのグループとそのメンバーのリストを取得するには、 を参照してください。

編集例:

import grp
groups = grp.getgrall()
for group in groups:
    for user in group[3]:
        print user, group[0]
于 2009-01-07T19:12:27.697 に答える
4

sh/bash:

getent passwd | cut -f1 -d: | while read name; do echo -n "$name " ; groups $name ; done
于 2009-01-07T19:19:11.193 に答える
1

これらのファイル (/etc/passwd および /etc/group) のいずれかの構造を処理できる単純な関数。

このコードは、Python 組み込み関数と追加モジュールなしで、ニーズを満たしていると思います。

#!/usr/bin/python


def read_and_parse(filename):
    """
        Reads and parses lines from /etc/passwd and /etc/group.

        Parameters

          filename : str
            Full path for filename.
    """
    data = []
    with open(filename, "r") as f:
        for line in f.readlines():
            data.append(line.split(":")[0])
        data.sort()
        for item in data:
            print("- " + item)


read_and_parse("/etc/group")
read_and_parse("/etc/passwd")
于 2016-04-08T20:29:40.177 に答える