首页 > Sysadmin > 正文

Linux 系统中查看用户 ID 与 GID:4 条命令实测

huyuanwen 2026-11-02 Sysadmin

Linux 系统用 UID(用户标识号)识别每个账号,以下 4 条命令覆盖查看自己和他人的 UID/GID 全场景,均经 WSL2 验证。

id:最完整的用户身份信息

id 命令同时显示真实 UID、有效 UID、GID 和所属附加组,无参数时默认查看当前用户 [1]。

id
# uid=1000(username) gid=1000(username) groups=1000(username)

常用选项:

  • id -u — 只输出真实 UID,适合脚本 [1]
  • id -g — 只输出真实 GID
  • id -G — 输出所有 GID(数字)
  • id -Gn — 输出所有附加组名

getent passwd:读取 NSS 用户库

getent passwd <用户名> 从 Name Service Switch 读取 /etc/passwd 整行,支持 LDAP/NIS 等远程认证 [4]。

getent passwd username
# username:x:1000:1000:姓名:/home/username:/bin/bash

输出格式与 /etc/passwd 一致:第 3 字段是 UID,第 4 字段是 GID [2]。

whoami:快速查看当前用户名

whoami 只输出有效用户名,适合判断 su 或 sudo 后的身份切换 [3]。

whoami
# username

/etc/passwd:直接读取用户数据库

/etc/passwd 每行对应一个账号,冒号分隔,第 3 字段为 UID,第 4 字段为 GID [2]。

grep "^username:" /etc/passwd
# username:x:1000:1000:姓名:/home/username:/bin/bash

排错速查表

现象 原因 处理
id 和 whoami 输出不同用户 设置了有效 UID(setuid 程序) id -u 看真实 UID
getent passwd 找不到用户 用户来自远程 NSS,本地无记录 确认 nsswitch.conf 配置
/etc/passwd 没有该用户 用户仅存在于 LDAP/SSSD 用 getent 替代

回滚与局限性

  • /etc/passwd 不应手动编辑,使用 vipw 命令防止并发损坏 [2]
  • UID 0 是超级用户,普通进程无法将他人 UID 改为 0
  • 容器环境可能不包含所有系统用户

附录

  • 测试机:WSL2 Ubuntu 24.04.4 LTS
  • 内核:Linux 6.6.114.1-microsoft-standard-WSL2
  • 测试日期:2026-11-02
  • 观察结果:id 输出 uid=0(root) gid=0(root) groups=0(root),id -u 输出 0,getent passwd root 输出 root:x:0:0:root:/root:/bin/bash,whoami 输出 root,id -Gn 输出 root。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。