所以我要坦白地说,这是家庭作业,但我准备在我的电脑上打个洞。我在网上查了一下,要么是我问了错误的问题,要么是其他什么问题。
基本上,我正在编写一个 bash 脚本来创建一个文件,然后我需要获取一个组并将它们打印到该文件中,并且需要逐行打印。
我可以通过使用触摸轻松创建文件
touch /dir/output.txt
我相信代码会是这样的
for each group member in group length
printf "name,password,group" >> /dir/output.txt
所以我的问题是,如何将组的成员打印到该文件?
问候,
精神枯竭的学生。
答案1
要列出组的成员,您需要在group
NSS 数据库中查询该组的名称以获取 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
只返回其中一个