如何在 Linux 中查找在线用户数?

11 linux

如何查看有多少人登录到一台 Linux 机器?我知道“用户”命令会显示所有登录的人,但我需要一个号码。手册页中是否有我缺少的用户开关?我想使用该grep -c命令,但是每个用户名中必须有相同的内容才能正常工作。有更容易的方法吗?

Jon*_*ler 20

传统上,命令是“who”而不是“users”,但“who”会为您提供更多信息。回顾最初的 Unix 文章(70 年代中期),示例应该是:

who | wc -l
Run Code Online (Sandbox Code Playgroud)

使用 'wc -l' 计算输出行数 - 它适用于'users' 和'who'。使用 '-w' 仅当每个用户只有一个词时才可靠(如使用 'users' 但不适用于 'who')。

您可以使用 'grep -c' 来计算行数。由于您只对非空白用户名感兴趣,您可以执行以下操作:

who | grep -c .
Run Code Online (Sandbox Code Playgroud)

每行总是至少有一个字符。


正如指出的评论约翰Ť,所述users命令不同于who在许多方面。最重要的是,它不是每行给出一个名称,而是将名称分散到每行几个——我没有一台机器有足够多的不同用户登录来测试当用户数量变大时会发生什么。另一个区别是“谁”报告正在使用的终端连接。打开多个终端窗口后,它将为单个用户显示多行,而“用户”似乎只列出登录用户一次。

由于这种差异,“ grep -c .” 公式不适用于“用户”命令;' wc -w' 是必要的。


Joh*_*n T 17

您正在寻找wc(字数)命令。

尝试这个:

users | wc -w
Run Code Online (Sandbox Code Playgroud)


Ave*_*yne 8

打开一个shell并输入:

who -q
Run Code Online (Sandbox Code Playgroud)

最后一行会给你一个计数。

编辑:

(叹气)我误解了这个问题。这是一个有点暴力的方法:

查看唯一用户名:

who | awk '{ print $1 }' | sort | uniq
Run Code Online (Sandbox Code Playgroud)

要查看唯一身份用户数:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Run Code Online (Sandbox Code Playgroud)