如何列出没有重复项的登录用户?
who
命令可用于查找已登录的用户,但如果有多个shell正在运行,则会打印重复值。 如何获取没有重复项的当前登录用户列表?
我们可以将who
的输出通过管道输出到每个记录(行)的第一个单元格 ,然后将其传递给命令sort
,它将按字母顺序对值进行排序,并仅输出唯一的-u
条目:
who | awk '{print $1}' | sort -u
或者我们只能以这种方式使用awk
:
who | awk '!seen[$1]++ {print $1}'
符合POSIX标准的解决方案,由@dessert提供 – 其中cut
将使用空格作为分隔符-d' '
并且只打印每个记录的第一个字段-f1
:
who | cut -d' ' -f1 | sort -u
感谢@DavidFoerster这里有一个更短的语法,不会丢失所有其他列的信息:
who | sort -u -k 1,1
出于同样的目的,我们可以使用带有选项-h
(忽略标头)的命令w
,例如:
w -h | awk '!seen[$1]++ {print $1}'
我们也可以使用命令users
结合命令rs
(重塑数据)和转置选项-T
然后再次sort -u
:
users | rs -T | sort -u
我们可以通过以下方式使用和who -q
with transposition – 其中命令head -1
将仅裁剪上一个命令的输出的第一行:
who -q | head -1 | rs -T | sort -u
也可以看看:
-
如何找到以root身份登录的用户?
-
如何获取活动登录会话列表?