我如何查看有多少人登录了 Linux 计算机?我知道“用户”命令会显示所有登录的用户,但我需要一个数字。手册页中是否有我遗漏的用户开关?我曾考虑过使用该grep -c
命令,但每个用户名中必须有相同的内容才能正常工作。有没有更简单的方法?
答案1
您正在寻找wc
(字数统计)命令。
尝试这个:
users | wc -w
答案2
传统的命令是“who”而不是“users”,但“who”会给你更多信息。回顾最初的 Unix 文章(70 年代中期),示例应该是:
who | wc -l
使用“wc -l”计算输出行数 - 它适用于“users”和“who”。只有当每个用户只有一个单词时,使用“-w”才可靠(与“users”类似,但与“who”不同)。
您可以使用“grep -c”来计算行数。由于您只对非空白用户名感兴趣,因此您可以执行以下操作:
who | grep -c .
每行至少有一个字符。
正如评论经过约翰·T,该users
命令与who
在许多方面有所不同。最重要的一点是,它不是每行给出一个名称,而是将名称分散到每行中 — 我没有一台登录了足够多不同用户的机器来测试当用户数量变大时会发生什么。另一个区别是“who”报告正在使用的终端连接。打开多个终端窗口时,它将为单个用户显示多行,而“users”似乎只列出一次登录用户。
由于这种差异,“ grep -c .
”公式不能与“用户”命令一起使用;“ wc -w
”是必需的。
答案3
打开 shell 并输入:
who -q
最后一行将给出一个计数。
编辑:
(叹气)我误解了这个问题。以下是一种有点蛮力的方法:
要查看唯一用户名:
who | awk '{ print $1 }' | sort | uniq
要查看唯一用户数:
who | awk '{ print $1 }' | sort | uniq | wc -l
答案4
以下是 bash 版本的叮的精彩 awk 帖子:
set $(users)
declare -A user
for u ; do ((user[$u]++)) ; done
for key in "${!user[@]}" ; do echo "$key: ${user[$key]}" ; done | column -t | sort -nk 2
好吧,它有点长,但值得找到它...:)。
测试时,在下次尝试之前执行以下操作:
shift $# # clear positional parameters
unset user # remove associative array variable