はじめに

こんにちは!今回はgetentコマンドについて解説します。

getentはシステムのデータベースから情報を取得するコマンドです。ユーザー情報、グループ情報、ホスト名などを調べるのに使います。

/etc/passwd/etc/groupなどのファイルを直接読むのではなく、システムが実際に使用しているデータベースから情報を取得できるので、LDAP等の認証システムを使っている環境でも正確な情報が得られます。便利ですね!


getentコマンドとは

getentは、“get entries"の略で、システムのデータベースエントリを取得する外部コマンドです。

Unix/Linuxシステムでは、ユーザー情報やグループ情報がローカルファイルだけでなく、LDAP、NIS、その他の認証システムから取得されることもあります。getentはそのすべてのデータベースから統一した方法で情報を取得できます。

NSS(Name Service Switch)という仕組みを通じて、/etc/nsswitch.confの設定に従ってデータを検索します。


基本構文

1
getent [オプション] database [key]
  • database: 検索対象のデータベース(passwd, group, hosts, servicesなど)
  • key: 検索キー(オプション、指定しなければ全エントリを表示)

主なオプション

オプション 説明
-s service 特定のサービスのみを検索

主なデータベース:

  • passwd: ユーザー情報
  • group: グループ情報
  • hosts: ホスト情報
  • services: サービス情報
  • protocols: プロトコル情報
  • ethers: イーサネットアドレス情報
  • networks: ネットワーク情報
  • rpc: RPC情報

使用例

例1: 全ユーザー情報を表示

1
getent passwd

実行結果:

1
2
3
4
5
6
7
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
...

システムの全ユーザー情報を表示します。/etc/passwdと同じ形式です。

例2: 特定のユーザー情報を取得

1
getent passwd root

実行結果:

1
root:x:0:0:root:/root:/bin/bash

ユーザーrootの情報のみを取得します。ユーザーが存在するかの確認に便利です。

例3: ユーザーIDから名前を取得

1
getent passwd 1000

実行結果:

1
user:x:1000:1000:User Name:/home/user:/bin/bash

ユーザーIDで検索すると、対応するユーザー情報が得られます。

例4: 全グループ情報を表示

1
getent group

実行結果:

1
2
3
4
5
6
7
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
...

システムの全グループ情報を表示します。

例5: 特定のグループ情報を取得

1
getent group sudo

実行結果:

1
sudo:x:27:user1,user2,user3

sudoグループのメンバーを確認できます。

例6: グループIDから情報を取得

1
getent group 1000

実行結果:

1
user:x:1000:

グループIDで検索します。

例7: ホスト情報を取得

1
getent hosts localhost

実行結果:

1
2
127.0.0.1       localhost
::1             localhost

ホスト情報データベースから検索します。

例8: サービス情報を取得

1
getent services http

実行結果:

1
2
http                 80/tcp www www-http
http                 80/udp www www-http

ネットワークサービスのポート番号などを確認できます。

例9: 特定のサービスのみから検索

1
getent -s files hosts localhost

実行結果:

1
2
127.0.0.1       localhost
::1             localhost

-s filesで、ローカルファイルのみから検索します(LDAPなど他のサービスは検索しない)。

例10: ユーザーが存在するか確認

1
getent passwd testuser > /dev/null && echo "存在する" || echo "存在しない"

実行結果:

1
存在する

ユーザーが存在するかをシェルスクリプトで確認する例です。


Tips・注意点

passwd/groupファイルとgetentの違い

直接ファイルを読むのではなく、getentを使う方が推奨されます:

1
2
3
4
5
# 避けるべき
grep "^username" /etc/passwd

# 推奨
getent passwd username

LDAPなど他の認証システムを使っている環境では、/etc/passwdに存在しないユーザーもgetentで取得できます。

UID/GIDの確認に便利

1
2
3
4
5
# ユーザーのUIDを確認
getent passwd username | cut -d: -f3

# グループのGIDを確認
getent group groupname | cut -d: -f3

NSSconfigの確認

1
cat /etc/nsswitch.conf | grep passwd

どのデータベースから検索するかを確認できます。


実践的な使い方

ログイン可能なユーザーを一覧表示

1
getent passwd | grep -v '/nologin$' | cut -d: -f1

/nologinシェルではないユーザーのみを表示します。

特定のグループに属するユーザーを取得

1
getent group sudo | cut -d: -f4 | tr ',' '\n'

sudoグループのメンバーを1行ずつ表示します。

スクリプトでユーザー存在確認

1
2
3
4
5
6
7
8
#!/bin/bash
username=$1

if getent passwd "$username" > /dev/null; then
  echo "ユーザー $username は存在します"
else
  echo "ユーザー $username は存在しません"
fi

ユーザー名を引数に渡して確認します。

全ユーザーのホームディレクトリをリスト

1
getent passwd | grep -v '/nologin$' | cut -d: -f1,6 | column -t -s:

ログイン可能なユーザーのホームディレクトリを見やすく表示します。


まとめ

getentコマンドのポイント:

  • ユーザー、グループ、ホストなど各種情報をシステムデータベースから取得
  • LDAP等の外部認証システムにも対応
  • /etc/passwdなどを直接読むより安全で汎用的
  • よく使う組み合わせ: getent passwd username, getent group groupname, getent passwd | grep -v nologin

ユーザー管理やシステム管理スクリプトで非常に便利なコマンド。NSSの仕組みを理解しておくと、より活用できますよ!