Próbowałem google, ale nigdzie się nie dostałem. Jak mogę wyświetlić listę wszystkich członków grupy wywoływanych mygroup
z wiersza poleceń w OS X?
$ dostarczy dscl . list /groups
mi wszystkie grupy ... ale jak mogę zobaczyć członków każdej grupy?
macos
command-line
user-accounts
Meltemi
źródło
źródło
dscacheutil -q group -a name admin
dał mi tylko 1 wynik, podczas gdy skrypt powłoki odpowiedzi zaakceptowanej dał mi 2 wyniki.Nie ma standardowego polecenia, które wyświetla listę wszystkich członków grupy w OS X, więc oto funkcja powłoki, która to robi:
Skopiuj powyższy wiersz polecenia do terminala, a następnie wpisz (gdzie mygroup to nazwa istniejącej grupy).
members mygroup
Niektóre wyjaśnienia dla zainteresowanych:
Istnieje pięć różnych sposobów (o których wiem), że użytkownik może być członkiem grupy w OS X. Polecenie to nie gwarantuje wypisania wszystkich, a nawet któregokolwiek z członków mojej grupy, ponieważ członkostwo również pochodzi od użytkowników „ identyfikator grupy podstawowej , członkostwo według UUID użytkownika , dziedziczenie członkostwa z jednej grupy do drugiej oraz członkostwa obliczane przez system, takie jak grupa wszyscy .
dscl . -read /Groups/mygroup GroupMembership
Zamiast więc śledzić to wszystko, lepszym pomysłem wydaje się po prostu sprawdzenie członkostwa każdego użytkownika w systemie (za pomocą dsmemberutil ), i to właśnie robią funkcja powłoki i poniższy skrypt.
Ten skrypt członków jest równoważny funkcji powłoki, ale ma lepszą obsługę nieprawidłowych danych wejściowych:
Informacje dodatkowe:
Pięć sposobów bycia członkiem grupy to:
Można je zbadać za pomocą poleceń takich jak
dscl . -read /Groups/somegroup
Przykład 4 : członkostwo w grupie operatorów drukowania __lpoperator_ jest dziedziczone przez członków grupy Administrator wydruku __lpadmin_, a członkostwo w tej grupie jest dziedziczone przez członków grupy administracyjnej .
Przykład 5 :
ZOBACZ TAKŻE
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)
źródło
Uwaga: To była moja pierwsza odpowiedź, napisana zanim zdałem sobie sprawę, że ta odpowiedź wciąż daje niepełny wynik . (Na przykład, to nie znajdzie członków everyone grupy!) Więc napisałem lepszą odpowiedź, która zawiera skrypt, który zawiera listę wszystkich członków grupy w OS X .
Właściwość GroupMembership mygroup można wydrukować za pomocą dscl w następujący sposób:
Ale nie ma gwarancji, że wygeneruje wszystkie (lub nawet) członków grupy. Brakuje użytkowników, którzy są członkami grupy tylko wtedy, gdy są jej głównym identyfikatorem grupy .
Typowym przykładem tego w systemie OS X są zwykłe konta logowania, które mają personel (grupa 20) jako podstawową grupę, ale nie są wymienione we właściwości GroupMembership grupy pracowników .
Tych użytkowników można znaleźć, wyszukując numeryczny identyfikator grupy podstawowej (gid), jak w tym przykładzie dla grupy pracowników (gid 20):
a numeryczny gid (PrimaryGroupID) mojej grupy znajduje się przez:
źródło
Aby uzyskać wszystkie grupy, w których znajduje się użytkownik , możesz użyć następujących opcji:
Przykładowe dane wyjściowe:
Korzystając z powyższego polecenia, można uzyskać wszystkich użytkowników należących do grupy :
OSX :
Unix :
źródło
UWAŻAJ: powyższe polecenie nie zawsze wyświetla pełną listę WSZYSTKICH członków grupy. Np. Dla „personelu” grupy otrzymujesz „root” jako członek grupy, który jest niekompletny. Aby to sprawdzić, użyj jednego z następujących poleceń jako domyślny użytkownik (NIE „root”):
id -Gn
LUBgroups
W rezultacie zobaczysz wszystkie grupy, do których należy domyślnie zalogowany użytkownik. Jednym z nich powinien być „personel”. Zatem oprócz „root” jest więcej członków grupy „staff”, którzy nie są wymienieni w poleceniu
dscl . -read /Groups/[groupname] | grep GroupMembership
. To samo dotyczy polecenia,dscacheutil -q group -a name staff
które sugeruje również, że tylko „root” jest członkiem grupy „staff”, co jest oczywiście niekompletne.Jedyną niezawodną metodą uzyskania naprawdę WSZYSTKICH członków grupy w terminalu na OSX jest już tutaj Arne Stenström. To używa jego funkcji powłoki lub. jego skrypt powłoki. Oba działa świetnie!
źródło
Komenda
Podobnie do odpowiedzi @ duperuser, następujący wydrukuje tylko użytkowników grupy
admin
ze spacjami między nimi:Wynik
Uruchomienie powyższego polecenia spowoduje wygenerowanie czegoś takiego:
Awaria
dscacheutil
Polecenie służy do kwerendy informacji o różnych kategoriach systemu usługi katalogowej pamięci podręcznej. Ta-q
opcja pozwala określić kategorię, którą chcesz zapytać. Dostępne kategorie to grupa, host, podłączenie, protokół, rpc, usługa i użytkownik. Następnie przeszukujemy tę kategorię, podając parę klucz-wartość z-a
opcją. W tym przypadku chcemy wymienić grupę mającą kluczname
równy wartościadmin
. Powyższedscacheutil
polecenie generuje dane wyjściowe w następujący sposób:Następnie potokujemy ten tekst
grep
i wybieramy wiersz zawierający ciągusers:
na początku. Ta-e
opcja powoduje, że grep rozpoznaje wyrażenia regularne .^
Charakter określa, że chcemyusers:
być na początku wiersza.To nam daje
Na koniec przekazujemy to do sed i zastępujemy tekst
users:
pustym ciągiem. W sed pierwsza literas
oznacza zamiennik. Tekst między pierwszą parą ukośników (/users: /
) jest tym, co chcemy zastąpić, a następna para ukośników (//
) jest tym, co chcemy zastąpić (w tym przypadku nic).źródło
Oto implementacja tego problemu, która pochodzi z implementacji w powiązanej dyskusji . Procedura jest dość ogólna, z hakiem wyszukiwania usługi katalogowej dla dowolnej konkretnej platformy / architektury, więc można jej używać bez modyfikacji w sieci heterogenicznej. Zainstalowaliśmy symboliczne łącze do tego narzędzia o nazwie
zed
. Inne źródła tej implementacji są wymienione w sekcji dotyczącej atrybucji skryptu. To narzędzie jest przeznaczone do uruchamiania na przynajmniej OSX, HP-UX, Linux i SunOS, ale nie byłoprzetestowany na SunOS i HP-UX. Skrypt został przetestowany w miarę możliwości na Ubuntu Linux 12.04 i Mavericks OSX 10.9.1. Dane wyjściowe tego skryptu są zgodne z danymi wyjściowymi pierwszej implementacji skryptu powłoki dla tego problemu i dlatego są uważane za poprawne.źródło