#1 楼
您可以使用grep:grep '^group_name_here:' /etc/group
这仅列出补充组成员身份,而不列出以该组为主要组的用户。并且它仅查找本地组,而不是来自LDAP等网络服务的组。
评论
不适用于集中式身份验证。
– Maxim Egorushkin
17年11月16日在17:04
这可能真的很混乱,可能是因为主要/次要差异。我认为应该避免使用sudo lid -g {group}。我有一个系统,该答案列出了一组8个用户,而sudo lid -g {group}列出了10个用户。
– DKroot
18年7月25日在15:35
参见下面@Murray Jensen的getent答案
– scrutari
19年8月2日在15:18
#2 楼
我更喜欢使用getent命令...由于getent使用与系统相同的名称服务,因此getent将显示所有信息,包括从LDAP等网络信息源获得的信息。
因此,对于组,应使用以下...
getent group name_of_group
其中name_of_group替换为您所使用的组想抬头。请注意,这仅返回补充组成员身份,不包括以该组为主要组的用户。
您还可以执行很多其他查找...另一个有用的列表,您需要列出主要组。
评论
如果您不是管理员,并且组信息存储在其他服务器中,则其他答案不适用。
–AndrésAlcarraz
18年2月4日在20:37
这可能真的很混乱,可能是因为主要/次要差异。我认为应该避免使用sudo lid -g {group}。我有一个系统,该答案列出了一组8个用户,而sudo lid -g {group}列出了10个用户。
– DKroot
18年7月25日在15:36
#3 楼
容易执行groups [username]
如果要列出所有本地用户及其本地组,可以执行
cat /etc/passwd | awk -F':' '{ print }' | xargs -n1 groups
如果获得“组:找不到命令”,则可能是您编辑了更糟糕的环境路径后,要重置路径,请执行
PATH=$(getconf PATH)
评论
它适用于特定组,如果|添加了grep {group}并给出了正确答案,这与getent组name_of_group或grep'^ group_name_here:'/ etc / group不同
– DKroot
18年7月25日在15:39
您应该使用gentent passwd而不是cat / etc / passwd,这样仍会列出nis / ldap中的用户。唯一的缺点是可能要花费相当长的时间。
–布赖恩·明顿(Brian Minton)
19年5月5日在21:13
#4 楼
groupmems -g groupname -l
列出命名组中的所有用户。
评论
请注意,groupmems是大多数Linux发行版中使用的Shadow utils的一部分,但是Debian和衍生版本目前不存在groupmems(现已修复,但尚未包含在任何发行版中(截至2016年11月))
–StéphaneChazelas
2016年11月6日在22:14
还要注意,groupmems仅处理/ etc / group中的组(而不处理LDAP或其他用户数据库中的组),并且在尝试打开/ etc / gshadow时需要超级用户特权。
–StéphaneChazelas
16年11月6日在22:28
尽管有上述注意事项,但此命令在某些情况下还是理想的,因为它不需要对输出进行额外的解析(即cut和friends)。
– Bonh
17-10-23在14:55
这可能真的很混乱,可能是因为主要/次要差异。我认为应该避免使用sudo lid -g {group}。我有一个系统,这个答案列出了一个组中的8个用户,而sudo lid -g {group}列出了10个用户。
– DKroot
18年7月25日在15:42
#5 楼
groups
命令为用户打印组成员身份。您可以使用lid
命令将用户分组,例如:# lid -g <groupname>
评论
lid是libuser的一部分,在许多发行版中默认未安装。
–克里斯唐(Chris Down)
2015年11月6日在11:57
#6 楼
我很惊讶没有人提及id <user>
此命令将给出用户所在的组的列表。
评论
因为-与标题相反-提问者想知道给定组中的用户,而不是问题中详细说明的给定用户组。我现在改写标题以匹配内容。
–杜布
2015年11月9日,10:10
啊,我明白了。我应该更好地阅读问题文本。谢谢。
– Alex
2015年11月9日在10:11
#7 楼
OP措辞了该问题,以排除使用groups命令的可能性。由于这是Linux上coreutils的一部分,因此(a)已将其删除,或(b)OP弄糊涂了这个名称。OP可以这样使用
groups
,例如: for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print ;}';done
一个建议的答案只是grep在
/etc/group
中的组名。有时会按预期工作。更好地使用grep会考虑到
/etc/group
的语法:在第一个冒号之前是有效的组名。不考虑语法的普通grep可以(并且将)从文件中获取误导性匹配。使用正则表达式使grep完全匹配所需的内容:group_name:password:GID:user_list
,或使用shell变量:
grep -E '^users:' /etc/group |sed -e 's/^.*://'
但是,它仅列出不在默认组中的那些。要添加这些密码,您需要考虑密码文件,例如,从
/etc/group
提取组ID编号,并打印其默认组与/etc/passwd
匹配的用户,例如grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
您可以只使用grep和sed来做同样的事情,但是比使用awk还要多。
使用
getent
提出的另一个建议答案也可能是在Linux机器(与Debian一起,它是GNU libc的一部分)。但是,对此的快速检查显示它仅提供/etc/group
的内容。我(像大多数人一样)没有安装
libusers
或lid
,因此我无法评论它是否满足OP的条件。 还有
id
程序,它提供组信息。可能有人会对此进行扩展。评论
或者只是sed -n“ s / ^ $ groupname:。*:// p” / etc / group,但是如果组名包含RE运算符(例如,在组名中并不罕见),那仍然可能报告错误的结果。
–StéphaneChazelas
16年11月6日在21:54
GNU getent还将查询LDAP / NIS ...尽管在为组数据库显式禁用枚举时可能不会查询。
–StéphaneChazelas
16年11月6日在21:56
请注意,组无济于事,因为它列出了给定用户所属的组,而不是给定组的成员列表。
–StéphaneChazelas
16年11月6日在22:01
#8 楼
像魅力一样工作:cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
评论
与@ARG接受的答案不同,此命令列出以
–巴哈维克
17年7月7日在5:28
这应该是公认的答案
– Nikolay Nenov
17年6月8日在10:58
我不同意。因为它读取/ etc / passwd中的用户,所以这不适用于访问LDAP等的其他nsswitch模块。
–伊凡(IvanVučica)
17-10-25在11:00
对于我而言,这工作不正常:我在一个小组中有4个成员,而sudo lid -g列出了8个。
– DKroot
18年7月25日在15:54
#9 楼
有人会告诉您安装libuser(对于“ lid”)或成员(对于“ members”)。但是基于答案https://unix.stackexchange.com/a/349648/77959(使用登录组成员身份处理了此问题),我发现该脚本未覆盖另一个组。所以-这是两种方法的最佳结合:#!/bin/bash
if [ $# -eq 1 ]; then
list_a=`cut -d: -f1,4 /etc/passwd | grep $(getent group ""| cut -d: -f3) | cut -d: -f1`
list_b=`getent group ""|cut -d: -f4|sed 's/,/\n/g'`
echo -e "$list_a\n$list_b"|grep -v "^$"|sort|uniq
else
echo "pass me a group to find the members of"
fi
评论
与涉及getent或grep'^ group_name_here:'/ etc / group的答案不同,它在我的系统上正常工作
– DKroot
18年7月25日在15:58
#10 楼
对user3717722方法的这种修改将列出NIS数据库中的组成员:ypcat passwd | cut -d: -f1,4 | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
#11 楼
function members {
echo "$(getent group | cut -d: -f1,2,3):$(getent passwd | cut -d: -f1,4 | grep $(getent group | cut -d: -f3) | cut -d: -f1 | paste -sd ','):$(getent group | cut -d: -f4)"
}
列出以“:”分隔的主要和次要成员。
评论
那是组命令。由于Linux是coreutils的一部分,因此不太可能在Linux上没有它。@ThomasDickey但这是可能的-就像在某些NASes上一样。