如何在 Linux 中列出所有组?
Linux 中的组是系统中所有用户的集合。这些组为系统用户提供了一种便捷且简单的方式来共享目录,而不会出现任何问题。一个 Linux 系统可以拥有许多用户,这些用户被分成多个组。管理员必须对这些组的每个成员进行排名,以分配资源驱动的权限特权。用户主要属于两种类型的组:
主组 / 登录组 |
辅助组 / 附加组 |
---|---|
用户创建的文件分配给此组。主组通常与用户名的名称相同。 |
授予一组用户某些权限。 |
用户只能属于一个主组。 |
用户可以是零个或多个辅助组的成员。 |
然而,许多 Linux 用户对如何列出可用的组感到困惑。在本简短教程中,我们将解释在 Linux 中列出所有组的简单方法。
如何在 Linux 中列出所有组?
您可以使用以下任何命令在 Linux 中显示所有组:
/etc/group/文件
compgen 命令
getent 命令
/etc/group 文件
/etc/group 文件控制组成员身份并在 Linux 系统中定义组。这是一个简单的路径,包含信息和属于每个组的用户列表。如您所知,/etc/group 是一个纯文本文件,因此您可以使用以下任何命令打开此文件并列出所有组:
cat /etc/group less /etc/group more /etc/group
此文件的每一行都提供了一个组的信息。您可以通过以下 cut 命令从该文件中提取所有数据:
cut -d: -f1 /etc/group
在上面的命令中,我们使用 cut 命令仅过滤组名。因此,输出显示所有组的列表。
getent 命令
使用 getent 命令,您可以显示在 /etc/nsswitch.conf 文件中配置的数据库中的条目,包括组数据库。您可以使用这些条目查询所有组的列表。
如果您正在网络系统上工作,则此命令可以从 /etc/group 文件中读取本地组,并从网络服务(如 LDAP)中读取组。因此,您可以使用 getent 命令通过读取组数据库来列出所有组。
getent group
此命令的输出与 /etc/group 文件的内容相同。当使用 LDAP 进行用户身份验证时,getent 会显示 LDAP 数据库和 /etc/group 中的所有组。如果您打印组名的第一个字段,则可以运行以下命令:
getent group | cut -d: -f1 Or getent group | awk -F: '{ print $1}'
compgen 命令
compgen 命令是属于 bash 系列的内置命令。您可以通过以下命令显示所有活动和已注册的组:
compgen -g
这里我们使用了 -g 选项来显示组。现在,让我们讨论在 Linux 中列出所有组的上述所有命令的不同方法。
列出用户的组
您可以通过两种方式找出组的成员,即 groups 命令和 id 命令。
将用户名与“groups”命令一起传递,您希望找出该用户的组。
:~$ groups prateek prateek : prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare
当您在没有用户输入的情况下运行“groups”命令时,它会打印当前用户的组。
:~$ groups prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare
“id”命令详细说明了指定用户及其组。例如,我们将使用以下 id 命令打印用户“prateek”的所有组:
:~$ id prateek uid=1000(prateek) gid=1000(prateek) groups=1008(prateek),4(adm),24(cdrom),27(sudo), 30(dip),46(plugdev) 122(1padmin),134(lxd),135(sambashare)
上面的命令为您提供了与用户 UID(用户 ID)、GID(用户的初级组)和组(用户的辅助组)相关的信息。如果您只想打印用户的组名,则可以使用 -Gn 选项与上述命令一起过滤它。
:~$ id -Gn prateek prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare
与“groups”命令一样,如果您没有使用任何用户名传递 id 命令,它会提供当前用户的详细信息。
:~$ id -Gn prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare :~$ id uid=1000(prateek) gid=1000(prateek) groups=1008(prateek),4(adm),24(cdrom),27(sudo), 30(dip),46(plugdev) 122(1padmin),134(lxd),135(sambashare)
所有 Linux 组的计数
您可以使用以下任何命令找出 Linux 组的总数:
:~$ cat /etc/group | grep -c "" 76 :~$ getent group | grep -c "" 76 :~$ getent group | wc -l 76
按字母顺序排序所有 Linux 组名
您可以将 getent 或 /etc/group 文件命令与 sort 命令一起使用,以按字母顺序对组名进行排序:
getent group | cut -d: -f1 | sort cat /etc/group | cut -d: -f1 | sort
列出组的所有成员
这样,我们可以使用 getent 命令列出所有组用户:
getent group <group_name>
例如,这里我们将找出名为“dip”的组的成员。如果存在此名称的组,则该命令将打印其名称作为输出,反之亦然。如果您收到,则表示没有输出,意味着不存在此名称的组:
getent group dip
:~$ getent group dip dip:x:30:prateek
同样,您可以找出其他组的成员。
结论
Linux 中的不同文件都有其组和用户。有时用户必须知道他们属于哪个组。在 Linux 中,您可以借助一些命令获取有关用户、组名和活动用户的完整信息。在这里,我们解释了一些在 Linux 中列出所有组的示例。
您可以将所有上述命令用于任何 Linux 发行版,包括 Linux Mint、CentOS、Debian 和 RHEL。如您在上面所见,我们主要使用 /etc/group 文件和 getent 命令来获取 Linux 的所有组详细信息。我们还使用 cut、count 和 sort 命令来更好地呈现从这些命令获得的输出。