这个组名的组ID是什么?

May*_*hux 38 command-line groups

如何获取给出组名的组 ID GID。

输出将是例如:

Group adm with GID=4
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 49

使用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}'
Run Code Online (Sandbox Code Playgroud)

请注意,对于用户名,这要容易得多。使用id

$ id -u lightdm
105
Run Code Online (Sandbox Code Playgroud)


hee*_*ayl 32

这可以简单地完成cut

$ cut -d: -f3 < <(getent group sudo)
27
Run Code Online (Sandbox Code Playgroud)

getent group sudosudo将从/etc/group文件中获取有关组的行:

$ getent group sudo
sudo:x:27:foobar
Run Code Online (Sandbox Code Playgroud)

然后我们可以只取由 分隔的第三个字段:

如果您需要相应的输出字符串,请使用以下命令替换echo

$ echo "Group sudo with GID="$(cut -d: -f3 < <(getent group sudo))""
Group sudo with GID=27
Run Code Online (Sandbox Code Playgroud)

  • 为什么要进行流程替换?`GID="$(getent group cdrom | cut -d: -f3)"` 有什么问题? (2认同)
  • 请注意,这是 Bash 特定的。使用以下命令可以获得相同的结果:`getent group root | cut --delimiter ':' --fields 3` (或使用短参数)。看来这种情况并不需要进程替换。 (2认同)

May*_*hux 3

所需的黑客:(仍然可能有更好的答案)

awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep "group-name"
Run Code Online (Sandbox Code Playgroud)

更简单的版本(感谢@AB):

awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group 
Run Code Online (Sandbox Code Playgroud)

例子:

$ awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep sudo 
Group sudo with GID=27
Run Code Online (Sandbox Code Playgroud)