Frage Zeige alle Benutzer und ihre Gruppen / umgekehrt


Ich weiß, dass ich bereits existierende Gruppen und Benutzer habe, aber ich bin mir ihrer Assoziation nicht sicher. Gibt es einen Shell-Befehl, den ich verwenden kann, um alle Benutzer oder alle Gruppen aufzulisten, und einen Befehl, um alle Gruppen / Benutzer für einen bestimmten Benutzer / Gruppe aufzulisten?

So etwas wie showusers würde alle Benutzer auflisten und showgroups -u thisuser würde alle Gruppen zeigen, die haben thisuser drin.


48
2018-01-31 03:42


Ursprung


Es gibt keinen solchen Befehl. Sie müssen es selbst schreiben. - Chris
wie wäre es mit cat /etc/passwd - Sudip Bhandari


Antworten:


Alle Nutzer:

$ getent passwd

Alle Gruppen:

$ getent group

Alle Gruppen mit einem bestimmten Benutzer:

$ getent group | grep username

64
2018-01-31 03:45



Ich habe festgestellt, dass ein Benutzer benannt ist speech-dispatcher das gehört zur Gruppe audio (basierend auf groups speech-dispatcher). Aber es ist nicht unter aufgeführt getent group Befehl! Worin besteht das Problem? - PHP Learner
@PHPLearner Wenn Sie eine andere Frage haben, bitte eine Frage stellenKein Kommentar. - EEAA
+1, da dies auch Benutzer / Gruppen auflistet, die nicht im konventionellen gefunden werden /etc/passwd & /etc/group Dateien, d. h. wenn ein System konfiguriert ist, um zentrale Verzeichnisse wie NIS und LDAP oder irgendeine andere alternative Benutzer- / Gruppendatenbank zu verwenden, solange diese Benutzer / Gruppenaufzählung unterstützt. - HBruijn
Dies führt nicht dazu, dass alle Benutzer und Gruppen in einer ldap- oder sssd-Konfiguration zurückgegeben werden, wenn die Enumeration deaktiviert ist. - Jens Timmerman


Listen Sie Benutzer und ihre Gruppen auf:

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

Listen Sie Gruppen und ihre Benutzer auf:

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

9
2018-01-31 04:33



Während das wahrscheinlich funktionieren würde, scheint es ein wenig übermäßig kompliziert zu sein, nicht wahr, wenn es vollkommen gute einfache One-Shot-Befehle gibt, um das zu tun? - EEAA
Es würde sicherlich nichts bekommen, was in einem zentralisierten Repository lebt. Und das sind definitiv Informationen, die Sie sehen möchten. - Magellan
Ausgezeichnet sehr hilfreich, es wäre besser zu erwähnen, dass sie separate Befehle sind. - Mian Asbat Ahmad


Listen Sie alle Benutzer auf

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

Oder

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

Während Katze / etc / passwd zeigt alle Benutzer (und eine Menge anderer Sachen), Schnitt -d ':' -f 1 ist eine einfache Möglichkeit, jede Zeile mit ':' als Trennzeichen zu teilen und nur das erste Feld (Benutzer) zu extrahieren. So ziemlich wie die awk-Version.

Alle Gruppen auflisten

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

Oder

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

Rate mal was, sehr ähnlich wie das Auflisten von Nutzern. Parsen Sie einfach / etc / Gruppe stattdessen.

Ein weiterer interessanter Weg, vielleicht näher an dem, was OP wollte, ist Kompendium. Nicht sicher über Kompatibilitätsprobleme obwohl.

compgen -u
compgen -g

2
2017-09-23 17:48



Hallo Elliot Baily, willkommen bei Serverfehler! Bitte beachten Sie, dass diese Frage über 5 Jahre alt ist und bereits eine korrekte und akzeptierte Antwort hat. Beachten Sie auch, dass Ihre Lösung nur funktioniert, wenn Benutzer in / etc / passwd gespeichert sind. Die angenommene Antwort funktioniert auch für andere Benutzerdatenbanken (wie NIS oder LDAP). Wenn Sie alte Fragen beantworten wollen (was vollkommen in Ordnung ist!), Sollten Sie sich das ansehen die Liste der unbeantworteten Fragen - viele Fragen auf der Suche nach etwas Liebe! - marcelm


Wenn Sie sich nicht um entfernte Benutzer wie LDAP oder NIS kümmern, um Benutzer und ihre zugehörigen Gruppen auf einfache Weise aufzulisten:

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

Ausgabe;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev

2
2017-10-19 05:42



Dies hat das gleiche Problem wie die Antwort von Chang, da Benutzer / Gruppen aus Datenbanken wie LDAP, NIS usw. ignoriert werden. - MadHatter
Dadurch werden die Informationen sehr übersichtlich und in einem unglaublich übersichtlichen Format ausgegeben. Dies kann immer noch ein nützlicher erster Schritt sein. Es half mir, mein Gedächtnis bezüglich der Syntax von / etc / group und / etc / passwd zu verbessern! - Chris Woods


für Debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

-1
2017-11-30 09:25



Im Gegensatz zu den bereits akzeptierten Benutzern werden hier keine Benutzer / Gruppen aufgelistet, die aus einer entfernten Benutzerdatenbank wie LDAP, NIS usw. stammen. - HBruijn


So was:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

-2
2017-09-02 20:05



Nein. /etc/gshadow enthält keine Gruppenmitglieder (/etc/group tut) und die akzeptierte Antwort von vor 4,5 Jahren ist sowieso viel allgemeiner, da sie auch entfernte Gruppen behandelt. - Sven♦


Verwenden Sie diesen Befehl, um alle Gruppen und Benutzer in dieser bestimmten Gruppe abzurufen.

grep '
> ' /etc/group

-2
2018-02-08 08:21