关于gid 与groups 的区别

1 使用groups 查看当前用户所属组;

[chenxi@centos_test ~]$ groups

chenxi baby

表示用户chenxi 属于chenxi, baby组,其中chenxi为默认组;

2 使用命令id 查看当前所属组:

[chenxi@centos_test ~]$ id

uid=1004(chenxi) gid=1004(chenxi) groups=1004(chenxi),1002(baby)

表示当前工作组是chenxi, 其中chenxi 既是chenxi组, 又是baby组;


3 使用newgrp baby 切换当前工作组为baby;

[chenxi@centos_test ~]$ newgrp baby

[chenxi@centos_test ~]$ id

uid=1004(chenxi) gid=1002(baby) groups=1002(baby),1004(chenxi)

[chenxi@centos_test ~]$

    当前的用户组(groups)变为baby


4 gid 只是当前工作主工作组的展示, 而groups 包含了用户所在的所有组。

uid=1004(chenxi) gid=1002(baby) groups=1002(baby),1004(chenxi)

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
getgroups函数是一个POSIX标准定义的函数,用于获取当前进程所属的附加组(supplementary group)列表。 函数原型如下: ```c #include <unistd.h> int getgroups(int size, gid_t grouplist[]); ``` 函数参数解释: - `size`:用于指定传入和传出的附加组列表的大小。通常可以将其设置为当前附加组的数量加1,以确保足够的空间。 - `grouplist`:一个数组,用于存储获取到的附加组ID。 函数返回值: - 若成功,返回获取到的附加组的数量(不包括主要组)。 - 若失败,返回-1,并设置errno表示错误原因。 以下是一个示例代码,演示了如何使用getgroups函数获取当前进程的附加组列表: ```c #include <stdio.h> #include <unistd.h> #define MAX_GROUPS 16 int main() { gid_t grouplist[MAX_GROUPS]; int num_groups, i; num_groups = getgroups(MAX_GROUPS, grouplist); if (num_groups == -1) { perror("getgroups"); return 1; } printf("Number of supplementary groups: %d\n", num_groups); printf("Supplementary group IDs: "); for (i = 0; i < num_groups; i++) { printf("%d ", grouplist[i]); } printf("\n"); return 0; } ``` 在上述示例中,我们首先定义了一个大小为`MAX_GROUPS`的数组来存储附加组的ID。然后,调用`getgroups`函数来获取当前进程的附加组列表,并将结果存储在数组中。最后,我们打印出附加组的数量和ID。 请注意,为了正常使用`getgroups`函数,需要在编译时链接libcap库,使用以下命令编译代码: ``` gcc example.c -o example -lcap ``` 此外,需要注意的是,附加组列表是针对进程而言的,每个进程都有自己的附加组列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值