47

How to get the group ID GID giving the group name.

The output would be for example:

Group adm with GID=4
Maythux
  • 87,123

4 Answers4

67

Use the getent command for processing groups and user information, instead of manually reading /etc/passwd, /etc/groups etc. The system itself uses /etc/nsswitch.conf to decide where it gets its information from, and settings in the files may be overridden by other sources. getent obeys this configuration. getent prints data, no matter the source, in the same format as the files, so you can then parse the output the same way you would parse /etc/passwd:

getent group sudo | awk -F: '{printf "Group %s with GID=%d\n", $1, $3}'

Note that, for a username, this much more easier. Use id:

$ id -u lightdm
105
muru
  • 207,228
41

This can be simply done with cut:

$ cut -d: -f3 < <(getent group sudo)
27

getent group sudo will get the line regarding sudo group from /etc/group file :

$ getent group sudo
sudo:x:27:foobar

Then we can just take the third field delimited by :.

If you want the output string accordingly, use command substitution within echo:

$ echo "Group sudo with GID="$(cut -d: -f3 < <(getent group sudo))""
Group sudo with GID=27
heemayl
  • 93,925
3

A hack for the needed: (still maybe there is much better answer)

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

Simpler version(Thanks to @A.B):

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

Example:

$ awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep sudo 
Group sudo with GID=27
muru
  • 207,228
Maythux
  • 87,123
0

Using perl one-liner:

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

or shorter (and better)

% perl -F/:/ -ane 'printf "Group %s with GID=%s\n",$F[0],$F[2]' <<< $(getent group sudo)
Group sudo with GID=27
A.B.
  • 92,125