Linuxでユーザーの所属グループを確認する方法|groupsとidコマンドの違いと使い分け

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > Linuxでユーザーの所属グループを確認する方法|groupsとidコマンドの違いと使い分け
Linuxでユーザーの所属グループを確認したいとき、どのコマンドを使えばよいか迷うことがあります。

この記事では、groupsidgetent コマンドの使い方と出力の違いを実行例付きで解説します。
グループの「確認方法」を扱います。グループの追加・変更は usermod コマンドで行います。

【この記事でわかること】
・groupsコマンドでLinuxユーザーが所属するグループを確認する基本手順
・idコマンドでUID・GID・所属グループをまとめて一括確認する方法
・getentコマンドでグループの全メンバーを一覧表示する方法
・groupsコマンドとidコマンドの出力の違いと使い分けのポイント

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

idコマンドでグループを確認する(最も使う方法)

現場でグループを確認するとき、最もよく使うのがidコマンドです。UID(ユーザーID)、GID(プライマリグループID)、所属グループの一覧をまとめて表示してくれます。

1. 特定ユーザーのグループを確認する

idコマンドの引数にユーザー名を指定します。

$ id user1 uid=1002(user1) gid=1003(user1) groups=1003(user1),10(wheel),1010(developers)

この出力の意味は以下のとおりです。

uid=1002(user1):ユーザーIDが1002、ユーザー名がuser1
gid=1003(user1):プライマリグループIDが1003、グループ名がuser1
groups=1003(user1),10(wheel),1010(developers):所属グループの一覧(プライマリ+セカンダリ)

2. 自分自身のグループを確認する

引数なしでidコマンドを実行すると、現在ログイン中のユーザー自身の情報が表示されます。

$ id uid=1002(user1) gid=1003(user1) groups=1003(user1),10(wheel),1010(developers)

3. グループ名だけを表示する(-Gnオプション)

グループ名の一覧だけを取得したい場合は、-Gnオプションを使います。

$ id -Gn user1 user1 wheel developers

スクリプトでグループ名を取得したいときに便利です。

4. プライマリグループだけを表示する(-gnオプション)

プライマリグループの名前だけを確認したい場合は、-gnオプションを使います。

$ id -gn user1 user1

groupsコマンドでグループを確認する

groupsコマンドは、ユーザーが所属しているグループ名をシンプルに表示します。idコマンドよりも出力がコンパクトで、グループ名だけをすばやく確認したいときに使います。

$ groups user1 user1 : user1 wheel developers

引数を省略すると、自分自身の所属グループが表示されます。

$ groups user1 wheel developers

/etc/passwdと/etc/groupファイルから確認する

idコマンドやgroupsコマンドが使えない環境や、GID(グループID番号)を直接確認したい場合は、設定ファイルを直接参照します。

1. /etc/passwdでプライマリグループのGIDを確認する

/etc/passwdファイルの4番目のフィールドがプライマリグループのGIDです。

$ grep user1 /etc/passwd user1:x:1002:1003::/home/user1:/bin/bash

各フィールドの意味は以下のとおりです。

user1:ユーザー名
x:パスワード(/etc/shadowに格納)
1002:UID(ユーザーID)
1003:GID(プライマリグループID)
/home/user1:ホームディレクトリ
/bin/bash:ログインシェル

2. /etc/groupでグループ名とメンバーを確認する

/etc/groupファイルを参照すると、グループに所属しているメンバー一覧がわかります。

$ grep user1 /etc/group user1:x:1003: wheel:x:10:user1 developers:x:1010:user1,user2,user3

/etc/groupの各フィールドの意味は以下のとおりです。

1番目:グループ名
2番目:パスワード(通常はx)
3番目:GID(グループID)
4番目:メンバー一覧(カンマ区切り)

※プライマリグループとして所属しているユーザーは、4番目のメンバー一覧には表示されません。これはよくある混乱ポイントです。

getentコマンドでグループを確認する

getentコマンドは、/etc/groupだけでなくLDAPやNISなどの外部認証データベースも含めてグループ情報を検索できます。ActiveDirectoryと連携している環境では、getentを使わないとグループが表示されない場合があります。

1. 特定のグループの情報を表示する

$ getent group developers developers:x:1010:user1,user2,user3

2. グループの全一覧を表示する

$ getent group root:x:0: bin:x:1: daemon:x:2: wheel:x:10:user1 developers:x:1010:user1,user2,user3 ~省略~

