使用 bash 文件将组成员打印到文件中

使用 bash 文件将组成员打印到文件中

所以我要坦白地说,这是家庭作业,但我准备在我的电脑上打个洞。我在网上查了一下,要么是我问了错误的问题,要么是其他什么问题。

基本上,我正在编写一个 bash 脚本来创建一个文件,然后我需要获取一个组并将它们打印到该文件中,并且需要逐行打印。

我可以通过使用触摸轻松创建文件

touch /dir/output.txt

我相信代码会是这样的

for each group member in group length
printf "name,password,group" >> /dir/output.txt

所以我的问题是,如何将组的成员打印到该文件?

问候,

精神枯竭的学生。

答案1

要列出组的成员,您需要在groupNSS 数据库中查询该组的名称以获取 gid 和成员。

您还需要查询passwd(用户)数据库来检查具有相应 gid 的用户。可以与:

group_name=somegroup
awk -F: '
  !groups_processed {
    gid[$3] # record gid in gid hash
    split($4, members, ",") # extract members
    for (i in members) users[members[i]] # unique members listed as
                                         # keys of users hash
    next
  }
  $4 in gid {
    users[$1] # also record users with corresponding gid
  }
  END {
    for (i in users) print i
  }' <(getent -- group "$group_name") \
     groups_processed=1 \
     <(getent passwd) | sort

通常,数据库中的每个组名称只有一个条目,但在具有多个数据库(如文件和 ldap)的系统上,有时可以找到更多条目。在这里,我们记录了所有的 gids,这可能是也可能不是最好的做法。另请注意,不同的组可以具有相同的 gid,这里我们不包括列为具有相同 gid 的不同组成员的用户。


1 在 GNU 系统上,我发现getent group单独列出了所有这些,但getent group thegroupname只返回其中一个

相关内容