如何查看用户所属组 groups和id命令解析

发布时间 - 2025-08-15 00:00:00    点击率:

要查看用户所属群组,应使用groups或id命令。1. 使用groups命令可直接列出用户所属的所有组,如groups username;2. 使用id命令能获取更全面的信息,包括uid、gid及所有组,如id username;3. 主组决定文件创建时的默认组,附加组用于扩展权限;4. 组变更后需重新登录或新开会话才能生效,因组信息在登录时缓存;5. 可通过usermod、gpasswd等命令管理用户和组,如usermod -ag添加用户到附加组,newgrp可临时启用新组权限。这些方法共同实现对用户权限结构的完整管理。

在Linux或Unix-like系统里,想知道一个用户到底归属于哪些群组,

groups
id
命令是你的左右手。它们能迅速揭示用户在系统中的权限结构,这在权限管理和故障排查时特别有用。

解决方案

要查看用户所属的组,最直接且常用的就是

groups
id
这两个命令。

groups
命令用起来非常直观。如果你想查看当前登录用户所属的组,直接在终端输入:

groups

它会列出当前用户所加入的所有组名。比如,你可能会看到

youruser adm cdrom sudo dip plugdev lpadmin sambashare
这样的输出。

如果你需要查看特定用户的组信息,只需在

groups
后面加上用户名:

groups username

例如,要看

testuser
的组,就输入
groups testuser

id
命令则提供了更详细的信息,我个人更偏爱它,因为它给的信息更全面,不仅仅是组,还有用户ID(UID)和主组ID(GID),这在很多时候能提供更细致的上下文。

不带任何参数执行

id
,同样是查看当前用户:

id

输出通常是这样的格式:

uid=1000(youruser) gid=1000(youruser) groups=1000(youruser),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),119(lpadmin),128(sambashare)
。这里清楚地显示了UID、主GID,以及所有附加组的ID和名称。

要查看特定用户的

id
信息,也只需跟上用户名:

id username

比如,

id testuser
id
命令还有一些有用的选项,例如
id -un
可以只显示用户名,
id -gn
只显示主组名,
id -gn
则只显示所有组名(和
groups
命令类似,但
id -gn
的输出通常更简洁,只列出名称)。

用户的主组和附加组有什么区别?

这块内容,我发现不少初学者会混淆,觉得只要在一个组里就行。但主组和附加组的差异,其实挺关键的。

每个用户在创建时都会被分配一个“主组”(Primary Group)。这个主组的ID就是

id
命令输出中
gid
后面跟着的那个。通常情况下,用户的主组会和用户名同名,比如用户
john
的主组就是
john
。当用户创建文件或目录时,如果没有特别指定,这些新创建的对象的默认所属组就是用户的主组。这意味着,主组在文件权限管理上扮演着一个默认的、基础性的角色。

而“附加组”(Supplementary Groups)则是用户除了主组之外,额外加入的其他组。一个用户可以同时属于多个附加组。这些附加组赋予用户访问特定资源或执行特定操作的权限。例如,用户加入

sudo
组就能使用
sudo
命令以root权限执行操作;加入
docker
组就可以无需
sudo
直接管理Docker容器。附加组的存在,主要是为了实现更灵活、更细粒度的权限控制,让用户能够根据工作需要获得不同的权限集合,而无需更改其主组。

简而言之,主组是用户身份的一部分,影响默认的文件创建行为;附加组则是用户额外获得的权限集合。

为什么有时groups命令的输出看起来不完整?

我遇到过不止一次这样的情况,明明把用户加到新组了,

groups
一查,还是老样子。当时就纳闷了,后来才意识到是会话的问题。

当你通过

usermod -aG newgroup username
这样的命令把一个用户加入到新的组之后,这个更改是即时生效在系统层面的。然而,用户当前正在运行的shell会话(或者说,当前的登录会话)并不会立即感知到这个变化。这是因为,当用户登录时,shell会读取用户的组信息并将其缓存起来。除非用户重新登录,或者启动一个新的shell会话,否则这个缓存的组信息不会更新。

所以,如果你刚刚把用户

testuser
加到了
newgroup
组,然后立即在
testuser
当前登录的终端里执行
groups
,你可能看不到
newgroup
。正确的做法是让
testuser
退出当前会话(比如注销再登录),或者简单地打开一个新的终端窗口(如果你的系统是图形界面),在新会话中执行
groups
id
,就能看到更新后的组信息了。

如果不想重新登录,但又想在当前会话中临时使用新组的权限,可以尝试使用

newgrp
命令。例如,
newgrp newgroup
。这会创建一个新的shell,其主组被临时设置为
newgroup
,并且你也会拥有
newgroup
的权限。但这种方式只是针对当前
newgrp
创建的子shell有效,并非全局性的会话更新。

除了groups和id,还有哪些方式可以管理用户和组?

当然,光看是不够的,很多时候我们还需要修改用户或组的属性。说起来,这些命令其实都是在操作系统底层那些配置文件,比如

/etc/passwd
/etc/group
之类的。

要管理用户和组,我们主要会用到以下一些命令:

  • usermod
    : 这是修改用户属性的瑞士军刀。你可以用它来将用户添加到新的附加组(
    usermod -aG newgroup username
    ),从组中移除用户(
    gpasswd -d username groupname
    ,或者更直接地,通过
    usermod -G
    重新指定所有附加组),甚至更改用户的主组(
    usermod -g new_primary_group username
    )。
  • useradd
    : 用于创建新用户。在创建时,你就可以指定用户的主组和附加组,例如
    useradd -g primary_group -G supplementary_group1,supplementary_group2 username
  • userdel
    : 删除用户。
  • groupadd
    : 创建新的组。比如
    groupadd new_team
  • groupdel
    : 删除组。注意,如果组里还有用户,通常不能直接删除,需要先将用户从组中移除。
  • gpasswd
    : 这个命令主要用于管理组的密码以及组成员。除了上面提到的
    gpasswd -d
    来删除组成员,你也可以用
    gpasswd -a username groupname
    来添加用户到组。相比
    usermod -aG
    gpasswd -a
    在某些场景下可能更便捷,因为它直接操作组本身。

这些命令共同构成了Linux/Unix系统用户和组管理的核心工具集,熟练掌握它们对于系统管理员来说是基本功。


# linux  # docker  # 操作系统  # 工具  # 区别  # 为什么  # 对象  # unix  # 只显示  # 如果你  # 到新  # 就能  # 则是  # 可以用  # 只需  # 这在  # 群组  # 移除 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建高效服务器建站系统?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  怎么用AI帮你设计一套个性化的手机App图标?  如何在IIS中新建站点并配置端口与IP地址?  Laravel如何使用Blade组件和插槽?(Component代码示例)  如何构建满足综合性能需求的优质建站方案?  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  如何正确选择百度移动适配建站域名?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  JavaScript如何操作视频_媒体API怎么控制播放  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  如何在建站之星网店版论坛获取技术支持?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何在阿里云完成域名注册与建站?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel如何实现本地化和多语言支持?(i18n教程)  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Android中AutoCompleteTextView自动提示  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel怎么实现模型属性的自动加密  如何在自有机房高效搭建专业网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何升级到最新版本?(升级指南和步骤)  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  在线教育网站制作平台,山西立德教育官网?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel如何处理文件下载请求?(Response示例)  黑客如何利用漏洞与弱口令入侵网站服务器?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Linux系统运维自动化项目教程_Ansible批量管理实战  网站建设要注意的标准 促进网站用户好感度!  实例解析Array和String方法  怎样使用JSON进行数据交换_它有什么限制