3. 特定ユーザーが所属するグループをgetentで検索する

getentの出力をgrepで絞り込めば、特定ユーザーがセカンダリグループとして所属しているグループを一覧できます。

$ getent group | grep user1 user1:x:1003: wheel:x:10:user1 developers:x:1010:user1,user2,user3

id・groups・getentの使い分け

3つのコマンドにはそれぞれ得意な場面があります。

id:UID・GID・所属グループをまとめて確認したいとき。最も情報量が多く、現場で一番使う
groups:グループ名だけをすばやく確認したいとき。出力がシンプル
getent:LDAP/NIS/ActiveDirectory連携環境でグループを確認するとき。外部認証も含めて検索できる

迷ったらまずidコマンドを使ってください。idコマンドだけで、ほとんどの場面は対応できます。

グループの追加・変更方法

グループの確認ができたら、次はグループの追加や変更の操作も押さえておきましょう。

1. ユーザーをセカンダリグループに追加する(usermod -aG)

既存ユーザーにセカンダリグループを追加するには、usermod -aGコマンドを使います。

# usermod -aG developers user1

【重要】-aオプションを忘れると既存グループが消える

-aオプション(append)を付けないと、そのユーザーのセカンダリグループが指定したグループだけに「上書き」されます。これは現場で本当に起きるミスです。

# 危険な例(-aなし) - 既存のセカンダリグループが全て消える # usermod -G developers user1 # 正しい例(-aGで追加) # usermod -aG developers user1

※usermodコマンドの実行にはroot権限が必要です。一般ユーザーの場合はsudoを付けて実行してください。

2. 新しいグループを作成する(groupadd)

# グループ名を指定して作成 # groupadd developers # GID(グループID)を指定して作成 # groupadd -g 2000 developers

GIDを指定したい場合は-gオプションを使います。複数サーバー間でGIDを統一したいときに使う手法です。

3. プライマリグループを変更する(usermod -g)

# user1のプライマリグループをdevelopersに変更 # usermod -g developers user1 # 変更結果を確認 $ id user1 uid=1002(user1) gid=1010(developers) groups=1010(developers),10(wheel)

プライマリグループを変更すると、そのユーザーが新しく作成するファイルのグループ所有者が変わります。変更する前に、既存ファイルへの影響を確認しておきましょう。

トラブルシュート:よくあるグループ関連のエラーと対処法

「Permission denied」でファイルにアクセスできない

ファイルやディレクトリにアクセスできない場合、まずそのファイルのグループ所有者と自分の所属グループを確認します。

# ファイルのグループ所有者を確認 $ ls -l /var/www/html/index.html -rw-rw-r-- 1 apache webadmin 1024 Mar 1 10:00 /var/www/html/index.html # 自分の所属グループを確認 $ id uid=1002(user1) gid=1003(user1) groups=1003(user1),10(wheel)

この例では、ファイルのグループが「webadmin」ですが、user1は「webadmin」グループに所属していません。対処法は、user1をwebadminグループに追加することです。

# user1をwebadminグループに追加 # usermod -aG webadmin user1

※グループの変更を反映するには、対象ユーザーが一度ログアウトして再ログインする必要があります。

usermod -aGしたのにグループが反映されない

usermod -aGでグループを追加しても、対象ユーザーがログイン中の場合は即座に反映されません。以下の方法で対処してください。

方法1:対象ユーザーがログアウトして再ログインする
方法2:newgrpコマンドで一時的にグループを切り替える

# 一時的にdevelopersグループに切り替える $ newgrp developers # 反映されたか確認 $ id

本記事のまとめ

やりたいこと コマンド
UID・GID・所属グループをまとめて確認 id ユーザー名
グループ名だけ表示 id -Gn ユーザー名
プライマリグループだけ表示 id -gn ユーザー名
所属グループをシンプルに表示 groups ユーザー名
LDAP/NIS環境も含めてグループ検索 getent group グループ名
グループの全一覧を表示 getent group
セカンダリグループに追加 usermod -aG グループ名 ユーザー名
GID指定でグループ作成 groupadd -g GID グループ名
プライマリグループを変更 usermod -g グループ名 ユーザー名

Linuxのユーザーとグループ管理、体系的に学んでいますか?

グループ管理はファイルのパーミッション設定やsudoの権限管理と密接に関連しています。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。