可通过cat /etc/passwd、getent passwd、compgen -u、awk解析等命令查看Linux所有用户;通过cut /etc/group、getent group等命令查看所有用户组。

如果您需要了解当前Linux系统中所有已创建的用户及用户组信息,则可以通过系统内置命令直接读取用户数据库文件或调用账户管理工具获取。以下是执行此操作的具体步骤:
一、使用cat命令读取/etc/passwd文件查看所有用户
/etc/passwd文件存储了系统中每个用户的基本账户信息,每行对应一个用户,字段以冒号分隔,包含用户名、UID、主组GID、家目录、默认Shell等关键数据。
1、打开终端,输入以下命令并回车执行:
cat /etc/passwd
2、若仅需显示用户名列(即每行第一个字段),可配合cut命令过滤:
cut -d: -f1 /etc/passwd
3、为避免输出过长影响阅读,可添加管道符与less命令分页查看:
cut -d: -f1 /etc/passwd | less
二、使用getent命令查询用户数据库
getent命令能统一访问多种名称服务源(如files、DNS、LDAP),适用于启用了NSS扩展的系统,结果更全面且兼容网络用户。
1、执行以下命令列出所有本地及可解析用户:
getent passwd
2、提取纯用户名列表:
getent passwd | cut -d: -f1
3、若仅关注UID大于等于1000的普通用户(排除系统账户),可结合awk筛选:
getent passwd | awk -F: '$3 >= 1000 {print $1}'
三、使用compgen命令列出当前shell可用用户
compgen是bash内置命令,用于生成可能的命令补全候选词,其中-u选项专用于枚举系统用户列表,输出简洁且无需读取底层文件。
1、在bash或zsh终端中直接运行:
compgen -u
2、将结果按字母顺序排序显示:
compgen -u | sort
3、统计用户总数:
compgen -u | wc -l
四、使用awk解析/etc/passwd并筛选活跃用户
通过awk可灵活匹配特定条件,例如排除nologin、false等不可交互Shell的用户,聚焦实际可登录账户。
1、列出Shell路径不为/sbin/nologin和/bin/false的用户:
awk -F: '$7 != "/sbin/nologin" && $7 != "/bin/false" {print $1}' /etc/passwd
2、进一步排除无密码且被锁定的用户(检查/etc/shadow中密码字段为*或!):
awk -F: '$7 != "/sbin/nologin" && $7 != "/bin/false" {print $1}' /etc/passwd | while read u; do grep "^$u:" /etc/shadow | grep -q '^[^:]*:[!*]' || echo "$u"; done
五、查看所有用户组信息
/etc/group文件保存了系统中每个用户组的定义,包括组名、GID及成员列表;getent group则提供一致的接口访问方式。
1、显示全部组名:
cut -d: -f1 /etc/group
2、使用getent获取组信息:
getent group
3、查询指定用户所属的所有组(例如用户test):
groups test
4、列出属于某个组(例如wheel)的所有用户:
getent group wheel | cut -d: -f4 | tr ',' '\n'










