list group de usuários logados

3

Eu sei que posso ver a lista de usuários logados, com o comando who . Mas, digamos, quero ver quem está no meu grupo. Como posso fazer isso?

    
por j0h 27.01.2016 / 16:24

1 resposta

3

Os nomes de usuário que contêm espaços não são permitidos por padrão no Ubuntu, portanto, esse método deve ser robusto:

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 : imprime a lista de usuários atualmente conectados;
  • cut -d ' ' -f 1 : imprime o primeiro campo separado por espaço de cada linha;
  • while read user; do for gid in $(id -G "$user"); do [ $gid -eq $(id -g) ] && printf '%s\n' "$user" && break; done; done : para cada usuário, verifica se um dos IDs do grupo do usuário atual é o mesmo do usuário que está executando o comando; se for, imprime o usuário;
  • sort -u : classifica os usuários e remove os possíveis duplicados.
% 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
    
por kos 27.01.2016 / 17:00