这个群组名称的群组ID是什么?

如何通过群组名称获取群组ID(GID)。
输出示例为:
Group adm with GID=4
4个回答

使用getent命令来处理组和用户信息,而不是手动读取/etc/passwd/etc/groups等文件。系统本身使用/etc/nsswitch.conf来决定从哪里获取信息,并且文件中的设置可能会被其他来源覆盖。 getent遵循这个配置。 getent以与文件相同的格式打印数据,因此您可以像解析/etc/passwd一样解析输出。
getent group sudo | awk -F: '{printf "Group %s with GID=%d\n", $1, $3}'

请注意,对于用户名来说,这更加容易。使用id
$ id -u lightdm
105

еҘҪзҡ„пјҢawkжҜ”perlзҹӯдёҖдәӣ =) - A.B.

这可以简单地用cut命令完成:
$ cut -d: -f3 < <(getent group sudo)
27

使用命令 getent group sudo 可以从文件 /etc/group 中获取关于 sudo 组的行:
$ getent group sudo
sudo:x:27:foobar

然后我们可以只取由冒号:分隔的第三个字段。
如果你想要相应的输出字符串,可以在echo中使用命令替换。
$ echo "Group sudo with GID="$(cut -d: -f3 < <(getent group sudo))""
Group sudo with GID=27

3为什么要使用进程替换?GID="$(getent group cdrom | cut -d: -f3)" 有什么问题吗? - kos
@kos 除非必须,我不喜欢在子shell中运行事务..... - heemayl
2请注意,这是特定于Bash的。可以使用相同的结果来实现:getent group root | cut --delimiter ':' --fields 3(或者使用短参数)。似乎这种情况并不真正需要进程替换。 - Zelphir Kaltstahl

一个对所需的技巧:(可能还有更好的答案)
awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep "group-name"

简化版本(感谢@A.B):
awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group 

例子:

$ awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep sudo 
Group sudo with GID=27

1试试这个:awk -F\: '/sudo/ {print "组 " $1 " 的GID=" $3}' /etc/group - A.B.
请参考UUOC - kos

使用perl一行命令:
% perl -ne '@elements=(split /:/); printf "Group %s with GID=%s\n",$elements[0],$elements[2]' <<< $(getent group sudo)
Group sudo with GID=27

或者更短(而且更好)
% perl -F/:/ -ane 'printf "Group %s with GID=%s\n",$F[0],$F[2]' <<< $(getent group sudo)
Group sudo with GID=27

2我很确定Perl可以帮你进行拆分,我认为-F-l选项可以实现这个功能。 - muru