Linuxでユーザー一覧を確認するには、cat /etc/passwd または getent passwd が基本コマンドです。サーバーに登録されている全ユーザーを洗い出したい、不要なアカウントが残っていないか棚卸ししたい、といった場面でよく使われます。単に一覧を眺めるだけでなく、システムが自動作成した管理用ユーザーと、人間が実際にログインする一般ユーザーを見分けることが実務では重要になります。
この記事では、全ユーザーの一覧表示から、ユーザー名だけを抽出する方法、一般ユーザーとシステムユーザーの見分け方、特定ユーザーの詳細情報の確認方法までを、実行例つきでまとめて解説します。
Linuxでユーザー一覧を確認する方法まとめ
目的別に使うコマンドを整理すると次のとおりです。迷ったら cat /etc/passwd か getent passwd を使えば間違いありません。
| コマンド | 用途 | 備考 |
|---|---|---|
cat /etc/passwd | 全ユーザー情報を一覧表示 | 最も基本的な方法。ローカルに登録されたユーザーのみ |
getent passwd | LDAP/NISなど外部認証も含めて一覧表示 | NSS経由で参照するため環境によらず確実 |
cut -d: -f1 /etc/passwd | ユーザー名だけを抽出 | スクリプトでの一覧取得に便利 |
awk -F: '{print $1}' /etc/passwd | ユーザー名だけを抽出 | フィールド番号を指定して柔軟に加工できる |
compgen -u | ユーザー名の一覧をシンプルに表示 | bashの補完機能を流用。列挙のみで詳細情報はなし |
lslogins | ユーザーごとの詳細情報を一覧表示 | util-linux収録。ロック状態や最終ログインも確認可能 |
cat /etc/passwdで全ユーザー情報を表示する
Linuxのユーザー情報は /etc/passwd ファイルに1行1ユーザーの形式で保存されています。一般ユーザーでも読み取り権限があるため、そのまま cat で全ユーザーを一覧表示できます。
cat /etc/passwd
出力例:
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
mugi:x:1000:1000:mugi:/home/mugi:/bin/bash
/etc/passwdの各フィールドの意味
各行はコロン(:)区切りで7つのフィールドを持ちます。
| 順番 | フィールド | 説明 |
|---|---|---|
| 1 | ユーザー名 | ログイン時に使用する名前 |
| 2 | パスワード | 常にx。実際の暗号化パスワードは/etc/shadowに保存される |
| 3 | UID | ユーザーを識別する数値ID。0はroot |
| 4 | GID | そのユーザーが所属するプライマリグループのID |
| 5 | GECOS | 氏名やコメントなどの補足情報(空のことも多い) |
| 6 | ホームディレクトリ | ログイン時のカレントディレクトリ |
| 7 | ログインシェル | /bin/bashなど。/usr/sbin/nologinの場合はログイン不可 |
パスワードの管理そのものについては、passwd – ユーザーのパスワードを変更するコマンド もあわせて確認してください。
getent passwdで一覧表示する(LDAP/NIS環境も含めて確認したい場合)
cat /etc/passwd はローカルファイルに登録されたユーザーしか表示できません。組織内でLDAPやNISなど外部の認証基盤と連携している環境では、そのユーザーが /etc/passwd に存在しないことがあります。このような環境も含めて確実に一覧を取得したい場合は getent passwd を使います。
getent passwd
getent はNSS(Name Service Switch)の設定(/etc/nsswitch.conf)に従って、ローカルファイル・LDAP・NISなど設定された全ての情報源を横断して検索します。出力形式は /etc/passwd と同じです。特定ユーザーだけを調べたい場合は、名前を指定します。
getent passwd mugi
mugi:x:1000:1000:mugi:/home/mugi:/bin/bash
ローカル環境しか使っていない場合は cat /etc/passwd でも結果はほぼ同じですが、外部認証基盤を使っている可能性が少しでもあるなら getent passwd の方が確実です。
ユーザー名だけをシンプルに一覧表示する
UIDやホームディレクトリなどの情報は不要で、ユーザー名の一覧だけが欲しい場合の方法です。
cutコマンドで抽出する
/etc/passwd はコロン区切りなので、cut で1番目のフィールドだけを取り出せます。
cut -d: -f1 /etc/passwd
awkコマンドで抽出する
同じ結果は awk でも取得できます。区切り文字を -F: で指定し、1番目のフィールド($1)を出力します。
awk -F: '{print $1}' /etc/passwd
awk は条件式を組み合わせられるため、後述する「UIDで絞り込む」といった加工がしやすいのが利点です。
compgen -uで表示する
compgen -u はbashの補完機能(コマンドライン入力時のTab補完)が内部で使うユーザー名一覧をそのまま出力するコマンドです。/etc/passwd を意識せずに、ユーザー名だけを手早く確認したいときに使えます。
compgen -u
ただし compgen はbashの組み込みコマンドのため、shやdashなど他のシェルでは利用できません。スクリプトで使う場合は cut や awk の方が移植性が高くなります。
一般ユーザーとシステムユーザーを見分ける
/etc/passwd には、人間がログインする一般ユーザーだけでなく、daemonやbinのようにOSやパッケージが自動生成したシステムユーザーも大量に含まれます。両者はUID(ユーザーID)の範囲で見分けられます。
| UID範囲 | 種別 | 備考 |
|---|---|---|
| 0 | root | すべての権限を持つ管理者 |
| 1〜999 | システムユーザー | daemon・bin・syncなど、サービスやパッケージが使用 |
| 1000以上 | 一般ユーザー | Debian/Ubuntu・RHEL系とも useradd で作成すると既定でこの範囲になる |
この閾値は /etc/login.defs の UID_MIN / UID_MAX で定義されており、ディストリビューションや設定によって変わる場合があります。現在の設定値は次のコマンドで確認できます。
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UIDが1000以上のユーザーだけを抽出したい場合は、awk でUIDの条件式を組み合わせます。
awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3}' /etc/passwd
60000 未満という条件を加えているのは、nobody(多くの環境でUID 65534)のような予約済みの特殊ユーザーを除外するためです。
ログインシェルで絞り込む方法も有効です。システムユーザーの多くはログインシェルが /usr/sbin/nologin や /bin/false に設定されており、実際にログインできるユーザーだけを見たい場合はこちらの方が直感的です。
awk -F: '$7 ~ /bash|zsh|sh$/ {print $1, $7}' /etc/passwd
ユーザーの追加・変更・削除については useradd・usermod・userdel の各記事で解説しています。
特定ユーザーの詳細情報を確認する
一覧から気になるユーザーが見つかったら、id コマンドでUID・GID・所属グループをまとめて確認できます。
id mugi
uid=1000(mugi) gid=1000(mugi) groups=1000(mugi),4(adm),27(sudo),988(docker)
ユーザー名を省略すると、実行中のユーザー自身の情報が表示されます。存在しないユーザー名を指定するとエラーになるため、そのユーザーが実在するかどうかの確認にも使えます。
id nosuchuser
id: 'nosuchuser': no such user
所属グループだけを簡潔に見たい場合は groups コマンドが使えます。
groups mugi
ロック状態や最終ログイン日時まで含めて、複数ユーザーの詳細を一覧で見たい場合は lslogins(util-linuxパッケージ収録)が便利です。
lslogins
UID・ログイン中プロセス数・パスワードのロック状況・最終ログインなどが列で並び、システムユーザーと一般ユーザーの棚卸しをまとめて行いたいときに役立ちます。
現在ログインしているユーザーを確認する
「登録されているユーザー一覧」ではなく「いま実際にログインしているユーザー」を確認したい場合は、別のコマンドを使います。
| コマンド | 用途 |
|---|---|
who | ログイン中のユーザー名・端末・ログイン時刻を表示 |
w | whoの情報に加え、実行中コマンドや負荷状況も表示 |
users | ログイン中のユーザー名だけをシンプルに表示 |
詳しい使い方は who - 現在ログインしているユーザーを表示するコマンド と w - ログイン中ユーザーの稼働状況を表示するコマンド で解説しています。
確認時の注意点
- /etc/shadowは一般ユーザーから読めない:
/etc/passwdは誰でも読めますが、暗号化パスワードが入った/etc/shadowはroot権限が必要です。パスワード管理はpasswdで行います。 - LDAP/NIS環境では
cat /etc/passwdだけでは不十分: 外部認証と連携している場合、一覧が欠落することがあります。getent passwdを使うのが確実です。 - システムユーザーを不用意に削除・変更しない: daemonやwww-dataなどのシステムユーザーは各種サービスの動作に使われています。棚卸しで不要と判断する前に、用途を確認してください。
- compgen -uはbash限定: sh・dashなど他のシェルでは使えないため、移植性が必要なスクリプトでは
cutやawkを使います。
よくある質問(FAQ)
Q. Linuxでユーザー一覧を見るには?
A. cat /etc/passwd で全ユーザー情報を一覧表示できます。LDAP/NISなど外部認証も含めて確認したい場合は getent passwd を使ってください。
Q. LinuxでユーザIDの一覧を確認するには?
A. awk -F: '{print $1, $3}' /etc/passwd でユーザー名とUIDを並べて表示できます。特定ユーザーのUIDだけを知りたい場合は id -u ユーザー名 が簡単です。
Q. ユーザー名だけを一覧表示するコマンドは?
A. cut -d: -f1 /etc/passwd または compgen -u が代表的です。compgen -u はbash限定ですが、コマンドが短く覚えやすいのが利点です。
Q. 一般ユーザーだけに絞り込むには?
A. UIDが1000以上のユーザーを一般ユーザーとみなすのが一般的です。awk -F: '$3 >= 1000 && $3 < 60000 {print $1}' /etc/passwd で絞り込めます。正確な閾値は /etc/login.defs の UID_MIN で確認してください。
Q. Linuxでログインしているユーザーを確認するには?
A. 登録済みユーザーの一覧ではなく、いま実際にログイン中のユーザーを見たい場合は who または w を使います。稼働状況や実行中のコマンドまで見たい場合は w の方が情報量が多くなります。
関連コマンド
useradd
新しいユーザーを追加するコマンド。usermod
既存ユーザーの設定(所属グループなど)を変更するコマンド。userdel
不要になったユーザーを削除するコマンド。passwd
ユーザーのパスワードを変更するコマンド。su
一覧で見つけた別ユーザーに切り替えるコマンド。sudo
管理者権限でコマンドを実行するコマンド。sudoersの設定も解説。who
現在ログインしているユーザーを表示するコマンド。w
ログイン中ユーザーの稼働状況を表示するコマンド。
参考
- manページ(passwdファイル形式): https://man7.org/linux/man-pages/man5/passwd.5.html
- manページ(getent): https://man7.org/linux/man-pages/man1/getent.1.html
- manページ(id): https://man7.org/linux/man-pages/man1/id.1.html
- manページ(lslogins): https://man7.org/linux/man-pages/man1/lslogins.1.html

コメント