Jaki jest identyfikator grupy dla tej nazwy grupy?

27

Jak uzyskać identyfikator GID grupy, podając nazwę grupy.

Dane wyjściowe będą na przykład:

Group adm with GID=4
Maythux
źródło

Odpowiedzi:

41

Użyj getentpolecenia dla grup i przetwarzania informacji o użytkowniku, zamiast ręcznie czytania /etc/passwd, /etc/groupsitd. Sam system używa /etc/nsswitch.confsię zdecydować gdzie robi swoje informacje od i ustawienia w plikach może być zastąpiona przez inne źródła. getentprzestrzega tej konfiguracji. getentdrukuje dane, bez względu na źródło, w tym samym formacie co pliki, dzięki czemu można następnie przeanalizować dane wyjściowe w taki sam sposób, jak /etc/passwd:

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

Pamiętaj, że dla nazwy użytkownika jest to o wiele łatwiejsze. Użyj id:

$ id -u lightdm
105
muru
źródło
Ok, awkjest krótszy niż perl=)
AB,
20

Można to po prostu zrobić za pomocą cut:

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

getent group sudootrzyma wiersz dotyczący sudogrupy z /etc/grouppliku:

$ getent group sudo
sudo:x:27:foobar

Następnie możemy wziąć trzecie pole ograniczone przez :.

Jeśli chcesz odpowiednio ciąg wyjściowy, użyj podstawienia polecenia w ciągu echo:

$ echo "Group sudo with GID="$(cut -d: -f3 < <(getent group sudo))""
Group sudo with GID=27
heemayl
źródło
% echo "Group cdrom with GID="$(cut -d: -f3 < <(getent group sudo))"" Group cdrom with GID=27, proszę trochę bardziej ogólny =)
AB
1
Dlaczego proces zastępowania? Co jest nie tak z GID="$(getent group cdrom | cut -d: -f3)"?
Kos
@kos Nie lubię uruchamiać rzeczy w podpowłokach, chyba że jest to konieczne .....
heemayl
@AB Edytowane ...
heemayl
Ale to POSIX ...: '(Nie, tylko żartuję, naprawdę nie znałem różnicy. +1
Kos
1

zawsze doceniane są bardziej skomplikowane odpowiedzi - tak wiele uczę się z ich czytania całkiem uczciwie.

Przyszedłem na tę stronę, ponieważ szukałem identyfikatora grupy mojej grupy pocztowej i nie wiedziałem, gdzie te informacje są przechowywane.

twoje odpowiedzi są świetne - oto prosta, którą wymyśliłem

def @ fourof4: / home $ cat / etc / group | grep mail

mail: x: 8:

Wiem, że nie rozwiązuje to problemu, ale spełniło moje zadanie.

Blockquote Wypróbuj: awk -F: '/ sudo / {print "Group" 1 $ with GID = "$ 3}' / etc / group - AB 23 czerwca 2015 o 15:51 Blockquote

widzę to również wspomniane poza tym, które zacytowałem ... wszyscy dostają moją miłość - przepraszam, jeśli tęskniłem

to doprowadziło mnie do tego pliku.
Dzięki i kontynuuj karmienie mnie doskonałym w dowolnej formie! def

def
źródło
0

Korzystanie z perljednej linijki:

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

lub krótszy (i lepszy)

% perl -F/:/ -ane 'printf "Group %s with GID=%s\n",$F[0],$F[2]' <<< $(getent group sudo)
Group sudo with GID=27
AB
źródło
2
Myślę, że Perl może zrobić dla ciebie podział, myślę, że opcja -Flub to -lrobi.
muru
0

Hack dla potrzebujących: (wciąż może jest o wiele lepsza odpowiedź)

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

Prostsza wersja (dzięki @AB):

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

Przykład:

$ awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep sudo 
Group sudo with GID=27
Maythux
źródło
1
Spróbuj tego:awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
AB
Zobacz UUOC
kos