web-dev-qa-db-ja.com

このグループ名のグループIDは何ですか?

グループ名を示すグループID GIDを取得する方法。

出力は次のようになります。

Group adm with GID=4
21
Maythux

必要なものに対するハック:(まだもっと良い答えがあるかもしれません)

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
0
Maythux

/etc/passwd/etc/groupsなどを手動で読み取る代わりに、グループとユーザー情報を処理するには getent コマンドを使用します。システム自体は /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
32
muru

これはcutで簡単に行えます:

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

getent group Sudoは、/etc/groupファイルからSudoグループに関する行を取得します。

$ getent group Sudo
sudo:x:27:foobar

次に、:で区切られた3番目のフィールドを取得します。

それに応じて出力文字列が必要な場合は、echo内でコマンド置換を使用します。

$ echo "Group Sudo with GID="$(cut -d: -f3 < <(getent group Sudo))""
Group Sudo with GID=27
19
heemayl

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
0
A.B.