`groups` 和 `groups $USER` 显示不同的组(缺少拨出)

doo*_*oom 5 groups

我在打开 USB 端口时遇到问题/dev/ttyUSB0

此端口的设备节点是:

crw-rw---- 1 root dialout 188, 0 juil. 25 17:18 /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

groups命令和组似乎存在问题,dialout如下所示:

doom@doom-PC:~$ groups
doom adm cdrom sudo dip plugdev lpadmin sambashare
doom@doom-PC:~$ whoami
doom
doom@doom-PC:~$ groups doom
doom : doom adm dialout cdrom sudo dip plugdev lpadmin sambashare
doom@doom-PC:~$ groups $USER
doom : doom adm dialout cdrom sudo dip plugdev lpadmin sambashare
Run Code Online (Sandbox Code Playgroud)

由于我是厄运,为什么该groups命令不在dialout其输出中显示该组?

所以,为什么我不能这样做:

doom@doom-PC:~$ touch /dev/ttyUSB0 
touch: cannot touch '/dev/ttyUSB0': Permission denied
Run Code Online (Sandbox Code Playgroud)

真以为两者是息息相关的!

这是在 Ubuntu 18.04 LTS 上。

PS:如果我这样做newgrp dialout,它可以工作,但它不是持久的(并且不是用户友好的)。

Eli*_*gan 5

TL;DR:注销并重新登录就足够了。

这是预期的行为。具体来说,当一个用户被添加到一个组中时,该用户的现有会话继续表现得好像该用户不在该组中一样。在用户Xgroups和 中看到不同组列表的情况下,这几乎总是发生的事情。不带用户名参数的命令显示适用于运行它的会话的组。groups Xgroups

正如您所观察到的,重新启动工作,但注销并重新登录就足够了。实际上,即使注销也不是必需的,因为即使以前的登录仍然处于活动状态,后续登录也具有组成员身份的状态和权限。

请注意,您在 Ubuntu 终端窗口中的shell不是登录 shell(与某些操作系统(例如 macOS)不同),因此打开新的终端窗口或选项卡无效。

newgrp确实既不持久也不非常人性化。但这主要是针对您想暂时采用群体身份的情况。以后的登录不必运行它。