はじめに
こんにちは!今回はgetentコマンドについて解説します。
getentはシステムのデータベースから情報を取得するコマンドです。ユーザー情報、グループ情報、ホスト名などを調べるのに使います。
/etc/passwdや/etc/groupなどのファイルを直接読むのではなく、システムが実際に使用しているデータベースから情報を取得できるので、LDAP等の認証システムを使っている環境でも正確な情報が得られます。便利ですね!
getentコマンドとは
getentは、“get entries"の略で、システムのデータベースエントリを取得する外部コマンドです。
Unix/Linuxシステムでは、ユーザー情報やグループ情報がローカルファイルだけでなく、LDAP、NIS、その他の認証システムから取得されることもあります。getentはそのすべてのデータベースから統一した方法で情報を取得できます。
NSS(Name Service Switch)という仕組みを通じて、/etc/nsswitch.confの設定に従ってデータを検索します。
基本構文
|
|
database: 検索対象のデータベース(passwd, group, hosts, servicesなど)key: 検索キー(オプション、指定しなければ全エントリを表示)
主なオプション
| オプション | 説明 |
|---|---|
-s service |
特定のサービスのみを検索 |
主なデータベース:
passwd: ユーザー情報group: グループ情報hosts: ホスト情報services: サービス情報protocols: プロトコル情報ethers: イーサネットアドレス情報networks: ネットワーク情報rpc: RPC情報
使用例
例1: 全ユーザー情報を表示
|
|
実行結果:
|
|
システムの全ユーザー情報を表示します。/etc/passwdと同じ形式です。
例2: 特定のユーザー情報を取得
|
|
実行結果:
|
|
ユーザーrootの情報のみを取得します。ユーザーが存在するかの確認に便利です。
例3: ユーザーIDから名前を取得
|
|
実行結果:
|
|
ユーザーIDで検索すると、対応するユーザー情報が得られます。
例4: 全グループ情報を表示
|
|
実行結果:
|
|
システムの全グループ情報を表示します。
例5: 特定のグループ情報を取得
|
|
実行結果:
|
|
sudoグループのメンバーを確認できます。
例6: グループIDから情報を取得
|
|
実行結果:
|
|
グループIDで検索します。
例7: ホスト情報を取得
|
|
実行結果:
|
|
ホスト情報データベースから検索します。
例8: サービス情報を取得
|
|
実行結果:
|
|
ネットワークサービスのポート番号などを確認できます。
例9: 特定のサービスのみから検索
|
|
実行結果:
|
|
-s filesで、ローカルファイルのみから検索します(LDAPなど他のサービスは検索しない)。
例10: ユーザーが存在するか確認
|
|
実行結果:
|
|
ユーザーが存在するかをシェルスクリプトで確認する例です。
Tips・注意点
passwd/groupファイルとgetentの違い
直接ファイルを読むのではなく、getentを使う方が推奨されます:
|
|
LDAPなど他の認証システムを使っている環境では、/etc/passwdに存在しないユーザーもgetentで取得できます。
UID/GIDの確認に便利
|
|
NSSconfigの確認
|
|
どのデータベースから検索するかを確認できます。
実践的な使い方
ログイン可能なユーザーを一覧表示
|
|
/nologinシェルではないユーザーのみを表示します。
特定のグループに属するユーザーを取得
|
|
sudoグループのメンバーを1行ずつ表示します。
スクリプトでユーザー存在確認
|
|
ユーザー名を引数に渡して確認します。
全ユーザーのホームディレクトリをリスト
|
|
ログイン可能なユーザーのホームディレクトリを見やすく表示します。
まとめ
getentコマンドのポイント:
- ユーザー、グループ、ホストなど各種情報をシステムデータベースから取得
- LDAP等の外部認証システムにも対応
/etc/passwdなどを直接読むより安全で汎用的- よく使う組み合わせ:
getent passwd username,getent group groupname,getent passwd | grep -v nologin
ユーザー管理やシステム管理スクリプトで非常に便利なコマンド。NSSの仕組みを理解しておくと、より活用できますよ!