列出用户所属的所有群组的5种方法
在研究5种方法之前,让我们首先了解一些基本知识:
将用户添加到现有组是Linux管理员的典型任务之一。
群组是用户的集合。群组的主要目的是为群组中的成员定义一组特权。
如果要为一组没有组的多个用户分配一组特权,这可能是一项艰巨的任务。这是该小组派上用场的地方。
/ etc / passwd文件中列出了所有系统用户,/ etc / group文件中列出了组,而实际密码存储在/ etc / shadow文件中。
无论我们使用什么命令,它都会从这些文件中获取信息。
Linux中有两种类型的组:
初级组
中学组
什么是小学组?
主要组是与用户帐户关联的主要组。每个用户必须是单个主要组的成员。
什么是中学组?
次要或补充组用于向用户授予其他权限。每个用户都可以成为多个辅助组的成员。
什么是/ etc / passwd文件
“ / etc / passwd”是一个文本文件,其中包含登录Linux系统所需的每个用户信息。它维护有关用户的有用信息,例如用户名,密码,用户ID,组ID,用户信息,主目录和Shell。
密码文件中的每个用户配置文件都是一行,其中包含七个字段,如下所示:
$ grep "daygeek" /etc/passwd daygeek:x:1000:1000:daygeek,,,:/home/daygeek:/bin/bash
什么是/ etc / group文件
“ / etc / group”是一个文本文件,用于定义用户所属的组。我们可以在同一组中添加多个用户。
Linux具有三个权限级别,这些权限级别定义了用户如何访问它。这些级别是 user,group和others,它们控制一个用户对其他用户的文件和文件夹的访问。
/ etc / group文件维护有关组的有用信息,例如组名,组密码,组ID(GIT)和成员资格列表。每个组的详细信息在一行中显示为四个字段,如下面列出的“方法5”所示。
以下七个命令将帮助您找出Linux中用户所属的组。
groups:显示组中的所有成员。
id:打印指定用户名的用户和组信息。
lid or libuser-lid:它显示用户的组或组的用户。
getent:从名称服务交换库中获取条目。
compgen:compgen是bash内置命令,它将为用户显示所有可用命令。
members:列出组的成员。
/etc/group file 同样,我们可以从/ etc / group文件中grep相应的用户组。
现在,让我们深入研究5种方法,这些方法可用于查找用户在Linux中所属的组的列表:
方法1:使用组命令
Linux管理员广泛使用’groups’命令列出用户所属的所有组。它将打印给定用户的主要和补充组的信息,如下所示:
$ groups daygeek daygeek : daygeek adm cdrom sudo dip plugdev lpadmin sambashare
运行不带任何参数的“ groups”命令以显示与当前用户关联的组列表,如下所示:
$ groups daygeek adm cdrom sudo dip plugdev lpadmin sambashare
方法2:使用id命令
id命令代表身份。它打印出真实有效的用户,组和补充组信息,例如用户名,UID,组名和GUID,如下所示:
$ id daygeek uid=1000(daygeek) gid=1000(daygeek) groups=1000(daygeek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),128(sambashare)
只需运行“ id”命令以查看有关当前用户的组信息,如下所示:
$ id uid=1000(daygeek) gid=1000(daygeek) groups=1000(daygeek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),128(sambashare)
方法3:使用lid命令
lid或libuser-lid命令显示有关包含用户名的组的信息,这需要sudo特权。
$ sudo libuser-lid daygeek adm(gid=4) cdrom(gid=24) sudo(gid=27) dip(gid=30) plugdev(gid=46) lpadmin(gid=116) daygeek(gid=1000) sambashare(gid=126)
您应该在较新的系统上运行libuser-lid命令而不是lid。
方法4:使用getent命令
getent命令显示名称服务交换机库支持的数据库中的条目,这些数据库在“ /etc/nsswitch.conf”中配置:
$ getent group | grep daygeek adm:x:4:syslog,daygeek cdrom:x:24:daygeek sudo:x:27:daygeek,2gadmin dip:x:30:daygeek plugdev:x:46:daygeek lpadmin:x:116:daygeek daygeek:x:1000: sambashare:x:126:daygeek
上面的命令显示了组名以及与该组关联的所有其他成员。使用以下自定义的命令格式可以仅打印给定用户的组:
$ getent group | grep daygeek | awk -F: '{print $1}' adm cdrom sudo dip plugdev lpadmin daygeek sambashare
运行以下命令,仅打印用户的主要组信息:
$ getent group daygeek daygeek:x:1000:
方法5:使用“ / etc / group”文件
可以使用grep命令从“ / etc / group”文件中过滤用户组信息,如下所示:
$ grep daygeek /etc/group adm:x:4:syslog,daygeek cdrom:x:24:daygeek sudo:x:27:daygeek,2gadmin dip:x:30:daygeek plugdev:x:46:daygeek lpadmin:x:116:daygeek daygeek:x:1000: sambashare:x:126:daygeek
使用以下自定义的命令格式可以仅打印给定用户的组:
$ grep daygeek /etc/group | awk -F: '{print $1}' adm cdrom sudo dip plugdev lpadmin daygeek sambashare
提示1:使用compgen命令找出所有组
Compgen是bash内置命令,显示Linux系统中的所有组:
$ compgen -g root daemon bin sys adm . . daygeek thanu renu sudha admin u1 u2
提示2:使用member命令列出组中的成员
该成员的命令可以让你在Linux中的一组列表成员:
$ members sudo daygeek 2gadmin