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

Как получить идентификатор группы GID, указывающий название группы.

Выход был бы, например:

Group adm with GID=4
1
задан 30 June 2015 в 13:48

3 ответа

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

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

$ id -u lightdm
105
13
ответ дан 23 May 2018 в 19:33

Это можно сделать просто с помощью 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
10
ответ дан 23 May 2018 в 19:33
  • 1
    % echo "Group cdrom with GID="$(cut -d: -f3 < <(getent group sudo))"" Group cdrom with GID=27, пожалуйста, немного более общий =) – A.B. 23 June 2015 в 19:07
  • 2
    Почему процесс замещения? Что случилось с GID="$(getent group cdrom | cut -d: -f3)"? – kos 23 June 2015 в 19:24
  • 3
    @kos Мне не нравится запускать вещи в подоболочки, если это не обязательно ..... – heemayl 23 June 2015 в 20:08
  • 4
    @ A.B. Под редакцией ... – heemayl 23 June 2015 в 20:37
  • 5
    Но это POSIX ...: (Нет, просто шучу, я действительно не знал разницы. +1 – kos 23 June 2015 в 21:05

Используя 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
ответ дан 23 May 2018 в 19:33
  • 1
    Довольно уверен, что perl может сделать расщепление для вас, я думаю, что опция -F или -l делает это. – muru 23 June 2015 в 19:06
  • 2
    @muru сделано и спасибо, снова. – A.B. 23 June 2015 в 19:55

Другие вопросы по тегам:

Похожие вопросы: