「id(1)」-

打印真正的有效用户ID和组ID

命令语法格式

id [OPTION]… [USER]

命令描述

命令id打印关于给定用户USER的信息,如果没有指定用户USER,则打印运行id命令的进程的用户和组信息。

USER可以是用户ID或用户名。如果USER为用户ID,则需要使用前导加号(+),否则id会将USER视为一个用户名。请参阅消除歧义名称和ID

默认情况下,打印真实用户ID、实际组ID、有效用户ID(如果不同于真实用户ID)、有效组ID(如果不同于真实组ID)、补充组ID。另外,如果启用SELinux并且未设置POSIXLY_CORRECT环境变量,则打印’context=c’,其中c是安全上下文。

在命令的输出中,每个数字值前面都有一个标识字符串,后面跟着相应的用户名或组名。

命令支持的选项及含义

-Z, –context
只打印进程的安全上下文,通常是从父进程继承的用户安全上下文。如果SELinux或SMACK都未启用,则打印警告,并将状态1退出。

-g, –group
仅打印基本组ID。

-G, –groups
打印基本组ID与附属组ID。

-u, –user
只打印用户ID。

-r, –real
与-u、-g、-G选项一起使用,打印出真正的用户ID或组ID,而不是默认的有效ID。

-n, –name
与-u、-g、-G选项一起使用,打印出用户名或组名,而不是默认的ID。

-z, –zero
使用NUL来分割字符,而不是默认的空白字符。使用默认输出格式时,不允许使用此选项。

其他选项

–help
显示帮助并退出。

–version
显示版本信息。

-a
被忽略的选项,只是为了兼容之前的版本。

基本组(Primary)与附属组(Supplementary)

基本组,也被称为Primary Group、First Group、Initial Login Group,用户的默认组,用户的GID所标识的组。

附属组,也被称为Secondary Group、Supplementary Group,用户的附加组。

系统中所有的组及其信息保存在/etc/group文件中,该文件中保存了组名、组ID以及一些其他的信息,他们之间由冒号(:)分隔。而用户的所属的基本组保存在/etc/passwd文件中,各个字段也是由冒号(:)分隔的,其中第4个字段为组ID,对应了/etc/group中的组ID。而用户所属的附属组信息保存在/etc/gshadows/gshadows文件中。

实际用户与有效用户、实际用户组与有效用户组

在Unix进程中涉及多个用户ID和用户组ID,包括如下:

1、实际用户ID和实际用户组ID:标识我们是谁。也就是登录用户的uid和gid,比如我们的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看)。

2、有效用户ID和有效用户组ID:进程用来决定我们对资源的访问权限。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当set-user-ID(SUID)位设置,则有效用户ID等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了set-group-ID(SGID)位,则有效用户组ID等于文件所有者的gid,而不是实际用户组ID。

相关手册

查看在线手册:http://www.gnu.org/software/coreutils/id

查看info手册:info ‘(coreutils) id invocation’

参考文献

更新日志

  • 12/14/2017 创建文章
  • 06/22/2018 修改文章内容,重新整理