Je l'ai mis ensemble, mais ça craint: (par exemple, des nombres magiques là-bas, une analyse de texte .. BOO!)
awk -F: '{if($3 >= 1000 && $3 < 2**16-2) print $1}' /etc/passwd
6 Réponses :
Vous essayez simplement d'obtenir une liste de tous les utilisateurs de / etc / passwd? Si tel est le cas, je pense que ce serait une solution plus facile: EDIT: strong> p> Si vous voulez seulement une liste de la liste des utilisateurs Utilisateurs (pas les utilisateurs du système), vous pouvez utiliser l'un d'entre eux: P> grep /home /etc/passwd | cut -d: -f1
Cool idées dans votre édition. J'ai appris quelque chose. On dirait toujours comme un hack cependant, n'est-ce pas?
@Robottinosino: Nope, c'est juste des scripts de shell réguliers :)
De nombreux sites ont des annuaires à domicile utilisateur dispersés entre les systèmes de fichiers et souvent même sur le réseau sur différents hôtes - et tous ne créent pas tous les répertoires de méta à domicile. / net / serveur1 / fs / d3 / users / tom par exemple.
Je ne suis pas sûr de savoir pourquoi vous ne faites que> 1000, BeCuase sur le système RedHat, il commence à 500.
Pour moi, ce script AWK fonctionne OK: P>
awk -F: '{if(!(( $2 == "!!")||($2 == "*"))) print $1}' /etc/shadow
Vous avez totalement raison, la base a été chourée de manière incorrecte. 1000 est un "nombre magique" stupide, ma faute .. Mais alors .. donc 500 ?! Ou, n'est-ce pas?
Ce n'est pas nécessaire, votre document lié stipule les opérateurs dans l'ordre de croissant i> Precedence, donc && code> a une priorité inférieure à celle
> = code> et
<< / code>.
Pour Redhat, c'est 500. On dirait qu'aucun service n'est utilisé après 499. Mais ce n'est qu'à Rhel. Vous pouvez ajouter quelque chose comme "grep / home" ou "grep / bin / bash" dépend de vos paramètres système. Vous pouvez également obtenir uniquement les utilisateurs avec mot de passe - voir ci-dessus.
Je crois que les systèmes de Debian commencent à 1000.
extraire les ID utilisateur minimum et maximum de /etc/login.defs code> puis sélectionnez les utilisateurs avec des identifiants entre ces marges à partir de
/ etc / passwd code>:
UID_MIN=$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)
UID_MAX=$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)
awk -F: -v min=$UID_MIN -v max=$UID_MAX '$3 >= min && $3 <= max{print $1}' /etc/passwd
Sur une note latérale, le si code> est superflu ... juste faire
'$ 3> = min && $ 3 <= max {imprimer $ 1}' code>.
Cela manquera beaucoup, dans certains cas, presque tous les utilisateurs des sites utilisant LDAP, NIS et d'autres mécanismes d'utilisateurs comprenant des bases de données stockées en dehors du fichier / etc / passwd.
@ AlexNorth-Keys true. Cependant, j'avais l'impression qu'il recherchait des utilisateurs locaux.
Certaines personnes fous utilisent également LDAP pour les utilisateurs locaux ;-) Il n'a pas spécifié si seul le fichier / etc / passwd devait être utilisé comme source.
Certains systèmes UNIX n'utilisent pas Mon système contient également des utilisateurs désactivés et peuvent se connecter plus plus longtemps avec leur commande de connexion à < Code> / bin / faux code> ou Voici ce qui fonctionne pour moi, y compris Arheops AWK Command et ANSGAR selon le code pour obtenir le min et max à partir de / etc / passwd code> ou ont des utilisateurs qui ne sont pas spécifiés là-bas. Vous devez utiliser
getent passwd code> au lieu de lire
/ etc / passwd code>.
/ usr / sbin / nologin code>. Vous voulez probablement les exclure aussi. P>
login.defs code>: p>
Fonctionne bien sur mon réseau à domicile, malgré les utilisateurs de LDAP, des annuaires à domicile automobile avec des chemins étranges, etc. Il produit des doublons pour les utilisateurs qui ont à la fois des entrées LDAP et Fallback / etc / Passwd, mais autrement, agréable.
Les doublons peuvent être éliminés en ajoutant un | Trier -u code>.
... ou en utilisant un tableau temporaire dans le cadre de la commande awk code>.
Voici une autre approche qui ne donne qu'un programme externe, getent code> (suggéré par @ansgarwiechers) afin que les bases de données passwd locales et réseau soient utilisées. Celui-ci réduit le nombre de fourches à un seul pour
getent code> lui-même. Sa portabilité est quelque peu limitée en exigeant Bash4, cependant.
+1. Vous devriez mentionner cependant que cela nécessite Bash4 code>, donc n'est pas une solution très portable.
Voici une simplification de la réponse de @ Stephenostermiller qui l'obtient avec seulement deux processus. Je pense qu'il est plus facile de lire également (à condition que vous connaissez bien l'AWK Les différents modèles de fractionnés dans les deux entrées est un peu de verrue; Peut-être que vous pourriez résoudre ce problème plus élégamment d'une manière ou d'une autre. p> p> nr == fnr code> idiom).
Qu'est-ce qui ne va pas avec le texte analysé?