Pokaż wszystkich użytkowników i ich grupy / i odwrotnie

70

Wiem, że mam istniejące grupy i użytkowników, ale nie jestem pewien ich powiązań. Czy istnieje polecenie powłoki, którego mogę użyć, aby wyświetlić listę wszystkich użytkowników lub wszystkich grup oraz polecenie, aby wyświetlić listę wszystkich grup / użytkowników dla określonego użytkownika / grupy?

Więc coś w rodzaju wyświetlałoby showuserslistę wszystkich użytkowników i showgroups -u thisuserpokazywało wszystkie grupy, które thisuserw niej są.

Steve Robbins
źródło
nie ma takiego polecenia. Musisz sam to napisać.
Chris
co powiesz nacat /etc/passwd
Sudip Bhandari

Odpowiedzi:

93

Wszyscy użytkownicy:

$ getent passwd

Wszystkie grupy:

$ getent group

Wszystkie grupy z określonym użytkownikiem:

$ getent group | grep username
EEAA
źródło
Odkryłem, że istnieje użytkownik o nazwie speech-dispatchernależącej do grupy audio (na podstawie groups speech-dispatcher). Ale nie ma go na liście getent grouppoleceń! Jaki jest problem?
PHP Learner
3
@PHPLearner Jeśli masz inne pytanie, opublikuj pytanie , a nie komentarz.
EEAA
+1, ponieważ spowoduje to wyświetlenie listy użytkowników / grup, których nie znaleziono w konwencjonalnych plikach /etc/passwdi /etc/group, tj. Gdy system jest skonfigurowany do korzystania z centralnych katalogów, takich jak NIS i LDAP, lub innej alternatywnej bazy danych użytkowników / grup, o ile obsługuje wyliczanie użytkowników / grup .
HBruijn
To nie zwróci wszystkich użytkowników i grup w konfiguracji ldap lub sssd, jeśli wyliczanie jest wyłączone.
Jens Timmerman
16

Lista użytkowników i ich grup:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

Lista grup i ich użytkowników:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done
nohup
źródło
1
Chociaż to prawdopodobnie zadziałałoby, wydaje się to nieco zbyt skomplikowane, prawda, skoro istnieją doskonale dobre proste polecenia jednorazowe?
EEAA
Z pewnością nie dostanie niczego, co żyje w scentralizowanym repozytorium. I to zdecydowanie informacja, którą chciałbyś zobaczyć.
Magellan
Znakomity bardzo pomocny, lepiej wspomnieć, że są to osobne polecenia.
Mian Asbat Ahmad
5

Jeśli nie zależy Ci na zdalnych użytkownikach, takich jak LDAP lub NIS, umieść listę użytkowników i powiązanych z nimi grup w prosty sposób:

cut -d: -f1 /etc/passwd | xargs groups

Wynik;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev
Fredrick Gauss
źródło
1
Ma to ten sam problem, co odpowiedź Changa, ponieważ ignoruje użytkowników / grupy pochodzące z baz danych takich jak LDAP, NIS itp.
MadHatter,
To bardzo starannie wyświetla informacje w niewiarygodnie przejrzystym formacie, więc nadal może być użytecznym pierwszym krokiem. Pomogło mi to prześledzić pamięć dotyczącą składni / etc / group i / etc / passwd!
Chris Woods,
3

Lista wszystkich użytkowników

cut -d':' -f 1 /etc/passwd

Lub

awk -F ':' '{print $1}' /etc/passwd

Podczas gdy cat / etc / passwd pokazuje wszystkich użytkowników (i kilka innych rzeczy), cut -d ':' -f 1 to prosty sposób na podzielenie każdej linii za pomocą ':' jako separatora i wyodrębnienie tylko pierwszego pola (użytkownicy ). Prawie tak samo jak wersja awk.

Wyświetl wszystkie grupy

cut -d':' -f 1 /etc/group

Lub

awk -F ':' '{print $1}' /etc/group

Zgadnij co, bardzo podobnie do listowania użytkowników. Zamiast tego parsuj / etc / group .

Innym interesującym sposobem, być może bliższym temu, czego chciał OP, jest kompgen . Nie jestem jednak pewien co do problemów ze zgodnością.

compgen -u
compgen -g
Marcos Valle
źródło
2
Cześć Elliot Baily, witamy w Server Fault! Pamiętaj, że to pytanie ma ponad 5 lat i ma już poprawną i zaakceptowaną odpowiedź. Pamiętaj również, że twoje rozwiązanie działa tylko wtedy, gdy użytkownicy są zapisani w / etc / passwd; zaakceptowana odpowiedź działa również w przypadku innych baz danych użytkowników (takich jak NIS lub LDAP). Jeśli chcesz odpowiedzieć na stare pytania (co jest w porządku!), Możesz spojrzeć na listę pytań bez odpowiedzi - mnóstwo pytań szukających miłości!
marcelm
-1

dla debiana

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group
Chang
źródło
2
W przeciwieństwie do już przyjętych, nie ma tu wykazu użytkowników / grup, które pochodzą ze zdalnej bazy danych użytkowników, takich jak LDAP, NIS itp.
HBruijn
-2

Lubię to:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username
Rui Monteiro
źródło
1
Nie. /etc/gshadowNie zawiera członków grupy ( /etc/groupzawiera), a zaakceptowana odpowiedź sprzed 4,5 lat i tak jest znacznie bardziej ogólna, ponieważ obsługuje również grupy zdalne.
Sven
-2

Użyj tego polecenia, aby uzyskać wszystkie grupy i użytkowników w tej konkretnej grupie.

grep '
> ' /etc/group
Ayaz Hussain
źródło