在 Linux 多使用者環境中,管理員常需確認某使用者是否已被加入特定群組(如 docker, wheel, sudo 等)。由於群組成員變更需重新登入或執行 newgrp 才生效,即時查詢 /etc/group 是最直接的驗證方式。本文提供幾種常用指令與腳本化範例。
# 1. 直接查看群組檔案
grep "^dc-group:" /etc/group
# 2. 進一步過濾使用者
grep "^dc-group:" /etc/group | grep "user1"
# 3. 單行判斷(腳本適用)
if grep -q "^dc-group:.*\buser1\b" /etc/group; then
echo "user1 在 dc-group 中"
else
echo "user1 不在 dc-group"
fi
^dc-group: 鎖定群組名開頭,避免誤匹配 dc-group2。\b 詞邊界,確保精確匹配使用者名。# 查詢群組完整資訊(支援 LDAP/NIS 等外部來源)
getent group dc-group
# 查看某使用者所屬群組
id user1
groups user1
# 反向查詢:某群組有哪些成員
getent group dc-group | cut -d: -f4 | tr ',' '\n'
推薦使用 getent,因為它同時查詢本地 /etc/group 與名稱服務(NIS/LDAP/SSSD),結果最完整。
#!/bin/bash
# check_group_member.sh host_list.txt group user
hosts=$1; grp=$2; usr=$3
while read -r h; do
ssh "$h" "getent group $grp | grep -q '\b$usr\b'" \
&& echo "[$h] $usr IN $grp" \
|| echo "[$h] $usr NOT IN $grp"
done < "$hosts"
透過 Web 介面(如 FreeIPA、LDAP 管理面)新增群組成員後,**需等待緩存過期或執行 sssd_cache -E/nscd -i group 清除快取**;本機 /etc/group 若非檔案後端則不會即時更新。
