Linux 将用户添加到组中,但在运行时未反映”;id";

Linux 将用户添加到组中,但在运行时未反映”;id";,linux,unix,Linux,Unix,R创建了一个名为staff的组,我希望能够更新包,而不必像sudo那样启动R。因此,我通过以下方式加入了员工队伍: sudo usermod -G adm,dialout,cdrom,plugdev,lpadmin,admin,sambashare,staff matt (附带问题:有没有一种方法可以让你加入一个小组,而不列出你所属的其他小组?) 如果我选中/etc/groups,我会看到 staff:x:50:matt 对于/etc/shadow也一样 staff:*::matt 但是,

R创建了一个名为staff的组,我希望能够更新包,而不必像sudo那样启动R。因此,我通过以下方式加入了员工队伍:

sudo usermod -G adm,dialout,cdrom,plugdev,lpadmin,admin,sambashare,staff matt
(附带问题:有没有一种方法可以让你加入一个小组,而不列出你所属的其他小组?)

如果我选中/etc/groups,我会看到

staff:x:50:matt
对于/etc/shadow也一样

staff:*::matt

但是,如果我运行组或id,我就不是工作人员。另外,我无法更改/usr/local/lib/R中的任何内容。

您是否在运行
sudo usermod
命令后将“matt”帐户注销并重新登录?在unix下对用户所在的组所做的更改仅在登录时生效。

在回答您的附带问题时,您可以将用户添加到组中,而不列出所有用户。如果您运行基于Debian的系统,您可以使用

sudo adduser matt staff

adduser
实用程序只是useradd/usermod等的友好包装

如果您没有
adduser
实用程序,您仍然可以使用usermod执行此操作:

sudo usermod-a-G staff matt


-a
标志意味着追加(而不是覆盖)。

我知道最初的问题是针对Linux的,但OSX用户可以使用此命令执行相同的操作:

sudo dseditgroup -o edit -a newusertoadd -t user grouptobeaddedto

看看这个~

两者


将很好地完成此操作

解释:操作成功-这就是为什么您的名字会出现在
/etc/passwd
&
/etc/group
上的正确linux文件中,但一旦您打开一个新的终端进程,bash将使用此设置进行更新,您也可以执行
id matt

澄清:您已将自己添加到其他组中,因此应使用附加选项
-a
(并且不编辑用户的所有组名称)


谢谢虽然b/c I可以删除并读取到其他组,但这很奇怪,因为我已经是这些更改的成员。请注意,如果您通过
ssh
登录,并且您拥有
ControlMaster
,则连接将保持打开并重新使用,因此您也不会看到这些组。在这种情况下,要强制进行真正的新登录,您需要
ssh-O退出hostname
首先终止ssh共享连接,这是我的问题。我建议使用
-O stop
,它不会在为下一个会话创建新连接的同时终止现有SSH会话。请注意,
usermod
实用程序可用于Debian以及其他发行版(如Archlinux),因此在处理多个发行版的脚本时更受欢迎。它不是
newgrp groupname
,而是,我建议使用一个简单的
newgrp-
重新初始化用户环境。
newgrp groupname
su - username
sudo usermod -aG staff matt