如何列出Linux中的所有组?
Linux 中的组是系统中所有用户的集合。这些组为系统用户提供了一种方便、简单的方式来毫无问题地共享目录。 Linux 系统可以有许多用户,这些用户被分为多个组。管理员必须对这些组的每个成员进行排名,以分配资源驱动的权限。用户主要属于两种类型的组 -
User-created files are assigned to this group. The primary group usually has the same name as a user's name.
向一组用户授予某些权限。
Users must belong to only one primary group.
用户可以是零个或多个辅助组的成员。
然而,许多 Linux 用户对如何列出可用组感到困惑。在这个简短的教程中,我们将解释列出 Linux 中所有组的简单方法。
如何列出Linux中的所有组?
您可以使用以下任何命令显示 Linux 中的所有组 -
/etc/组/文件
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(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
dip:x:30:prateek
同样,您可以找出其他组的成员。
结论
Linux 中的不同文件有其组和用户。有时,用户知道他们属于哪个组变得很重要。在Linux中,您可以借助一些命令获取有关用户、组名和活动用户的完整信息。这里我们解释了一些列出 Linux 中所有组的示例。
您可以将上述所有命令用于任何 Linux 发行版,包括 Linux Mint、CentOS、Debian 和 RHEL。正如你在上面看到的,我们主要使用 /etc/group 文件和 getent 命令来获取 Linux 的所有组详细信息。我们还使用 cut、count 和 sort 命令来更好地呈现从这些命令获得的输出。