我想将自己添加到“docker”组。这些是我运行的命令及其输出:
user1@laptop-p3510:~$ sudo usermod -a -G docker user1
user1@laptop-p3510:~$ groups
user1 adm cdrom sudo dip plugdev lpadmin lxd sambashare
user1@laptop-p3510:~$ whoami
user1
user1@laptop-p3510:~$ groups user1
user1 : user1 adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
我是否在“docker”组中?为什么groups $USER
给出不同的结果groups
?
因为您需要注销并重新登录才能使添加的组处于活动状态。
groups
返回您在当前会话中所属的组groups user1
检查配置说明用户是哪个成员。因为您添加
user1
到一个组并且您尚未注销并再次重新user1
登录,所以当您登录时该组是其中的成员,当前会话将使用这些组。希望有帮助
与 UID 和 GID 一样,组是每个进程的凭证。每个进程都有自己所属的组列表,它在登录时从 /etc/group 初始化(由处理您的登录的初始进程),但在其他情况下从父进程继承。
因此,当您
groups
从 shell 运行时,它会从 shell 继承组列表(从终端应用程序等继承它们),这就是它显示的列表。这同样适用于 所示的 UID 和 GIDid
(实际上也适用于 所示的环境变量env
)。当 /etc/group 更新时,此列表不会自动更改 – 直到您下次登录。另一方面,运行
groups SomeUser
or要求程序直接从 /etc/group 读取组信息(与登录过程的方式相同),因此它自然会为您提供更新的列表。id SomeUser
(用户切换工具像
su
和sudo
也做同样的事情,所以如果你迫切需要对特定组做某事,你可以“su”到 root 然后“su”回到你自己 - su 将重新初始化组列表作为其一部分工作。你还会注意到只有“su”运行的 shell 有新的组,而所有其他 shell 仍然显示旧的。)要回答这个问题,是的,您的帐户在“docker”组中,但您从中运行“组”的特定 shell 却不在。大多数事情不关心帐户,只关心执行操作的特定进程(有一些例外)。