Я пробовал гуглить, но никуда не денешься. Как я могу перечислить всех членов группы, вызванной mygroup
из командной строки в OS X?
$ dscl . list /groups
достанет мне все группы ... но как я могу увидеть участников каждой группы?
macos
command-line
user-accounts
Мельтеми
источник
источник
dscacheutil -q group -a name admin
только дал мне 1 результат, в то время как сценарий оболочки принятого ответа дал мне 2 результата.Там нет стандартной команды, которая перечисляет всех членов группы в OS X, поэтому вот функция оболочки, которая делает это:
Скопируйте приведенную выше командную строку в терминал и введите (где mygroup - это имя существующей группы).
members mygroup
Некоторое объяснение для тех, кто заинтересован:
Существует пять различных способов (о которых я знаю), что пользователь может быть членом группы в OS X. Команда не гарантирует вывод всех или даже любых членов mygroup , поскольку членство также исходит от пользователей. « первичная группа ID , членство пользователя UUID , наследование членства из одной группы в другую, а также членство, которые вычисляются системой, такие как группа всех .
dscl . -read /Groups/mygroup GroupMembership
Поэтому вместо того, чтобы пытаться отслеживать все это, лучше всего просто проверить членство каждого пользователя в системе (используя dsmemberutil ), и именно это делают функция оболочки и приведенный ниже скрипт.
Этот скрипт- член эквивалентен функции оболочки, но имеет лучшую обработку неверного ввода:
Дополнительная информация:
Пять способов быть членом группы:
Это можно изучить с помощью команд, таких как
dscl . -read /Groups/somegroup
Пример 4. Членство в группе операторов печати __lpoperator_ наследуется членами группы администраторов печати __lpadmin_, а членство в этой группе наследуется членами группы администраторов .
Пример 5 :
СМОТРИ ТАКЖЕ
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)
источник
Примечание. Это был мой первоначальный ответ, написанный до того, как я понял, что этот ответ по-прежнему дает неполный результат . (Например, он не находит членов каждой группы!) Так что я написал лучший ответ, который включает в себя сценарий , который содержит список всех член группы в OS X .
Свойство GroupMembership mygroup может быть напечатано с помощью dscl следующим образом:
Но это не гарантирует вывод всех (или даже любых) членов группы. Чего не хватает, так это пользователей, которые являются членами группы, только имея ее в качестве идентификатора своей основной группы .
Типичным примером этого в OS X являются обычные учетные записи, которые имеют сотрудников (группа 20) в качестве своей основной группы, но не перечислены в свойстве GroupMembership группы персонала .
Этих пользователей можно найти, выполнив поиск числового идентификатора первичной группы (gid), как в этом примере для группы персонала (gid 20):
и числовой идентификатор (PrimaryGroupID) mygroup находится:
источник
Чтобы получить все группы, в которые входит пользователь , вы можете использовать следующее:
Пример вывода:
Используя приведенную выше команду, можно получить всех пользователей, принадлежащих к группе :
OSX :
Unix :
источник
ВНИМАНИЕ: Команда выше не всегда отображает полный список ВСЕХ членов группы. Например, для группы "staff" вы получаете только "root" в качестве участника группы, который является неполным. Для проверки используйте одну из следующих команд в качестве пользователя по умолчанию (НЕ «root»):
id -Gn
ИЛИgroups
В результате вы увидите все группы, в которые входит ваш зарегистрированный пользователь по умолчанию. Одним из них должен быть «персонал». Таким образом, помимо «root» есть еще члены группы «staff», которые не перечислены командой
dscl . -read /Groups/[groupname] | grep GroupMembership
. То же самое касается команды,dscacheutil -q group -a name staff
которая также предполагает, что только «root» является членом группы «staff», что, очевидно, является неполным.Единственный надежный способ получить действительно ВСЕХ членов группы в терминале на OSX уже предоставлен здесь Арне Стенстрём. Это использует его функцию оболочки соответственно его сценарий оболочки. Оба прекрасно работают!
источник
команда
Как и в ответе @ duperuser, следующее будет выводить только пользователей группы
admin
с пробелами между ними:Выход
Выполнение вышеупомянутой команды выдаст что-то вроде этого:
Сломать
Команда
dscacheutil
используется для запроса информации о различных категориях системного кэша службы каталогов.-q
Опция позволяет указать категорию , которую хотите запросить. Доступные категории: группа, хост, монтирование, протокол, RPC, сервис и пользователь. Далее мы запросим эту категорию, указав пару ключ-значение с-a
параметром. В этом случае мы хотим перечислить группу, ключ которойname
равен значениюadmin
. Командаdscacheutil
выше производит вывод как это:Затем мы передаем этот текст по конвейеру
grep
и выбираем строку, содержащую строкуusers:
в начале. В-e
опции делает Grep распознавать регулярные выражения . Символ^
указывает, что мы хотимusers:
быть в начале строки.Это дает нам
Наконец, мы передаем это в sed и заменяем текст
users:
пустой строкой. В седе первая букваs
означает замену. Текст между первой парой слешей (/users: /
) - это то, что мы хотим заменить, а следующая пара слешей (//
) - это то, что мы хотим заменить (в данном случае, ничего).источник
Вот реализация этой проблемы, которая была получена из реализации в связанном обсуждении . Процедура является несколько общей, с ловушкой поиска службы каталогов для любой конкретной платформы / архитектуры, поэтому ее можно использовать без изменений в гетерогенной сети. Мы установили символическую ссылку на эту утилиту с именем
zed
. Другие источники этой реализации упоминаются в разделе атрибуции скрипта. Этот инструмент предназначен для работы по крайней мере на OSX, HP-UX, Linux и SunOS, но не былпротестировано на SunOS и HP-UX. Скрипт был максимально протестирован на Ubuntu Linux 12.04 и Mavericks OSX 10.9.1. Выходные данные этого сценария совпадают с выходными данными для первой реализации сценария оболочки для этой проблемы и поэтому считаются правильными.источник