Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのgrpモジュールを使ってUNIXグループデータベースにアクセスする方法

UNIXのグループデータベースへアクセスするには、Python標準ライブラリのgrpモジュールを使用します。このモジュールが返すエントリーは、タプルのようなオブジェクトとして扱えます。

grpモジュールを使用するには、まず以下のようにインポートします。

import grp

grpデータベースの属性

グループデータベースの各エントリーには、次の4つの属性が含まれています。

インデックス属性と説明
0gr_name
グループ名(文字列)
1gr_passwd
グループの暗号化されたパスワード(通常は空、または「x」)
2gr_gid
グループID(数値・整数型)
3gr_mem
グループに所属するユーザー名のリスト(文字列のリスト)

つまり、グループオブジェクトにおいてgidは整数型、グループ名とパスワードは文字列型、メンバーリストは文字列のリスト型となります。

grpモジュールの主なメソッド

grp.getgrgid(gid)

指定したグループID(gid)に対応するグループデータベースのエントリーを返します。該当するグループが存在しない場合はKeyErrorが発生します。

grp.getgrnam(name)

指定したグループ名(name)に対応するグループデータベースのエントリーを返します。該当するグループが存在しない場合もKeyErrorが発生します。

grp.getgrall()

システムに登録されているすべてのグループデータベースのエントリーをリストとして返します。

サンプルコード

import grp

# グループIDからパスワード情報を取得
print("ID: 4: " + str(grp.getgrgid(4)) + '\n')

# グループ名からパスワード情報を取得
print("cdrom group: " + str(grp.getgrnam('cdrom')) + '\n')

# すべてのグループを一覧表示
for entry in grp.getgrall():
    print("Group Name: " + entry[0] + "\t\tMembers: " + str(entry.gr_mem))

実行結果

$ sudo python3 example.py
ID: 4: grp.struct_group(gr_name='adm', gr_passwd='x', gr_gid=4, gr_mem=['syslog', 'unix_user'])

cdrom group: grp.struct_group(gr_name='cdrom', gr_passwd='x', gr_gid=24, gr_mem=['unix_user'])

Group Name: root        Members: []
Group Name: daemon      Members: []
Group Name: bin         Members: []
Group Name: sys         Members: []
Group Name: adm         Members: ['syslog', 'unix_user']
Group Name: tty         Members: []
Group Name: disk        Members: []
Group Name: lp          Members: []
Group Name: mail        Members: []
Group Name: news        Members: []
Group Name: uucp        Members: []
Group Name: man         Members: []
Group Name: proxy       Members: []
Group Name: kmem        Members: []
Group Name: dialout     Members: []
Group Name: fax         Members: []
Group Name: voice       Members: []
Group Name: cdrom       Members: ['unix_user']
Group Name: floppy      Members: []
Group Name: tape        Members: []
Group Name: sudo        Members: ['unix_user']
Group Name: audio       Members: ['pulse']
Group Name: dip         Members: ['unix_user']
Group Name: www-data    Members: []
Group Name: backup      Members: []
……..
……..
……..

なお、グループデータベースへのアクセスには管理者権限が必要になる場合があるため、実行時にsudoコマンドを使用しています。また、getgrall()の出力は環境によって異なり、登録されているグループの数だけ表示されます。

  1. iPhoneアプリでSQLiteデータベースにアクセスする方法をSwiftで解説

    はじめに:データ保存はアプリ開発の重要要素アプリケーションを設計するうえで、データの保存は最も重要な要素の一つです。データを保存する方法は数多くありますが、その中でも広く使われているのがSQLiteデータベースです。iPhone上でSQLiteデータベースへアクセスする方法は複数ありますが、本記事ではSwiftを使った最もシンプルな方法を紹介します。なお、SQLiteとはC言語のライブラリとして実装されたリレーショナルデータベース管理システム(RDBMS)であり、アプリケーションに組み込んで動作させる軽量データベースです。サーバーが不要で、モバイルアプリのローカルデータ保存に最適です。このチュ

  2. Pythonデバッガー(pdb)の使い方を徹底解説!基本コマンドからブレークポイントまで

    Pythonデバッガー(pdb)とはソフトウェア開発の分野では、プログラム内のエラー(バグ)を発見し修正するプロセスを「デバッグ」と呼びます。Pythonの標準ライブラリにはpdbモジュールが含まれており、これはPythonプログラムをデバッグするための一連のユーティリティを提供します。デバッグ機能はPdbクラスとして定義されており、このモジュールは内部的にbdbおよびcmdモジュールを利用しています。コマンドラインからの起動方法pdbモジュールには非常に便利なコマンドラインインターフェースが用意されています。Pythonスクリプトの実行時に-mスイッチを使ってインポートすることで、デバッガー