id コマンド:UID とグループの確認、whoami、groups と補助グループ
Linux サーバーで現在のアカウントの UID とグループを確認するときは id コマンドを使い、アカウント名だけが必要なら whoami を、グループ名だけが必要なら groups を使います。AlmaLinux 9 と Debian 12 のサーバーで三つのコマンドを順に実行して出力を比べたところ、id -un と whoami は同じアカウント名を出力し、groups は id のグループ一覧を名前だけ残して出力しました。
以下の出力は AlmaLinux 9.8 サーバーの root アカウントと Debian 12 サーバーの一般アカウントで実行した結果です。ログインアカウントの名前と番号、補助グループは例の値(user1、1000、adm、systemd-journal)に変えました。
1️⃣ id コマンドの基本的な使い方
オプションなしで id を実行すると、今のシェルを実行したアカウントの情報が一行で出ます。root アカウントで実行すると、三つの欄がすべて 0(root) でした。
iduid=0(root) gid=0(root) groups=0(root)uid の欄はアカウントの番号と名前、gid の欄はプライマリグループ(primary group)の番号と名前です。groups の欄はそのアカウントが属するグループ全体で、先頭にプライマリグループが来ます。
id の後ろにアカウント名を書くと、そのアカウントの情報を出力します。補助グループを持つ一般アカウント user1 を確認すると、groups の欄にプライマリグループ user1 に続いて adm と systemd-journal が並びました。プライマリグループのほかに属しているこれらのグループが補助グループ(supplementary group)です。
id user1uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)UID と gid の番号が同じアカウントが多いため二つの数字を同じ値と考えがちですが、サーバーに最初からある adm アカウントは UID が 3、プライマリグループの番号が 4 でした。operator アカウントはプライマリグループが root でした。
id admuid=3(adm) gid=4(adm) groups=4(adm)id operatoruid=11(operator) gid=0(root) groups=0(root)アカウントを複数書くと、一行に一つずつ出力します。
id root binuid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)存在しないアカウントを書くと [no such user] エラーが出て、終了コードは 1 でした。
id no-such-user9id: 'no-such-user9': no such userecho $?1存在するアカウントを書いたときの終了コードは 0 なので、スクリプトでアカウントがあるかを確認する条件として使えます。
2️⃣ id コマンドのオプション
全体の出力から番号一つだけをスクリプトに渡すときは、オプションで欄を一つだけ選びます。-u は UID、-g はプライマリグループの番号、-G は属するグループの番号すべてを出力します。
id -u0id -u daemon2id -G user11000 4 190-n を一緒に使うと、番号の代わりに名前が出ます。user1 のグループを [id -Gn] で確認すると、三つの番号が三つの名前に変わりました。
id -Gn user1user1 adm systemd-journalid -gn user1user1-n と -r は -u、-g、-G のうち一つと一緒に使います。-n だけを書くと、下のエラーが出ました。
id -nid: cannot print only names or real IDs in default format-r は実効(effective)ID の代わりに実(real)ID を出力します。root アカウントのシェルで [id -ur] を実行すると 0 が出ました。-u と -g のように番号を選ぶオプションを二つ以上一緒に書くと、[cannot print "only" of more than one choice] エラーが出ます。オプションをまとめると次のとおりです。
| オプション | コピー | 説明 |
|---|---|---|
| -u--user | UID の番号を出力 | |
| -g--group | プライマリグループの番号を出力 | |
| -G--groups | 属するグループの番号をすべて出力 | |
| -n--name | -u、-g、-G と一緒に使い、番号の代わりに名前を出力 | |
| -r--real | -u、-g、-G と一緒に使い、実効 ID の代わりに実(real)ID を出力 |
| オプション | コピー | 説明 |
|---|---|---|
| -Z--context | プロセスのセキュリティコンテキストだけを出力 | |
| -z--zero | 出力項目を空白の代わりに NUL 文字で区切る。既定の形式では使用不可 | |
| -a | ほかのバージョンの id との互換のために受け取るだけで無視 | |
| --help | ヘルプを出力 | |
| --version | バージョンを出力 |
🔲 id コマンド シミュレーター
下のシミュレーターは、補助グループを持つ user1 アカウントで始まります。[🖊 別ウィンドウ] チップで wheel グループを追加してから [id] と [id user1] を比べ、[🔁 再ログイン] チップで新しいシェルのグループを確認できます。
3️⃣ whoami コマンドと id -un
今のシェルのアカウント名だけが必要なら whoami を実行します。man ページは whoami を [id -un] と同じコマンドと説明しています。root アカウントで二つのコマンドを実行すると、どちらも root が出ました。
whoamirootid -unrootDebian 12 サーバーの一般アカウントでも、二つのコマンドは同じアカウント名を出力しました。
whoamiuser1id -unuser1whoami は現在の実効(effective)UID に対応するアカウント名を出力します。現在のアカウントだけを確認するコマンドなので、後ろにアカウント名を付けるとエラーになります。
whoami user1whoami: extra operand 'user1'
Try 'whoami --help' for more information.ほかのアカウントの名前や番号は、id の後ろにそのアカウントを書いて確認します。
id -un user1user1-un の代わりに -u を書くと、同じ場所にアカウント名の代わりに UID の番号が出ます。
4️⃣ groups コマンドと補助グループ
groups はグループ名だけを一行で出力します。アカウント名を書かなければ今のシェルのグループが出て、root アカウントでは root 一つでした。
groupsrootアカウント名を書くと、アカウント名とコロンの後ろにグループが出ます。アカウントを複数書くと、一行に一つずつ出力しました。
groups user1 daemonuser1 : user1 adm systemd-journal
daemon : daemonプライマリグループと補助グループは、記録される場所が違います。補助グループはグループデータベース(/etc/group)の四番目の欄にメンバーとして書かれ、プライマリグループはアカウント情報(/etc/passwd)の四番目の欄に番号で書かれます。
getent group admadm:x:4:user1getent group user1user1:x:1000:getent passwd daemondaemon:x:2:2:daemon:/sbin:/sbin/nologinuser1 のプライマリグループである user1 グループは四番目の欄が空で、補助グループ adm には user1 がメンバーとして書かれていました。daemon アカウントの行の四番目の欄の 2 がプライマリグループの番号です。
補助グループにアカウントを追加するときは usermod コマンドの [usermod -aG グループ アカウント] を使います。-a なしで -G だけを使うと、リストに書かなかった既存の補助グループから外れるため、-a を一緒に書きます。
アカウント名なしで実行した groups は、今のシェルのプロセスのグループを出力します。man ページは、グループデータベースが変わるとこの値がデータベースと違う場合があると説明しています。
そのため、グループを変えた直後は [groups アカウント] や [id アカウント] でデータベースのグループを確認し、シェルに反映するにはログインし直します。ログインしたまま現在のグループ ID を変えるコマンドには newgrp があります。
🔢 FAQ & おすすめコンテンツ
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。