Как получить идентификатор группы GID, указывающий название группы.
Выход был бы, например:
Group adm with GID=4
Используйте команду 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
Это можно сделать просто с помощью 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
Используя 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