Contents

列出Linux中的所有组

1. 概述

用户和组是Linux安全管理中的两个重要元素。在本快速教程中,我们将了解如何列出当前系统上的所有组。

此外,我们还将解决如何获取特定用户所属的所有组。

2. 读取*/etc/group*文件

*在 Linux 中,所有组都在文件/etc/group*中定义。**此外,它以以下格式存储每个组条目:

group_name:password(encrypted):GID:user_list

首先,让我们看一个*/etc/group*的例子:

$ cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin
adm:x:4:root,daemon
tty:x:5:
disk:x:6:root
lp:x:7:cups,daemon,kent
mem:x:8:
...

/etc/group文件是纯文本文件。因此,我们可以读取该文件并使用我们的 Linux 命令行 fu 来提取我们想要的数据,例如组名:

$ cut -d: -f1 /etc/group
root
bin
daemon
sys
adm
tty
disk
lp
mem
...

在上面的示例中,我们使用 cut 命令仅提取组名。因此,输出包含系统上的所有组名,每行一个组。

3. 使用 getent 命令

/etc/group文件定义本地系统上的所有组。

但是,如果我们在网络系统上工作,系统会从*/etc/group*文件中读取本地组,它也可以从网络服务(例如LDAP)中读取组。

我们可以使用*getent *命令读取 group 数据库以获取所有组:

$ getent group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin
adm:x:4:root,daemon
tty:x:5:
disk:x:6:root
lp:x:7:cups,daemon,kent
mem:x:8:
...

如输出所示,每个组的格式与*/etc/group*文件的格式相同。

如果我们只想获取组名,同样的cut技巧也可以在这里帮助我们:

$ getent group | cut -d: -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
...

4.获取特定用户的组

我们已经学习了如何在系统上定义所有组。有时,在更常见的情况下,我们想知道特定用户属于哪些组。

在本节中,我们将展示两种获取此信息的方法。两者都非常简单。

达到我们目标的第一种方法是使用groups 命令。此命令随shadow-utils 软件包一起提供。因此,它默认在所有 Linux 发行版上可用。

如果我们不给它任何参数,  groups命令将列出当前用户的所有组:

kent$ groups
lp wheel dbus network video audio optical storage input users vboxusers docker kent

但是,如果我们愿意,我们可以将用户名传递给命令,它只会报告给定用户所属的组:

kent$ groups root
root bin daemon sys adm disk wheel log

或者,我们也可以使用id 命令来完成它。

id命令是一个方便的实用程序,用于报告用户信息,例如用户名、真实姓名和组 。

由于 id命令是Coreutils的成员 ,因此默认情况下它已安装在所有 Linux 发行版中。

我们可以组合-G-n选项使id*命令打印给定用户的所有组名*。

groups命令类似,如果我们不告诉 id用户名,它会打印当前用户的组名:

kent$ id -Gn
kent lp wheel dbus network video audio optical storage input users vboxusers docker

但是,当我们将用户名传递给命令时,它自然会输出给定用户的组名:

kent$ id -Gn root
root bin daemon sys adm disk wheel log