我知道可以使用
who
命令查看已登录用户的列表。
但是假设我想要查看我的组中有哪些人已登录,我该怎么做呢?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之一是否与运行命令的用户相同;如果是,则打印用户;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