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/passwd | LDAPや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-addrconfig | ahosts系で、使えないIPv4・IPv6のアドレスを除外しない |
-i、--no-idn | IDN(国際化ドメイン名)のエンコードを無効にする |
-sと-Aは、それぞれ次の記事で扱っている。
参考: 【getent】IPv4とIPv6の全アドレスを一覧表示する (ahosts)
終了コード
getentの終了コードは次のとおり。
| 終了コード | 意味 |
|---|---|
| 0 | 見つかった |
| 1 | 引数の数が不正、または存在しないデータベース名 |
| 2 | キーが見つからない |
| 3 | 全件の列挙に対応していないデータベース |
終了コード2を使うと、ユーザーやホスト名の存在判定をシェルスクリプトで書ける。
参考: 【getent】ユーザーやグループが存在するかシェルスクリプトで判定する (終了コード)
記事一覧
ホスト名・ネットワーク
- 【getent hosts】 nslookupやdigコマンドが無いLinux環境でIPアドレスを調べる
getent hostsで、nslookupやdigが無い環境でIPアドレスを調べる。 - 【getent】/etc/hostsを含む実際の名前解決の結果を確認する (hosts)
/etc/hostsとDNSを含めた名前解決の結果を確認する。digとの違いと、IPアドレスからの逆引きにも触れる。 - 【getent】IPv4とIPv6の全アドレスを一覧表示する (ahosts)
IPv4とIPv6のすべてのアドレスを一覧する。IPv6が表示されない理由と
-Aの効果をまとめる。 - 【getent】参照元を指定して取得する (-s)
/etc/hostsとDNSのどちらの結果かを切り分ける。存在しない参照元を指定してもエラーにならない点に触れる。 - 【getent】ポート番号・サービス名・プロトコル番号を相互に調べる (services/protocols) サービス名とポート番号、プロトコル名とプロトコル番号の対応を調べる。
ユーザー・グループ
- 【getent】ユーザーの情報(UID・ホームディレクトリ・シェル)を調べる (passwd)
ユーザーのUID、ホームディレクトリ、ログインシェルを調べる。
/etc/passwdをgrepする場合との違いにも触れる。 - 【getent】グループのメンバーや所属グループを調べる (group/initgroups) グループのメンバーと、ユーザーの所属グループを調べる。プライマリグループが表示されない点に注意する。
- 【getent】ユーザーやグループが存在するかシェルスクリプトで判定する (終了コード) ユーザーやグループの存在を終了コードから判定する。変数が空のときに全件が出力される点に注意する。
- 【getent】パスワードハッシュや有効期限を確認する (shadow/gshadow) パスワードハッシュと有効期限を確認する。ロックされたアカウントの見分け方もまとめる。
その他
- 【getent】データベースのエントリを全件列挙する (キー省略) 全件を列挙できるデータベースと、できないデータベースをまとめる。
- 【getent】ネットワーク名やRPC番号などの補助的な情報を調べる (networks/rpc/aliases/ethers/netgroup)
networks・rpc・aliases・ethers・netgroupの使い方をまとめる。
