Réponses:
En fonction de gid, les utilisateurs du système et les utilisateurs des services peuvent être séparés comme suit,
/etc/passwdcontient une liste pour tous les utilisateurs ainsi que d'autres informations. Les utilisateurs de service ou les utilisateurs réels ont un nombre gidsupérieur ou égal à 1000. Ainsi, une liste d'utilisateurs réels peut être obtenue en tant que,
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Une liste d'utilisateurs du système ( gid<1000) peut également être extraite en tant que,
awk -F: '($3<1000){print $1}' /etc/passwd
Comment ça fonctionne
Le contenu de /etc/passwdest comme,
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Lors de l'utilisation awkavec -F:elle, le contenu d'une ligne est divisé en plusieurs champs, traités :comme séparateurs de champs. Le premier champ contient le nom d'utilisateur et le troisième champ contient le gid.
Par conséquent, pour extraire des utilisateurs réels, il awksuffit de vérifier que la valeur du troisième champ est supérieure à 1000 et qu'il ne s'agit pas de personne et imprime le premier champ, c'est-à-dire le nom d'utilisateur.
Pour répertorier tous les utilisateurs du système, il vérifie simplement qu'il gidest inférieur à 1 000 et imprime le nom d'utilisateur.
Éditer
Comme vous voulez le lister root(gid = 0) dans la vraie liste d'utilisateurs. Obtenez de vrais utilisateurs en tant que,
awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Obtenez les utilisateurs du système en tant que,
awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd
Remarque J'ignore toujours l' nobodyutilisateur.
Pour répertorier les utilisateurs locaux (utilisateurs du système) qui peuvent se connecter et avoir homedir et GID moins de 1000
cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1
Pour répertorier tous les autres utilisateurs: (principalement les utilisateurs du système et ayant un GID inférieur à 1000):
cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]" | cut -d: -f1