web-dev-qa-db-fra.com

Comment lister les utilisateurs avec des UID supérieurs à 10?

Quelles commandes puis-je utiliser pour afficher tous les utilisateurs ayant un identifiant (UID) supérieur à 10?

2
alex

Vous pouvez analyser la base de données passwd à l’aide de awk. Au format passwd, chaque entrée est une liste de champs délimités par :, le premier étant le nom d'utilisateur et le troisième étant l'UID. Donc, dans awk, vous pourriez faire:

getent passwd | awk -F: '$3 > 10 {print $1}'
6
muru

SOLUTION 1:

Vous pouvez utiliser:

#!/bin/bash
while IFS= read -r line; do
    [[ "$(cut -d: -f3 <<<"$line")" -gt 10 ]] && echo "$line"
done </etc/passwd

Considérant que vous n'avez pas de nom d'utilisateur contenant :.

Si vous voulez juste les noms d'utilisateur:

#!/bin/bash
while IFS= read -r line; do
    [[ "$(cut -d: -f3 <<<"$line")" -gt 10 ]] && echo "$(cut -d: -f1 <<<"$line")"
done </etc/passwd

Nous lisons ici chaque ligne du fichier /etc/passwd et comparons le troisième champ délimité par : (UID) pour vérifier s’il est supérieur à 10. Si c’est vrai, nous avons imprimé la ligne (ou nom d'utilisateur dans le second script).

Ce serait beaucoup plus simple en utilisant un tableau (grâce à muru):

#!/bin/bash
while IFS=: read -a line; do
    [[ "${line[2]}" -gt 10 ]] && echo "${line[0]}"
done </etc/passwd

SOLUTION 2:

Utilisation de grep avec PCRE:

getent passwd | grep -P '^[^:]+:[^:]+:(?!(?:\d|10):)' | cut -d: -f1
  • ^[^:]+: correspondra au premier champ (nom d'utilisateur), y compris la fin :

  • [^:]+: correspondra au deuxième champ (mot de passe), y compris la fin :

  • La partie (?!(?:\d|10):) est délicate, il s’agit d’un motif de type PCRE (grep -P), de largeur négative, il signifie qu’il n’ya pas de chiffre unique (\d) ni le numéro 10 suivant, suivi d’un :.

  • cut -d: -f1 imprimera simplement le premier champ (nom d'utilisateur).

Alternativement, vous pouvez éviter le cut, en utilisant le signe d'anticipation négatif (?!) à l'intérieur du motif d'anticipation positif (?=) (grâce à Avinash Raj):

getent passwd | grep -Po '^[^:]+(?=:[^:]+:(?!(?:\d|10):))'

SOLUTION 3:

en utilisant python:

#!/usr/bin/env python2
with open('/etc/passwd') as f:
    print '\n'.join([line.split(':')[0] for line in f if int(line.split(':')[2]) > 10])

Ici, nous imprimons les noms d'utilisateur si le troisième champ est supérieur à 10. line.split(':') divisera les champs de chaque ligne sur :, ce qui en fera une liste de champs.

2
heemayl

Utilisation de awk:

 awk -F: '{if ($3 > 10) { print $1 ":" $3 } }' /etc/passwd

cela listera tous les utilisateurs avec leur UID associé où UID> 10.

Merci à @sadi note de ne lister que les noms d'utilisateurs

awk -F: '{if ($3 > 10) {print $1}}' /etc/passwd
1
Maythux