在Linux组中列出所有用户
1. 概述
在 Linux 系统中,用户是我们可以用来登录的帐户。唯一的标识号或 UID 标识每个这样的用户。
本文将讨论列出 Linux 组中所有用户的各种方法。
2. 使用*/etc/passwd*文件
/etc/passwd 文件包含 Linux 系统中用户的所有信息。我们可以通过使用cut 命令对*/etc/passwd*文件进行切片来获取 Linux 系统上当前可用的用户列表:
$ cut -d: -f1 /etc/passwd
daemon
mail
postmaster
ftp
sshd
at
cyrus
ntp
smmsp
svn
显示用户和组信息的直接方法是使用cut命令对/etc/group 文件进行切片:
$ cut -d: -f1,4 /etc/group
root:root
bin:root,bin,daemon
daemon:root,bin,daemon
sys:root,bin,adm
adm:root,adm,daemon
产生的输出由组名和关联的用户组成,用“:”分隔。
显示属于某个组的用户列表的间接方法是从*/etc/group*文件中获取组的 GID(数字组 ID):
$ cut -d: -f1,3 /etc/group | grep daemon
daemon:2
然后,在命令 ’ grep :GID$’ 中使用这个 GID ,我们可以过滤*/etc/passwd*文件内容:
$ cut -d: -f1,3 /etc/passwd | grep :2$
daemon:2
3. 使用getent
我们知道,/etc/group文件定义了 Linux 系统上的组,而*/etc/passwd文件描述了它的用户登录帐户。与包含给定组的用户名的/etc/group文件不同,/etc/passwd*文件只包含相关组的 GID。
但是,使用此 GID(对于用户及其关联的组而言),我们可以从/etc/passwd*文件中检索给定组的用户列表。* 获取属于名为“daemon”的组的用户列表的命令,因为他们的主要组是:
$ cut -d: -f1,4 /etc/passwd | grep ":$(getent group daemon|cut -d: -f3)$" | cut -d: -f1
daemon
这个命令片段的逻辑类似于我们在第 2 节中看到的,包含三个不同的部分。根本区别在于getent的使用。让我们分解命令的每个部分的作用。
第 1 步:使用getent ,我们获取名为*“daemon”*的组的 GID :
$ getent group daemon|cut -d: -f3
2
第 2 步:然后,我们对*/etc/passwd*文件进行切片,以获取由具有各自 GID 的用户组成的列表:
$ cut -d: -f1,4 /etc/passwd
root:0
bin:1
daemon:2
adm:4
lp:7
sync:0
第 3 步:使用grep ,我们使用其 GID(第 1 步)从具有各自 GID 的用户列表(第 2 步)中将用户列入*“daemon”*组的候选名单:
$ cut -d: -f1,4 /etc/passwd | grep ":$(getent group daemon|cut -d: -f3)$"
daemon:2
第 4 步:最后,我们对输出进行切片(第 3 步)以仅显示相应的用户。
我们还可以使用cut和tr将属于我们正在查找的名称的组的用户(在本例中为“daemon”)列为他们的辅助组:
$ getent group daemon | cut -d: -f4 | tr ',' '\n'
root
bin
daemon
** getent如此受欢迎的原因之一是因为它可以在大多数形式的 Linux 中移植,并且可以与本地组/密码文件一起使用。**
4. 使用awk
让我们编写一个简单的awk 脚本,显示属于名为“daemon”的组的用户:
$ awk -F: '/^daemon/ {print $4;}' /etc/group
root,bin,daemon
此命令仅显示*/etc/group*数据库管理的那些用户。它不会打印 LDAP、NIS 或其他地方管理的其他类型的用户。
同样重要的是要注意它仅适用于次要组。它不会显示将该组设置为主要组的用户,因为*/etc/passwd*文件将主要组存储为 GID(数字)。