You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unix系统中列出特定组的已登录用户?

嘿,我刚接触Unix/Linux的时候也折腾过这个问题,别慌,这几个实用方法能帮你快速筛选出特定组的已登录用户:

方法1:结合who、id和循环筛选

这是最直观的方式,先提取已登录用户,再逐个检查他们的所属组:

who | awk '{print $1}' | sort -u | while read user; do
  id -nG "$user" | grep -q "你的目标组名" && echo "$user"
done

拆解一下每个部分:

  • who | awk '{print $1}' | sort -u:从who的输出里提取唯一的用户名(避免同一个用户多次登录重复显示)
  • while read user; do ... done:循环处理每一个已登录的用户
  • id -nG "$user":列出该用户所属的所有组的名称(大写G表示显示所有组)
  • grep -q "你的目标组名":静默检查该用户是否属于目标组,匹配成功就输出用户名

方法2:用w命令替代who(可选)

w命令比who显示的信息更全,逻辑和上面一致,只是跳过表头行即可:

w | awk 'NR>1 {print $1}' | sort -u | while read user; do
  id -nG "$user" | grep -q "你的目标组名" && echo "$user"
done

NR>1的作用是跳过w命令输出的第一行表头,直接提取用户名。

方法3:直接解析登录记录文件(进阶)

Unix系统的登录信息存在/var/run/utmp里,可以用utmpdump解析后筛选:

utmpdump /var/run/utmp | awk '{print $4}' | grep -v "^$" | sort -u | while read user; do
  id -nG "$user" | grep -q "你的目标组名" && echo "$user"
done

这里utmpdump会把二进制的utmp文件转成可读格式,$4对应用户名字段,grep -v "^$"用来过滤空行。

小提示

  • 记得把命令里的你的目标组名换成实际要筛选的组,比如wheel或者admin
  • 不确定组是否存在?可以用getent group 目标组名先确认组信息
  • 这些命令在绝大多数Unix-like系统(比如Ubuntu、CentOS、FreeBSD)都能正常运行

内容的提问来源于stack exchange,提问作者Samun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:46:08