如何在 Linux 中列出所有组?
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` 命令来更好地展示这些命令的输出结果。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

