Je sais que je peux voir la liste des utilisateurs connectés, avec la commande who
. Mais disons, je veux voir qui dans mon groupe est connecté. Comment puis je faire ça?
Les noms d'utilisateurs contenant des espaces ne sont pas autorisés par défaut sur Ubuntu, donc cette méthode doit être robuste:
who | cut -d ' ' -f 1 | while read user; do for gid in $(id -G "$user"); do [ $gid -eq $(id -g) ] && printf '%s\n' "$user" && break; done; done | sort -u
who
: affiche la liste des utilisateurs actuellement connectés;cut -d ' ' -f 1
: Imprime le premier champ séparé par des espaces de chaque ligne;while read user; do for gid in $(id -G "$user"); do [ $gid -eq $(id -g) ] && printf '%s\n' "$user" && break; done; done
: pour chaque utilisateur, vérifie si l'un des identifiants de groupe de l'utilisateur actuel est le même que celui de l'utilisateur exécutant la commande; si c'est le cas, imprime l'utilisateur;sort -u
: Trie les utilisateurs et supprime les doublons potentiels.% whoami
user
% who
foo tty1 2016-01-27 16:49
user tty2 2016-01-24 21:26 (:1)
user pts/2 2016-01-27 16:33 (:1)
user pts/4 2016-01-27 16:48 (:1)
% getent group user
user:x:1000:
% who | cut -d ' ' -f 1 | while read user; do for gid in $(id -G "$user"); do [ $gid -eq $(id -g) ] && printf '%s\n' "$user" && break; done; done | sort -u
user
% Sudo usermod -aG user foo
% who | cut -d ' ' -f 1 | while read user; do for gid in $(id -G "$user"); do [ $gid -eq $(id -g) ] && printf '%s\n' "$user" && break; done; done | sort -u
foo
user