getentは、ユーザー、グループ、ホスト名、サービス名などの管理用データベースからエントリを取得するLinuxのコマンドである。getent [オプション] データベース [キー ...]の形式で使う。

$ getent passwd alice
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
$ getent hosts localhost
::1             localhost ip6-localhost ip6-loopback
$ getent services https
https                 443/tcp

ここでは、getentの仕組みと使い方の一覧をまとめ、用途別の記事へリンクする。実行例はUbuntu 24.04(glibc 2.39)のもの。macOSにはgetentが無い。Linux専用のコマンドである。

getentとは

getentは、/etc/passwdや/etc/hostsのようなファイルを直接読むのではなく、NSS(Name Service Switch)を通してデータを取得する。NSSは、ユーザーやホスト名の情報を、どこからどの順に引くかを決めるLinuxの仕組みである。引く順序は/etc/nsswitch.confに書かれている。

$ grep -E '^(passwd|hosts)' /etc/nsswitch.conf
passwd:         files
hosts:          files dns

hosts: files dnsは、/etc/hostsを先に引き、見つからなければDNSサーバーを引く設定である。curlやsshなど、glibcのリゾルバを使うアプリケーションも同じNSSを使うので、getentの結果は、アプリケーションが実際に見る結果と同じである。

grep /etc/passwdやdigと比べた違いは次のとおり。

調べたいこと直接読むコマンドgetent
ユーザーgrep /etc/passwdLDAPやSSSDなどのユーザーも含めて引く
ホスト名dig、nslookup(DNSだけを引く)/etc/hostsとDNSをnsswitch.confの順に引く

データベースの一覧

getentには、以下のデータベースを指定できる。

データベース内容
passwdユーザー
group、initgroupsグループ、ユーザーの所属グループ
shadow、gshadowパスワードハッシュと有効期限
hostsホスト名とIPアドレス
ahosts、ahostsv4、ahostsv6ホスト名に対応する全アドレス
servicesサービス名とポート番号
protocolsプロトコル名と番号
networks、rpc、aliases、ethers、netgroupネットワーク名、RPC、メールのエイリアス、MACアドレス、ネットグループ

引数のキーは、データベースによって名前やID、番号になる。複数のキーを並べて、まとめて引ける。

$ getent passwd root alice
root:x:0:0:root:/root:/bin/bash
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash

キーを省略すると、データベースのエントリを全件列挙する。

参考: 【getent】データベースのエントリを全件列挙する (キー省略)

オプション

getentのオプションは3つである。

オプション内容
-s、--service=CONFIG参照元を指定する
-A、--no-addrconfigahosts系で、使えないIPv4・IPv6のアドレスを除外しない
-i、--no-idnIDN(国際化ドメイン名)のエンコードを無効にする

-sと-Aは、それぞれ次の記事で扱っている。

参考: 【getent】参照元を指定して取得する (-s)

参考: 【getent】IPv4とIPv6の全アドレスを一覧表示する (ahosts)

終了コード

getentの終了コードは次のとおり。

終了コード意味
0見つかった
1引数の数が不正、または存在しないデータベース名
2キーが見つからない
3全件の列挙に対応していないデータベース

終了コード2を使うと、ユーザーやホスト名の存在判定をシェルスクリプトで書ける。

参考: 【getent】ユーザーやグループが存在するかシェルスクリプトで判定する (終了コード)

記事一覧

ホスト名・ネットワーク

ユーザー・グループ

その他