Réponses:
En fonction de gid
, les utilisateurs du système et les utilisateurs des services peuvent être séparés comme suit,
/etc/passwd
contient une liste pour tous les utilisateurs ainsi que d'autres informations. Les utilisateurs de service ou les utilisateurs réels ont un nombre gid
supé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/passwd
est comme,
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Lors de l'utilisation awk
avec -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 awk
suffit 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 gid
est 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' nobody
utilisateur.
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