web-dev-qa-db-ja.com

ログインしているユーザーのリストグループ

whoコマンドを使用して、ログインしているユーザーのリストを表示できることを知っています。しかし、グループ内の誰がログオンしているかを確認したいとしましょう。どうやってやるの?

3
j0h

Ubuntuでは、スペースを含むユーザー名はデフォルトでは許可されていないため、この方法は堅牢である必要があります。

_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:現在ログインしているユーザーのリストを出力します。
  • _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:各ユーザーについて、現在のユーザーのグループIDの1つがコマンドを実行しているユーザーと同じかどうかを確認します。そうである場合、ユーザーを印刷します。
  • _sort -u_:ユーザーをソートし、潜在的な重複を削除します。
_% 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
_
3
kos