Linux / Unix id 命令示例
我是 Linux 和 Unix 系统的新用户。如何找出当前用户或服务器上任何用户的用户名和组名以及数字 ID?如何使用命令行选项显示系统上的有效 ID?在 Linux 中,如何查找用户的 UID 或 GID?
要在 Linux/类 Unix 操作系统中查找用户的 UID(用户 ID)或 GID(组 ID)和其他信息,请使用 id 命令。
- 获取用户名和真实用户ID
- 查找特定用户的 UID
- 列出用户所属的所有组
- 显示 UID 以及与用户关联的所有组
- 显示当前用户的安全上下文
- 有效的 Linux 或 Unix 用户名和有效用户 ID (UID)
- 有效 Linux 或 Unix 用户组的名称和有效组 ID (GID)
目的
显示指定用户的系统标识。
id 命令语法
基本语法是:
id
id [UserNameHere]
id [options]
id [options] [UserNameHere]
默认情况下,id 命令显示调用进程(即在屏幕上运行 id 命令的当前用户)的用户名和组名以及数字 ID。如果[UserNameHere]在命令行上给出了登录名或用户 ID(),则显示该用户的用户和组 ID。
Linux / Unix id 命令示例
让我们看看如何使用 13 个 id 命令实例在 Linux 或类 Unix 操作系统上查找用户的 UID 或 GID。首先,打开终端应用程序,然后输入:
显示自己的 UID 和 GID
输入命令:
id
示例输出:
图 01:id 命令实际作用
如何找到特定用户的 UID?
在此示例中,查找 vivek 用户的 UID,输入:
示例输出:
id -u {UserNameHere}
id -u vivek
501
如何找到特定用户的 GID?
在此示例中,找到 vivek 用户的 GID,运行:
示例输出:
id -g {UserNameHere}
id -g vivek
20
如何查看 UID 以及与用户名关联的所有组?
在此示例中,查找与名为“root”的用户关联的 UID 和所有组,输入:
示例输出:
id {UserNameHere}
id root
uid=0(root) gid=0(wheel) groups=0(wheel),1(daemon),2(kmem),3(sys),4(tty),5(operator),8(procview),9(procmod),12(everyone),20(staff),29(certusers),61(localaccounts),80(admin),33(_appstore),98(_lpadmin),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),399(com.apple.access_ssh)
找出用户所属的所有组...
在此示例中,显示 UID 以及与名为“vivek”的用户关联的所有组(次要组),运行:
示例输出
id -G {UserNameHere}
id -G vivek
20 12 61 79 80 81 98 33 100 204 398 399
显示名称而不是 UID/GID
默认情况下,id 命令显示-G、-g和选项的数字。您可以通过传递选项强制 id 命令显示 UID 或 GID 的名称而不是、和选项-u的数字,如下所示:
示例输出:-G-g-u-n
id -ng {UserNameHere}
id -nu {UserNameHere}
id -nG {UserNameHere}
id -nG vivek
staff everyone localaccounts _appserverusr admin _appserveradm _lpadmin _appstore _lpoperator _developer com.apple.access_screensharing com.apple.access_ssh
如何显示指定用户的真实ID而不是有效ID?
-g您可以通过传递以下命令来显示、-G和选项的真实 ID ,-u而不是有效 ID -r:
id -r -g {UserNameHere} id -r -u {UserNameHere} ### [NOTE]########################### ### -r and -G only works on Linux ### ##################################### id -r -G {UserNameHere} id -r -u vivek
示例输出:
501
如何在 Linux 上显示 SELinux 安全上下文?
要仅显示当前用户的安全上下文,请输入:
### [NOTE]########################### ### This is a Linux only option ### ##################################### id -Z
示例输出:
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Unix 特定功能:显示进程审计用户 ID
显示进程审计用户 ID 和其他进程审计属性,这需要权限。此选项适用于一些类 Unix 操作系统,例如 FreeBSD 或 Unix:
### [NOTE]########################### ### This is a Unix only option ### ##################################### id -A
我的 Apple OS X/FreeBSD 的输出格式如下:
auid=501 mask.success=0xffffffff mask.failure=0xffffffff termid.port=0x03000002 asid=100004
与 UID 和 EID 相关的 Shell 变量
现代 shell 比如 bash/ksh 可能会设置以下变量:
- EUID– 扩展为当前用户的有效用户 ID,在 shell 启动时初始化。此变量是只读的。
- UID– 扩展为当前用户的用户 ID,在 shell 启动时初始化。此变量是只读的。
您可以使用 echo 或 printf shell 命令打印它们,如下所示:
echo "Your UID : $UID" echo "Your EID : $EUID"
示例输出:
Your UID : 501 Your EID : 501
您的 shell 使用 id 命令在系统范围的启动文件(例如 /etc/profile)中设置 EUID 和 UID。以下是基于 Linux 系统的片段:
.... .. if [ -x /usr/bin/id ]; then if [ -z "$EUID" ]; then # ksh workaround EUID=`id -u` UID=`id -ru` fi USER="`id -un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" fi .... ..
在脚本中确定 root 权限
Linux 和 Unix sysadmin 相关 shell 脚本必须由 root 用户运行。以下 shell 脚本显示如何在脚本中确定 root 权限:
#!/bin/bash ## if root user not running this script, die with a message on screen ## if [ $(id -u -r) -ne 0 ] then echo "Requires root privileges. Please re-run using sudo." exit 1 fi ## add sysadmin related command below ##
或者您可以在 shell 脚本中使用如上所述的 EUID :
(( EUID )) && { echo 'Requires root privileges. Please re-run using sudo.'; exit 1; } || echo 'Running script as root...'
id 命令选项
选项 | 目的 | 操作系统 |
-g | 仅显示有效的组ID | 全部 |
-G | 显示所有组 ID | 全部 |
-u | 仅显示有效用户ID | 全部 |
-n | 显示名称而不是数字,例如-u或-g | 全部 |
-r | -u使用或显示真实 ID 而不是有效 ID-g | 全部 |
-Z | 仅显示当前用户的安全上下文 | SELinux |
-A | 显示进程审计用户 ID 和其他进程审计属性 | 精选类 Unix |
相关媒体
本教程还提供简短视频格式:
参见
- 使用 man 命令或 help 命令查看 id(1) Linux 命令手册页:
$ man id