首页/系统/Linux 运维命令速查/id 查看用户身份与组

id 查看用户身份与组

id 显示当前或指定用户的 UID、主组与全部附加组;排查权限问题时第一命令,-u/-g/-G 便于脚本取值。

Linux 运维命令速查系统更新于 2026-10-13

id 是什么

id 显示用户身份:UID、主组与全部附加组。排查权限问题的第一步几乎都是它——文件能不能读、目录能不能进,最终都取决于进程的有效身份与组列表。它还能加参数查询指定用户,只输出 UID 或组名的形式适合直接用在脚本里取值。

基本信息

适用平台Linux、Unix 通用(coreutils)
命令语法id [选项] [用户名]
常用选项-u 只输出 UID / -g 主组 GID / -G 全部组 GID / -n 输出名字而非数字 / -Z 显示安全上下文
相关文件/etc/passwd、/etc/group,以及进程的 /proc/PID/status

典型使用场景

  • 确认当前登录身份,尤其是切换用户之后到底变成了谁
  • 排查文件读不了:对比进程身份与文件的属主属组
  • 加组后验证是否生效,新登录会话才会带上新组
  • 脚本里取 UID 判断是否 root,UID 为 0 就是 root
  • 容器内确认映射身份,避免与宿主机的账号混淆

常用示例

常用示例
id
id deploy
id -u deploy && id -gn deploy && id -G deploy   # 脚本取值
id -nG deploy        # 只要组名列表
id -Z                # 查看当前安全上下文

输出逐段读法

片段含义怎么看
uid用户 ID 与登录名uid=0 就是 root
gid主组 ID 与组名新建文件默认以此为属组
groups附加组列表决定能访问哪些组共享资源
contextSELinux 安全上下文权限问题追到策略层时的入口
进程的实际身份以 /proc/PID/status 里的 Uid、Gid 两行为准;systemd 服务可以用 systemctl show -p User -p Group 查它是以谁的身份启动的。
文件访问按进程当前的有效组列表判定。用户被加进新组后,已有登录会话不会自动生效,需要重新登录或新开会话。
脚本里判断当前是否 root,用 id -u 的输出是否等于 0 更可靠,比较用户名可以被同名账号糊弄;只要名字时用 id -un,只要数字时用 id -u,需要组名列表时用 id -Gn。
排查权限问题时,先确认服务进程以哪个身份运行,再切换到同一个身份执行同一条命令复现,结论才可信;用自己的登录身份测试通过,往往与服务实际遇到的情况无关。容器里则要在容器内部确认身份,与宿主机的映射不是一回事。

易错点

  • 加组后不重新登录,shell 里的组列表仍是旧的,权限看着该有却没有
  • 容器内的身份映射与宿主机不同,排查挂载目录权限要在容器内执行 id
  • 只看文件的属主不看组的附加权限,容易漏掉组可写这类情况
  • 用登录名判断是否 root 不可靠,可以自建同名用户,要认 UID 是否为 0
  • 服务进程的启动用户由单元文件决定,与登录用户不是一回事
  • 把附加组一次性列出来就认为权限已生效:附加组在登录时确定,改动之后需要重新登录或重新获取组身份,正在运行的会话仍按旧的组集合判定

数据来源与参考

  • man 1 id(coreutils)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