Vraag Toon alle gebruikers en hun groepen / vice versa


Ik weet dat ik bestaande groepen en gebruikers heb, maar ik ben niet zeker van hun associatie. Is er een shell-opdracht die ik kan gebruiken om alle gebruikers of alle groepen te vermelden en een opdracht om alle groepen / gebruikers voor een opgegeven gebruiker / groep weer te geven?

Dus zoiets showusers zou alle gebruikers vermelden, en showgroups -u thisuser zou alle groepen tonen die hebben thisuser in het.


48
2018-01-31 03:42


oorsprong


er is geen dergelijk bevel. Je moet het zelf schrijven. - Chris
wat dacht je van cat /etc/passwd - Sudip Bhandari


antwoorden:


Alle gebruikers:

$ getent passwd

Alle groepen:

$ getent group

Alle groepen met een specifieke gebruiker:

$ getent group | grep username

64
2018-01-31 03:45



Ik heb ontdekt dat er een gebruiker met de naam is speech-dispatcher dat hoort bij groepsaudio (gebaseerd op groups speech-dispatcher). Maar het staat niet vermeld onder getent group commando! Wat is het probleem? - PHP Learner
@PHPLearner Als u nog een vraag heeft, alstublieft post een vraag, geen commentaar. - EEAA
+1 omdat hier ook gebruikers / groepen worden vermeld die niet in de conventionele versie voorkomen /etc/passwd & /etc/group bestanden, d.w.z. wanneer een systeem is geconfigureerd om centrale mappen zoals NIS en LDAP, of enige andere alternatieve gebruikers- / groepsdatabase te gebruiken, zolang die gebruiker / groep-opsomming ondersteunt. - HBruijn
Hierdoor worden niet alle gebruikers en groepen in een ldap- of sssd-configuratie geretourneerd als de opsomming is uitgeschakeld. - Jens Timmerman


Lijst gebruikers en hun groepen:

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

Lijstgroepen en hun gebruikers:

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



Hoewel dat waarschijnlijk zou werken, lijkt het een beetje overdreven ingewikkeld, nietwaar, als er prima eenvoudige eenmalige commando's zijn om dit te doen? - EEAA
Het zou zeker niets krijgen dat in een gecentraliseerde repository leeft. En dat is absoluut informatie die u zou willen zien. - Magellan
Uitstekend zeer nuttig, het is beter om te vermelden dat het afzonderlijke opdrachten zijn. - Mian Asbat Ahmad


Maak een lijst van alle gebruikers

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

Of

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

Terwijl kat / etc / passwd toont alle gebruikers (en een hoop andere dingen), cut -d ':' -f 1 is een eenvoudige manier om elke regel te splitsen met ':' als een scheidingsteken en alleen het eerste veld (gebruikers) uit te pakken. Vrijwel hetzelfde als een awk-versie.

Maak een lijst van alle groepen

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

Of

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

Raad eens wat, heel erg vergelijkbaar met het vermelden van gebruikers. Gewoon doornemen / Etc / group in plaats daarvan.

Een andere interessante manier, misschien dichter bij wat OP wilde, is compgen. Niet zeker over compatibiliteitsproblemen.

compgen -u
compgen -g

2
2017-09-23 17:48



Hallo Elliot Baily, welkom bij Server Fault! Let op: deze vraag is ouder dan 5 jaar en heeft al een correct en geaccepteerd antwoord. Merk ook op dat uw oplossing alleen werkt als gebruikers zijn opgeslagen in / etc / passwd; het geaccepteerde antwoord werkt ook voor andere gebruikersdatabases (zoals NIS of LDAP). Als je oude vragen wilt beantwoorden (wat prima is!), Wil je misschien een kijkje nemen de lijst met onbeantwoorde vragen - veel vragen op zoek naar liefde! - marcelm


Als u zich niet druk maakt over externe gebruikers zoals LDAP of NIS, om gebruikers en hun bijbehorende groepen op een eenvoudige manier te vermelden:

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

Output;

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

2
2017-10-19 05:42



Dit heeft hetzelfde probleem als het antwoord van Chang in die zin dat het gebruikers / groepen negeert die afkomstig zijn van databases zoals LDAP, NIS, etc. - MadHatter
Dit levert heel precies de informatie op in een ongelooflijk helder formaat, dus kan nog steeds een nuttige eerste stap zijn. Het hielp mijn geheugen vrijgeven met betrekking tot de syntaxis van / etc / group en / etc / passwd! - Chris Woods


voor 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



In tegenstelling tot de al geaccepteerde lijst bevat dit geen gebruikers / groepen die afkomstig zijn van een externe gebruikersdatabase zoals LDAP, NIS enz. - HBruijn


Zoals dit:

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

-2
2017-09-02 20:05



Nee. /etc/gshadow bevat geen groepsleden (/etc/group doet) en het geaccepteerde antwoord van 4,5 jaar geleden is sowieso veel algemener, omdat het ook afgelegen groepen behandelt. - Sven♦


Gebruik deze opdracht om alle groepen en gebruikers in die specifieke groep te krijgen.

grep '
> ' /etc/group

-2
2018-02-08 08:21