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