如何列出以root为附属组的用户?主组与附属组区分方法
如何列出以root为附属组的所有用户?
当然有可行的方法来解决这个问题!你提到直接查看/etc/group和/etc/passwd时难以区分主组与附属组,确实这两个文件的分工很明确:/etc/passwd里的第4字段是用户的主组GID,而/etc/group中每个组条目最后一个字段,才是把该组作为附属组的用户集合。
下面是几种实用的命令方案,按需选择:
1. 直接解析本地/etc/group文件
这是最直接的本地用户查询方式,用grep定位root组,再用cut提取成员列表:
grep '^root:' /etc/group | cut -d: -f4
- 说明:
^root:确保只匹配以root开头的组条目(避免误匹配其他含root的组名),cut -d: -f4以冒号为分隔符,取出第4个字段——也就是该组的附属组成员,多个用户会用逗号分隔。
2. 用getent兼容集中用户管理场景
如果你系统里存在NIS、LDAP这类集中用户数据库,getent会比直接读文件更靠谱,它会查询系统所有配置的用户数据源:
getent group root | cut -d: -f4
效果和第一种方法一致,但兼容性更强,适合企业级多节点环境。
3. 精准筛选(排除主组为root的用户)
如果需要严格区分「仅附属组是root」的用户(排除root自身这类主组就是root的情况),可以用循环结合id命令逐个校验:
for user in $(cut -d: -f1 /etc/passwd); do primary_group=$(id -ng "$user") if [ "$primary_group" != "root" ] && id -nG "$user" | grep -q 'root'; then echo "$user" fi done
- 说明:
id -ng获取用户的主组名称,id -nG列出用户所属的所有组(主组+附属组),通过判断主组不是root且组列表包含root,来精准筛选目标用户。
内容的提问来源于stack exchange,提问作者SGodoy
相关产品推荐
相关产品推荐

