萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 查詢群組是否包含指定使用者的指令技巧

在 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 詞邊界,確保精確匹配使用者名。

更友善的工具:getent / id / groups

# 查詢群組完整資訊(支援 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 若非檔案後端則不會即時更新。

查詢群組成員示意圖

copyright © 萬盛學電腦網 all rights reserved