Linux/Unix id命令示例
如何找到当前用户或者服务器上任何用户的用户名和组名以及数字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命令的当前用户。
如果在命令行上给出了登录名或者用户ID,则会显示该用户的用户ID和组ID。
Linux/Unix id命令示例
让我们看看如何使用13 id命令实际示例在Linux或者类似Unix的操作系统上查找用户UID或者GID。
首先,打开终端应用程序,然后执行:
显示您自己的UID和GID
输入命令:
id
如何找到特定用户的UID?
在此示例中,找到一个Hyman用户UID,执行:
id -u {UserNameHere} id -u Hyman
输出示例:
501
如何找到特定用户的GID?
在此示例中,找到一个Hyman用户GID,运行:
id -g {UserNameHere} id -g Hyman
输出示例:
20
如何查看UID和与用户名关联的所有组?
在此示例中,找到UID和与一个名为root的用户相关联的所有组,执行:
id {UserNameHere} id root
找出用户所属的所有组
在此示例中,显示UID和与名为Hyman的用户相关联的所有组(辅助组),运行:
id -G {UserNameHere} id -G Hyman
输出示例
20 12 61 79 80 81 98 33 100 204 398 399
显示名称而不是UID/GID
默认情况下,id命令显示-G,-g和-u选项的编号。
您可以通过传递如下的-n选项来强制id命令显示UID或者GID的名称,而不是-G,-g和-u选项的编号:
id -ng {UserNameHere} id -nu {UserNameHere} id -nG {UserNameHere} id -nG Hyman
输出示例:
staff everyone localaccounts _appserverusr admin _appserveradm _lpadmin _appstore _lpoperator _developer com.apple.access_screensharing com.apple.access_ssh
如何显示指定用户的真实ID而不是有效ID?
您可以通过传递-r选项来显示-g,-G和-u选项的真实ID而不是有效ID:
id -r -g {UserNameHere} id -r -u {UserNameHere} ### [NOTE]########################### ### -r and -G only works on Linux ### ##################################### id -r -G {UserNameHere} id -r -u Hyman
输出示例:
501
如何显示SELinux在Linux上显示安全性上下文?
要仅显示当前用户的安全上下文,请执行:
### [NOTE]########################### ### This is a Linux only option ### ##################################### id -Z
输出示例:
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Unix特定功能:显示流程审核用户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变量
诸如bash/ksh之类的现代shell可以设置以下变量:
EUID
扩展为当前用户的有效用户ID,在shell启动时初始化。此变量是只读的。- UID扩展为当前用户的用户ID,在shell启动时初始化。此变量为只读。您可以使用echo或者printf shell命令按如下所示打印它们:
echo "Your UID : $UID" echo "Your EID : $EUID" ```输出示例: ``` sh 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...'