id 命令不显示所有用户的组

Nau*_*sam 8 group

我做了一个usermod将当前用户添加到user组中的操作,但是当我运行id -Gn它时只显示主用户的组:

[user@computer ~]$ id -Gn 
user
Run Code Online (Sandbox Code Playgroud)

但是当我指定用户时,它正常工作:

[user@computer ~]$ id -Gn user
user newgroup
Run Code Online (Sandbox Code Playgroud)

你知道为什么它会这样吗?我是否遗漏了有关 UNIX 中组管理的内容?

Bob*_*tle 15

那是因为您的活动组集仅在登录时确定。您需要注销并再次登录以获取更改并查看它反映的id. 您可以通过发出cat /proc/$$/statuswhich 列出您当前(会话)进程状态的另一种方式来查看这一点。

  • 在任何一种情况下,`id` 读作 `/etc/group` 都是不相关的。`id` 将调用 `getgroups(3)`,它返回当前会话的 `gid_t` 类型(整数)数组。`id` 需要扫描 `/etc/group` 文件以检索组的名称(例如 `100(users)`、`10(wheel)`...)。当你给 `id` 一个用户名时,它必须打开 `/etc/passwd` 文件来获取用户 ID,然后它会在 `/etc/group` 文件中找到这个用户所属的组。 (2认同)
  • @slebanc - 那是不正确的。如果您在没有特定用户的情况下调用 id,它将按照 John WH Smith 的建议进行操作 - 它只会返回在当前会话中注册的组,而不会直接或间接使用 /etc/group。自己试试看。为自己添加一个组到 /etc/group,然后运行 ​​id。在您注销并再次登录之前,您不会看到新组。不仅如此,正如 Keith Thompson 所说,当获取组名时,/etc/group 文件仅在 nsswitch.conf 文件列出组映射的“文件”时使用。尽管这是默认设置,但可以配置其他来源。 (2认同)