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.