如何在 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 命令来更好地呈现从这些命令获得的输出。

更新于:2023 年 5 月 18 日

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告