如果我输入,groups
我会得到一个列表,
$> groups
ecarroll cdrom floppy audio dip video plugdev netdev bluetooth docker
如何查明登录用户是否属于特定组?
答案1
如果您想查找当前进程的真实 gid、有效 gid 或与给定组名称匹配的任何补充 gid 之一,在 GNU 系统上,您可以执行以下操作:
if
gid=$(set -o pipefail; getent -- group "$group" | cut -d: -f3) &&
id -G | grep -qwe "$gid"
then
printf '%s\n' "current process credentials include $group's id ($gid)"
fi
或者与perl
:
perl -se 'if (@g = getgrnam($group)) {
for (split " ", $)) {exit if $_ == $g[2]}
}
exit 1' -- -group="$group"
要检查给定对象是否$user
被列为给定组的成员,或者它们的主要 gid 是否与 的 id 匹配$group
,您可以执行相同的操作,但使用id -G -- "$user"
而不是id -G
,但它可能会说它$user
是 的成员$group
,即使它们不是如果他们碰巧是具有相同 gid 的另一个组的成员,则被列为其成员之一。
请记住,在passwd
和group
数据库中,钥匙是用户/组名称,而不是 id,并且多个用户/组可以具有相同的 id。因此,首先通过将 id 转换为名称并进行比较的方法在一般情况下是错误的(尽管如今,多个用户共享相同的 uid 的情况很少见,甚至多个组共享相同的 gid 的情况就更少了)。
答案2
一种选择是使用
groups | grep -E '(^| )mygroup($| )'