Ostatnio tworzyłem nowych użytkowników i przypisywałem ich do niektórych grup. Zastanawiałem się, czy istnieje polecenie, które pokazuje wszystkich użytkowników przypisanych do określonej grupy? Próbowałem użyć polecenia „grupy”, ale za każdym razem, gdy go używam, mówi „grupy: nie znaleziono”
67
groups
rozkaz. Jest mało prawdopodobne, że nie masz go w systemie Linux, ponieważ jest on częścią coreutils.Odpowiedzi:
Możesz użyć grep:
Zawiera tylko dodatkowe członkostwa w grupach, a nie użytkownika, który ma tę grupę jako grupę podstawową. I znajduje tylko grupy lokalne, a nie grupy z usługi sieciowej, takiej jak LDAP.
źródło
sudo lid -g {group}
system, w którym ta odpowiedź wymienia 8 użytkowników w grupie, podczas gdysudo lid -g {group}
listy 10.getent
odpowiedź @Murray Jensen poniżejWolę użyć polecenia getent ...
W przypadku grupy należy użyć następujących ...
gdzie nazwa_grupy jest zastąpiona grupą, którą chcesz wyszukać. Pamiętaj, że to zwraca tylko dodatkowe członkostwo w grupie, nie obejmuje użytkowników, którzy mają tę grupę jako grupę podstawową.
Istnieje wiele innych wyszukiwań, które możesz zrobić ...
passwd
będąc kolejnym przydatnym, które musisz wymienić podstawowe grupy.źródło
sudo lid -g {group}
system, w którym ta odpowiedź wymienia 8 użytkowników w grupie, podczas gdysudo lid -g {group}
listy 10.Łatwiej to zrobić
groups [username]
Jeśli chcesz wyświetlić listę wszystkich lokalnych użytkowników i ich lokalnych grup, możesz to zrobić
cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
Jeśli pojawi się komunikat „groups: command not found”, prawdopodobnie zmieniono ścieżkę środowiskową na gorsze, aby zresetować ścieżkę, wykonaj
PATH=$(getconf PATH)
źródło
| grep {group}
zostanie dodany i daje poprawną odpowiedź w przeciwieństwie dogetent group name_of_group
lubgrep '^group_name_here:' /etc/group
cat /etc/passwd
powinieneś używać,gentent passwd
aby użytkownicy w nis / ldap nadal byli na liście. Jedyną wadą jest to, że może to zająć sporo czasu.wyświetla listę wszystkich użytkowników w wymienionej grupie.
źródło
groupmems
jest częścią narzędzi cieni używanych w większości dystrybucji Linuksa, jednakgroupmems
obecnie nie występuje w Debianie i pochodnych ( błąd został naprawiony, ale nie został jeszcze uwzględniony w żadnym wydaniu (od listopada 2016 r.))groupmems
zajmuje się tylko grupami w/etc/group
(nie tymi w LDAP lub innej bazie danych użytkowników) i wymaga uprawnień superużytkownika podczas próby otwarcia / etc / gshadow.cut
Przyjaciół).sudo lid -g {group}
. Mam system, w którym ta odpowiedź wymienia 8 użytkowników w grupie, podczas gdysudo lid -g {group}
lista 10.Dziwię się, że nikt nie wspomniał
To polecenie wyświetli listę grup, w których użytkownik jest.
źródło
groups
polecenie drukuje członkostwa w grupach dla użytkownika. Możesz użyćlid
polecenia, aby wyświetlić listę użytkowników w grupie, takich jak:źródło
lid
jest częścią libuser, który nie jest instalowany domyślnie w wielu dystrybucjach.OP sformułował pytanie, aby wykluczyć możliwość korzystania z polecenia grup . Ponieważ jest to część coreutils w Linuksie, albo (a) został usunięty, albo (b) OP źle wpisuje nazwę.
OP mógł użyć w
groups
następujący sposób, na przykład:Jedna sugerowana odpowiedź to po prostu grep dla nazwy grupy w
/etc/group
. Czasami działa to zgodnie z przeznaczeniem.Nieco lepsze użycie grep uwzględnia składnię
/etc/group
:tak że tylko część przed pierwszym dwukropkiem jest prawidłową nazwą grupy. Zwykły grep bez względu na składnię może (i będzie) zbierać mylące dopasowania z pliku. Użyj wyrażeń regularnych, aby grep dokładnie pasował do potrzeb:
lub używając zmiennej powłoki:
Wymienia to jednak tylko te, których nie ma w domyślnej grupie . Aby dodać te , trzeba wziąć pod uwagę pliku haseł, na przykład, przez ekstrakcję identyfikator grupy z
/etc/group
, i drukowanie użytkowników, których grupa domyślna mecze z/etc/passwd
npMożesz zrobić to samo za pomocą grep i sed, ale jest to więcej pracy niż używanie awk.
Inna sugerowana odpowiedź zaproponowana przy użyciu
getent
, która również prawdopodobnie znajduje się na komputerze z systemem Linux (w Debianie jest częścią GNU libc). Jednak szybkie sprawdzenie tego pokazuje, że dostarcza tylko/etc/group
treść.Ja (jak większość) nie mam
libusers
ani nielid
zainstalowałem, więc nie mogę komentować, czy spełnia warunki OP.Istnieje również
id
program, który podaje informacje o grupie. Ktoś może rozwinąć tę kwestię jako możliwą odpowiedź.źródło
sed -n "s/^$groupname:.*://p" /etc/group
ale może to nadal zgłaszać nieprawidłowe wyniki, jeśli nazwa grupy zawiera operatory RE (.
na przykład nie jest rzadkie w nazwach grup).getent
będzie również sprawdzać LDAP / NIS ... choć może nie, gdy wyliczanie jest wyraźnie wyłączone dla grupowej bazy danych.groups
to nie pomogłoby, ponieważ zawiera listę grup, do których należy dany użytkownik, w przeciwieństwie do listy członków danej grupy.Działa jak marzenie:
źródło
sudo lid -g
listy 8. @Bhavik Przyjęta odpowiedź jest nieprawidłowa.Niektórzy powiedzą ci, aby zainstalować libuser (dla „lid”) lub członków (dla „członków”). Ale w oparciu o odpowiedź https://unix.stackexchange.com/a/349648/77959, która rozwiązała ten problem z członkostwem w grupie logowania , znalazłem inną grupę nieobjętą tym skryptem. Tak więc - oto najlepsze z obu podejść łącznie:
źródło
getent
lub grep'^group_name_here:' /etc/group
Ta modyfikacja podejścia user3717722 spowoduje wyświetlenie listy członków grupy w bazie danych NIS:
źródło