Odpowiedzi:
Użyj getent
polecenia dla grup i przetwarzania informacji o użytkowniku, zamiast ręcznie czytania /etc/passwd
, /etc/groups
itd. Sam system używa /etc/nsswitch.conf
się zdecydować gdzie robi swoje informacje od i ustawienia w plikach może być zastąpiona przez inne źródła. getent
przestrzega tej konfiguracji. getent
drukuje 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
Można to po prostu zrobić za pomocą cut
:
$ cut -d: -f3 < <(getent group sudo)
27
getent group sudo
otrzyma wiersz dotyczący sudo
grupy z /etc/group
pliku:
$ 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
% echo "Group cdrom with GID="$(cut -d: -f3 < <(getent group sudo))"" Group cdrom with GID=27
, proszę trochę bardziej ogólny =)
GID="$(getent group cdrom | cut -d: -f3)"
?
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
Korzystanie z perl
jednej 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
-F
lub to -l
robi.
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
awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
awk
jest krótszy niżperl
=)