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