id命令用于显示用户和组的ID信息。它可以显示当前用户或指定用户的UID(用户ID)、GID(组ID)以及所属的所有组。
id [选项] [用户名]
如果不指定用户名,显示当前用户的信息。
| 术语 | 说明 | 示例 |
|---|---|---|
| UID | 用户ID(User ID),系统中用户的唯一标识 | root的UID是0 |
| GID | 组ID(Group ID),用户主组的唯一标识 | 1001 |
| 主组 | 用户的主要所属组,在/etc/passwd中定义 |
通常与用户名相同 |
| 附加组 | 用户所属的其他组,在/etc/group中定义 |
wheel, sudo, docker等 |
| 有效组 | 用户当前生效的组,影响新建文件的组所有权 | 可使用newgrp更改 |
| 参数 | 说明 |
|---|---|
用户名 |
指定要查看的用户名,如果不指定则显示当前用户信息 |
-a |
忽略,为与其他版本兼容而存在 |
-Z, --context |
只显示进程的安全上下文(SELinux) |
-g, --group |
只显示主组ID |
-G, --groups |
只显示所有组的ID |
-n, --name |
显示名称而不是ID,需与-u、-g或-G一起使用 |
-r, --real |
显示实际ID而不是有效ID,需与-u、-g或-G一起使用 |
-u, --user |
只显示用户ID |
--help |
显示帮助信息 |
--version |
显示版本信息 |
不带任何参数使用id命令:
$ id
uid=1001(john) gid=1001(john) groups=1001(john),10(wheel),1002(developers)
输出解释:
查看系统中其他用户的信息:
# 查看root用户信息
$ id root
uid=0(root) gid=0(root) groups=0(root)
# 查看mysql用户信息
$ id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
使用-u参数只显示UID:
$ id -u
1001
$ id -u root
0
$ id -u mysql
27
使用-g参数只显示主组ID:
$ id -g
1001
# 显示名称而不是ID
$ id -gn
john
# 查看root的主组
$ id -g root
0
$ id -gn root
root
使用-G参数显示用户所属的所有组ID:
$ id -G
1001 10 1002
$ id -Gn
john wheel developers
# 以逗号分隔
$ id -Gn | tr ' ' ','
john,wheel,developers
使用-n参数显示名称,需与其他参数配合使用:
# 显示用户名
$ id -un
john
# 显示组名
$ id -gn
john
# 显示所有组名
$ id -Gn
john wheel developers
使用-r参数显示实际ID(real ID):
# 切换到其他用户
$ sudo su - john
# 显示有效ID(当前生效的)
$ id -u
1001
# 显示实际ID(原始的)
$ id -ru
0 # 实际是root,但有效用户是john
在脚本中使用id检查用户是否存在:
#!/bin/bash
# 检查用户是否存在
check_user() {
if id "$1" &>/dev/null; then
echo "用户 $1 存在"
return 0
else
echo "用户 $1 不存在"
return 1
fi
}
# 测试
check_user "john"
check_user "nonexistentuser"
使用-Z参数显示SELinux安全上下文:
# 显示SELinux上下文(如果系统启用了SELinux)
$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 显示指定用户的SELinux上下文
$ id -Z root
system_u:system_r:init_t:s0
在Shell脚本中获取用户信息:
#!/bin/bash
# 获取当前用户的UID
CURRENT_UID=$(id -u)
echo "当前用户UID: $CURRENT_UID"
# 检查是否为root用户
if [ "$CURRENT_UID" -eq 0 ]; then
echo "当前是root用户"
else
echo "当前不是root用户"
fi
# 获取用户所属的所有组
USER_GROUPS=$(id -Gn)
echo "用户所属的组: $USER_GROUPS"
# 检查用户是否在wheel组中
if echo "$USER_GROUPS" | grep -q "wheel"; then
echo "用户在wheel组中"
else
echo "用户不在wheel组中"
fi
id -u检查是否为root用户id -Gn | grep -q "groupname"检查用户是否在特定组中id username &>/dev/null检查用户是否存在$(id -un)A: 使用id -u命令,如果返回0就是root:[ $(id -u) -eq 0 ]
A: 表示指定的用户名不存在于系统中。
A: 使用id -Gn | grep sudo或id -nG | grep -q sudo
A: 实际ID是用户登录时的原始ID,有效ID是当前会话中生效的ID(可能通过su或sudo改变)。
A: 使用cut -d: -f1,3 /etc/passwd或getent passwd | cut -d: -f1,3
whoami - 显示当前用户名groups - 显示用户所属的组getent - 从系统数据库中获取条目passwd - 用户密码文件su - 切换用户身份sudo - 以其他用户身份执行命令useradd - 添加用户usermod - 修改用户账户