Linux/Unix id命令示例

时间:2020-01-09 10:46:03  来源:igfitidea点击:

如何找到当前用户或者服务器上任何用户的用户名和组名以及数字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...'