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:
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
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
:
group_name:password:GID:user_list
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:
grep -E '^users:' /etc/group |sed -e 's/^.*://'
lub używając zmiennej powłoki:
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
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
np
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
Moż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 nie lid
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ź.
groups
rozkaz. Jest mało prawdopodobne, że nie masz go w systemie Linux, ponieważ jest on częścią coreutils.