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.


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

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

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

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

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.