如何在 Linux 中列出所有组?

linuxoperating systemopen source

Linux 中的组是系统所有用户的集合。这些组为系统用户提供了一种便捷的方式来共享目录,避免出现问题。一个 Linux 系统可以有许多用户,这些用户被划分到多个组中。管理员必须对每个组成员进行优先级排序,以便分配资源相关的权限。用户主要可以属于两种类型的组:

主组/登录组

辅助组/补充组

用户创建的文件会被分配到此组。

主组通常与用户名相同。

授予一组用户特定权限。

用户必须只属于一个主组。

用户可以属于零个或多个辅助组。

然而,许多 Linux 用户对于如何列出可用组感到困惑。在本简短教程中,我们将解释在 Linux 中列出所有组的简单方法。

如何在 Linux 中列出所有组?

您可以使用以下任一命令显示 Linux 中的所有组:

  • /etc/group/file

  • 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(用户主组)和 groups(用户辅助组)相关的信息。如果您只想打印用户的组名,可以使用上述命令的 -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(lpadmin),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"的组的成员。如果存在名为"dip"的组,该命令将输出其成员名称,反之亦然。如果没有输出,则表示不存在名为"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` 命令来更好地展示这些命令的输出结果。


相关文章


有用资源