Какой идентификатор группы у этого имени группы?


27

Как получить идентификатор группы GID с указанием имени группы.

Вывод будет, например:

Group adm with GID=4

Ответы:


41

Используйте 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}'

Обратите внимание, что для имени пользователя это намного проще. Используйте id:

$ id -u lightdm
105

Хорошо, awkкороче perl=)
AB

20

Это можно просто сделать с помощью cut:

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

getent group sudoполучит строку о sudoгруппе из /etc/groupфайла:

$ getent group sudo
sudo:x:27:foobar

Тогда мы можем просто взять третье поле с разделителями :.

Если вам нужна соответствующая выходная строка, используйте подстановку команд внутри 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пожалуйста, немного более обобщенно =)
AB

1
Почему процесс замены? Что не так с GID="$(getent group cdrom | cut -d: -f3)"?
Кос

@kos Мне не нравится запускать вещи в подоболочках, если это не обязательно .....
Heemayl

@AB Отредактировано ...
Heemayl

Но это POSIX ...: '(Нет, просто шучу, я искренне не знал разницу. +1
Кос

1

всегда ценятся более сложные ответы - я очень многому научился, читая их честно.

Я зашел на эту страницу, потому что искал идентификатор группы своей почтовой группы и не знал, где хранится эта информация.

ваши ответы великолепны - вот простой, который я придумал

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

почта: х: 8:

Я знаю, что это не сортирует ID, но это служило моей цели.

Blockquote Попробуйте это: awk -F: '/ sudo / {print "Группа" $ 1 "с GID =" $ 3}' / etc / group - 23 июня '15 AB в 15:51 Blockquote

я вижу это упомянутое кроме того, что я цитировал .... каждый получает мою любовь - извините, если я скучал по вам

это то, что привело меня к этому файлу.
Спасибо и продолжайте кормить меня отличным в любой форме, которую вы пожелаете! Защита


0

Использование 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

2
Я уверен, что Perl может сделать разбиение для вас, я думаю, что вариант -Fили -lделает это.
Муру

0

Взлом на нужное: (еще может быть, есть гораздо лучший ответ)

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

Более простая версия (благодаря @AB):

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

1
Попробуйте это:awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
AB

Смотрите UUOC
Кос
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.