如何列出没有重复项的登录用户?

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身份登录的用户?

  • 如何获取活动登录会话列表?