直接运行 id 显示完整UID/GID和所有组信息;id -u、-g、-G 分别输出纯数字UID、主GID、全部GID;查其他用户需确保用户名存在且拼写正确。

id 不加参数就显示完整UID/GID和组列表
直接运行 id 是最常用也最稳妥的方式。它会一次性输出当前用户的 UID、主 GID,以及所有所属组(包括主组和附加组)的 ID 和名称。
输出类似:uid=1000(john) gid=1000(john) groups=1000(john),4(adm),27(sudo),115(docker)。其中 uid 后是用户 ID,gid 后是主组 ID,groups 后是全部组(含主组)的 GID 列表。
注意:groups 字段里第一个数字(这里是 1000)就是主组,后面才是附加组;但如果你只关心“属于哪些组”,这个顺序无关紧要。
用 id -u 和 id -g 快速提取纯数字 UID/GID
脚本或自动化任务里常需要纯数字,不带括号和用户名。这时不能依赖 id 默认输出再切字段,而应直接用参数:
-
id -u→ 输出当前用户 UID 数字,例如1000 -
id -g→ 输出当前用户主组 GID 数字,例如1000 -
id -G→ 输出所有组的 GID 数字,空格分隔,例如1000 4 27 115
别混淆 id -g 和 id -G:前者只返回主组,后者返回全部组(含主组)。很多权限判断逻辑依赖的是主组,不是附加组,这点容易错。
查看其他用户时,id 用户名 会报错?检查用户名是否存在
执行 id nobody 没问题,但 id nonexistent 会提示 id: ‘nonexistent’: no such user。这不是命令用错了,而是系统里真没这个用户。
排查步骤:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先确认用户名拼写是否正确(区分大小写)
- 查
/etc/passwd:运行getent passwd nonexistent或grep '^nonexistent:' /etc/passwd - 注意:有些服务账户(如
www-data、mysql)可能被创建为系统用户(UID /etc/passwd 中,id能正常查到
如果用户确实不存在,id 就不会输出任何有效字段——它不返回空值,而是直接报错并退出,状态码为 1。
想只看组名而不是 GID?组合 -n 和 -G 参数
默认 id -G 输出数字,但加 -n 就变成名称:id -nG 输出 john adm sudo docker。
几个常见组合:
-
id -gn→ 只显示主组名(不是数字) -
id -un→ 显示当前用户名(等价于whoami) -
id -nG www-data→ 查指定用户的全部组名
注意:-n 必须和 -g 或 -G 连用才生效;单独 id -n 会报错。另外,组名解析依赖 /etc/group,如果该文件损坏或 NFS 挂载异常,-n 可能 fallback 成数字。
真正容易被忽略的是:UID/GID 数字本身没有“含义”,关键看它对应哪个用户或组,以及该用户/组在文件权限、sudoers、容器命名空间等上下文中的实际作用。别只盯着数字,得结合 ls -l、cat /etc/group 或具体服务配置一起看。










