Недавно я создавал новых пользователей и назначал их определенным группам. Мне было интересно, если есть команда, которая показывает всех пользователей, назначенных для определенной группы? Я пытался использовать команду «groups», однако всякий раз, когда я использую это, он говорит «groups: not found»
68
groups
команда. Вряд ли у вас его нет в Linux, поскольку он является частью coreutils.Ответы:
Вы можете использовать grep:
В этом списке перечислены только дополнительные группы, а не пользователь, у которого эта группа является основной. И он находит только локальные группы, а не группы из сетевой службы, такой как LDAP.
источник
sudo lid -g {group}
меня есть система, в которой в этом ответе перечислены 8 пользователей в группе, а вsudo lid -g {group}
спискеgetent
ответ @Murray Jensen нижеЯ предпочитаю использовать команду getent ...
Таким образом, для группы, вы должны использовать следующее ...
где name_of_group заменяется группой, которую вы хотите найти. Обратите внимание, что это возвращает только дополнительные членства в группах, но не включает пользователей, у которых эта группа является основной.
Есть много других поисков, которые вы можете сделать ...
passwd
будучи еще одним полезным, который вам нужно будет перечислить основные группы.источник
sudo lid -g {group}
меня есть система, где этот ответ перечисляет 8 пользователей в группе, тогда какsudo lid -g {group}
перечисляет 10.Проще сделать
groups [username]
Если вы хотите перечислить всех локальных пользователей и их локальные группы, вы можете сделать
cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
Если вы получаете «groups: command not found», скорее всего, вы изменили свой путь к среде для худшего, чтобы сбросить путь
PATH=$(getconf PATH)
источник
| grep {group}
он добавлен, и дает правильный ответ в отличие отgetent group name_of_group
илиgrep '^group_name_here:' /etc/group
cat /etc/passwd
вы должны использоватьgentent passwd
так, чтобы пользователи в nis / ldap по-прежнему оставались в списке. Единственным недостатком является то, что это может занять довольно много времени.перечисляет всех пользователей в указанной группе.
источник
groupmems
это часть утилит shadow, используемых в большинстве дистрибутивов Linux, однакоgroupmems
в настоящее время она отсутствует в Debian и его производных ( ошибка исправлена, но еще не включена ни в один выпуск (по состоянию на ноябрь 2016 г.))groupmems
только с группами/etc/group
(не входящими в LDAP или другую пользовательскую базу данных) и требует привилегий суперпользователя при попытке открыть / etc / gshadow.cut
И друзей).sudo lid -g {group}
. У меня есть система, где этот ответ перечисляет 8 пользователей в группе, аsudo lid -g {group}
списки 10.Я удивлен, что никто не упомянул
Эта команда выдаст список групп, в которых находится пользователь.
источник
groups
Команда печатает членство в группах для пользователя. Вы можете использоватьlid
команду для вывода списка пользователей в группу, например:источник
lid
является частью libuser, который не устанавливается по умолчанию во многих дистрибутивах.ОП сформулировал вопрос, чтобы исключить возможность использования команды groups . Так как это часть coreutils в Linux, либо (а) он был удален, либо (б) OP неправильно набирает имя.
OP мог бы использовать
groups
так, например:Один предложенный ответ просто grep для названия группы в
/etc/group
. Иногда это работает как задумано.Немного лучшее использование grep учитывает синтаксис
/etc/group
:так что только часть перед первым двоеточием является допустимым именем группы. Простой grep без учета синтаксиса может (и будет) забирать вводящие в заблуждение совпадения из файла. Используйте регулярные выражения, чтобы grep соответствовал именно тому, что нужно:
или используя переменную оболочки:
Однако, это только список тех, кто не входит в группу по умолчанию . Чтобы добавить их , необходимо принять во внимание файл паролей, например, путем извлечения номера идентификатора группы из
/etc/group
и печати пользователей, чья группа по умолчанию соответствует/etc/passwd
, например, изВы можете сделать то же самое, используя только grep и sed, но это больше, чем использование awk.
Другой предложенный ответ, предложенный с использованием
getent
, который также, вероятно, будет на Linux-машине (с Debian он является частью GNU libc). Однако быстрая проверка показывает, что он предоставляет только/etc/group
контент.У меня (как и у большинства) нет
libusers
или неlid
установлено, поэтому я не могу комментировать, удовлетворяет ли он условиям ОП.Также есть
id
программа, которая дает групповую информацию. Кто-то может расширить это как возможный ответ.источник
sed -n "s/^$groupname:.*://p" /etc/group
но это все равно может сообщать о неправильных результатах, если имя группы содержит операторы RE (.
например, нередки имена групп).getent
также будет запрашивать LDAP / NIS ... хотя, возможно, нет, когда перечисление явно отключено для базы данных группы.groups
это не помогло бы, поскольку в нем перечислены группы, членом которых является данный пользователь, а не список членов данной группы.Работает как шарм:
источник
sudo lid -g
списков 8. @Bhavik Принятый ответ также не верен.Некоторые скажут вам установить libuser (для 'lid') или members (для 'members'). Но, основываясь на ответе https://unix.stackexchange.com/a/349648/77959, который решил эту проблему с членством в группе входа в систему, я обнаружил, что другая группа не покрывается этим сценарием. Итак - вот лучшее из обоих подходов в сочетании:
источник
getent
или grep'^group_name_here:' /etc/group
Эта модификация подхода user3717722 будет перечислять членов группы в базе данных NIS:
источник