Afficher tous les utilisateurs et leurs groupes / vice versa

71

Je sais que j'ai des groupes et des utilisateurs existants mais je ne suis pas sûr de leur association. Existe-t-il une commande shell que je peux utiliser pour répertorier tous les utilisateurs ou tous les groupes et une commande répertoriant tous les groupes / utilisateurs pour un utilisateur / groupe spécifié?

Donc, quelque chose comme showuserslisterait tous les utilisateurs, et showgroups -u thisusermontrerait tous les groupes qui thisuseren font partie.

Steve Robbins
la source
il n'y a pas une telle commande. Vous devez le script par vous-même.
Chris
cat /etc/passwd
Que

Réponses:

94

Tous les utilisateurs:

$ getent passwd

Tous les groupes:

$ getent group

Tous les groupes avec un utilisateur spécifique:

$ getent group | grep username
EEAA
la source
J'ai trouvé qu'il y a un utilisateur nommé speech-dispatcherqui appartient au groupe audio (basé sur groups speech-dispatcher). Mais ce n'est pas répertorié sous getent groupcommande! Quel est le problème?
Apprenant PHP
3
@PHPLearner Si vous avez une autre question, merci de poster une question et non un commentaire.
EEAA
+1 car cela listera également les utilisateurs / groupes non trouvés dans les fichiers /etc/passwd& conventionnels /etc/group, c'est-à-dire lorsqu'un système est configuré pour utiliser des répertoires centraux tels que NIS et LDAP, ou toute autre base de données utilisateur / groupe alternative, tant que cela prend en charge l'énumération des utilisateurs / groupes .
HBruijn
Cela ne renverra pas tous les utilisateurs et groupes d'une configuration LDAP ou SDSS si l'énumération est désactivée.
Jens Timmerman
16

Lister les utilisateurs et leurs groupes:

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

Lister les groupes et leurs utilisateurs:

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
la source
1
Bien que cela fonctionnerait probablement, cela semble un peu trop compliqué, n'est-ce pas, lorsqu'il existe de très bonnes commandes simples à utiliser pour ce faire?
EEAA
Il n’aurait certainement aucun objet en réserve dans un référentiel centralisé. Et ce sont certainement des informations que vous voudriez voir.
Magellan
Excellent très utile, il serait préférable de mentionner qu'il s'agit de commandes séparées.
Mian Asbat Ahmad, le
5

Si vous ne vous souciez pas des utilisateurs distants tels que LDAP ou NIS, listez les utilisateurs et leurs groupes associés d'une manière simple:

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

Sortie;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev
Fredrick Gauss
la source
1
Cela pose le même problème que la réponse de Chang en ce sens qu’il ignore les utilisateurs / groupes issus de bases de données telles que LDAP, NIS, etc.
MadHatter
Cela produit très précisément les informations dans un format incroyablement clair, ce qui peut donc constituer une première étape utile. Cela m'a aidé à mémoriser la syntaxe de / etc / group et de / etc / passwd!
Chris Woods
3

Lister tous les utilisateurs

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

Ou

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

Alors que cat / etc / passwd montre tous les utilisateurs (et une foule d’autres choses), cut -d ':' -f 1 est un moyen simple de scinder chaque ligne avec ':' en tant que délimiteur et d’extraire uniquement le premier ). Quasiment la même chose que la version awk.

Lister tous les groupes

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

Ou

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

Devinez quoi, très simple à la liste des utilisateurs. Il suffit d’analyser / etc / group à la place.

Un autre moyen intéressant, peut-être plus proche de ce que souhaite OP, est compgen . Pas sûr des problèmes de compatibilité cependant.

compgen -u
compgen -g
Marcos Valle
la source
2
Bonjour Elliot Baily, bienvenue dans Server Fault! Veuillez noter que cette question a plus de 5 ans et a déjà une réponse correcte et acceptée. Notez également que votre solution ne fonctionne que si les utilisateurs sont stockés dans / etc / passwd; la réponse acceptée fonctionne également pour d'autres bases de données utilisateur (telles que NIS ou LDAP). Si vous voulez répondre à de vieilles questions (ce qui est parfaitement correct!), Vous voudrez peut-être consulter la liste des questions restées sans réponse - de nombreuses questions à la recherche d'un peu d'amour!
Marcel
-1

pour debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group
Chang
la source
2
Contrairement à ce qui a déjà été accepté, cela ne répertorie pas les utilisateurs / groupes provenant d'une base de données d'utilisateurs distante, telle que LDAP, NIS, etc.
HBruijn
-2

Comme ça:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username
Rui Monteiro
la source
1
N ° /etc/gshadowne contient pas de membres de groupe ( /etc/groupbof) et la réponse acceptée d'il y a 4,5 ans est beaucoup plus générale, car elle gère également les groupes distants.
Sven
-2

Utilisez cette commande pour obtenir tous les groupes et utilisateurs de ce groupe particulier.

grep '
> ' /etc/group
Ayaz Hussain
la source