ユーザーのUID、ホームディレクトリ、ログインシェルなどを調べたいときは、getent passwdを使う。
$ getent passwd alice
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
/etc/passwdと同じ形式の1行が表示される。/etc/passwdを直接読むgrepと違い、getent passwdは/etc/nsswitch.confに従ってユーザーを探す。/etc/passwdに無い、LDAPやSSSDなどのディレクトリサービス上のユーザーも表示できる。実行例はUbuntu 24.04(glibc 2.39)のもの。
出力の読み方
出力はコロン区切りの7項目である。
| 項目 | 例 | 内容 |
|---|---|---|
| 1 | alice | ユーザー名 |
| 2 | x | パスワード(xはハッシュを/etc/shadowで管理している意味) |
| 3 | 1001 | UID |
| 4 | 1001 | プライマリグループのGID |
| 5 | Alice Example | コメント欄(フルネームなど。空のこともある) |
| 6 | /home/alice | ホームディレクトリ |
| 7 | /bin/bash | ログインシェル |
参考: 【getent】パスワードハッシュや有効期限を確認する (shadow/gshadow)
特定の項目だけを取り出す
cutでコロン区切りの項目を指定すると、ホームディレクトリやシェルだけを取り出せる。
$ getent passwd alice | cut -d: -f6
/home/alice
$ getent passwd bob | cut -d: -f7
/bin/zsh
$ getent passwd alice | cut -d: -f3,4
1001:1001
シェルスクリプトで、ユーザーのホームディレクトリを調べたいときに使える。eval echo ~$userのようにevalを使わずに済む。
home=$(getent passwd "$user" | cut -d: -f6)
UIDで検索する
引数にUIDを渡すと、UIDからユーザーを探せる。
$ getent passwd 1500
bob:x:1500:1500::/home/bob:/bin/zsh
$ getent passwd 0
root:x:0:0:root:/root:/bin/bash
複数のユーザーを調べる
引数にはユーザー名やUIDを複数並べられる。
$ getent passwd root alice
root:x:0:0:root:/root:/bin/bash
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
存在しないユーザーは何も表示されず、終了コードが2になる。複数の引数のうち1つでも見つからないと、他のユーザーが表示されても終了コードは2である。
$ getent passwd nosuchuser
$ echo $?
2
$ getent passwd alice nosuchuser
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
$ echo $?
2
シェルスクリプトでユーザーの存在確認をする方法は、次の記事で扱っている。
参考: 【getent】ユーザーやグループが存在するかシェルスクリプトで判定する (終了コード)
すべてのユーザーを一覧する
引数を省略すると、すべてのユーザーが表示される。
$ getent passwd | cut -d: -f1 | head -5
root
daemon
bin
sys
sync
システムユーザーを除いた一般ユーザーだけを探したいときは、UIDで絞り込む。一般ユーザーのUIDは、多くのLinuxで1000以上である。
$ getent passwd | awk -F: '$3>=1000 && $3<65534 {print $1, $3}'
ubuntu 1000
alice 1001
bob 1500
65534はnobodyのUIDである。範囲は/etc/login.defsのUID_MINなどで決まるので、ディストリビューションによって異なる場合がある。
SSSDやLDAPを使う環境では、引数を省略しても全ユーザーが表示されるとは限らない。
参考: 【getent】データベースのエントリを全件列挙する (キー省略)
grep /etc/passwdとの違い
/etc/passwdに書かれたユーザーだけを調べる場合は、grepと結果は変わらない。
$ grep '^alice:' /etc/passwd
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
getent passwdは、/etc/nsswitch.confのpasswdの行に書かれた参照元をすべて引く。passwd: files sssと書かれた環境では、/etc/passwdとSSSDの両方を検索する。ログインできるのに/etc/passwdに無いユーザーは、getent passwdなら見つかる。
特定の参照元だけで調べたいときは、-sオプションを使う。
