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


10

如何查看有多少人登录Linux计算机?我知道“用户”命令显示了所有登录的人,但我需要一个电话号码。手册页中缺少我的用户的开关吗?我曾想过使用grep -c命令,但是每个用户名中都必须有相同的东西才能起作用。有没有更简单的方法?

Answers:


15

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

尝试这个:

users | wc -w

请注意,此方法(who / w解决方案)仅显示已登录的用户,不一定显示活动用户(即,先启动进程然后注销但将正在运行的进程抛在后面的用户)。只是要提起区别。
estani 2013年

18

传统上,命令是“谁”而不是“用户”,但是“谁”会为您提供更多信息。回顾原始的Unix文章(70年代中期),示例将是:

who | wc -l

使用'wc -l'计算输出行数-它与'users'和 'who'一起使用。仅当每个用户只有一个单词时(与“用户”一样,而与“谁”一样),才可以可靠地使用“ -w”。

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

who | grep -c .

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


正如指出的评论约翰Ť,所述users命令不同于who在许多方面。最重要的是,它不是将名称分配给每行,而是将名称分散到每行几个—我没有一台计算机,该计算机具有足够多的不同用户登录来测试用户数量增加时的情况。另一个区别是“谁”报告使用中的终端连接。打开多个终端窗口后,它将为一个用户显示多行,而“用户”似乎只列出了一个登录用户。

由于这种差异,' grep -c .'表示法不适用于'users'命令;' wc -w'是必需的。


小的nitpick-用户命令不会为每个用户打印1行,它只会顺序打印id,因此grep -c。在这种情况下将无法正常工作。聪明的想法。
约翰T

这也意味着wc -l将无法与users命令一起使用,如下所示:i26.tinypic.com/4pw0vd.png
John T

@John T:哦,好吧,鉴于屏幕截图,您是对的。我在MacOS X上测试了“用户”-但是只有一个用户登录。当我与另一个用户登录再次检查时,我看到了“全部在线”的行为。
乔纳森·莱夫勒

1
要模拟更多用户,您可以SSH到自己的盒子中:)
John T

尽管我想坚持使用“用户”命令,但还是感谢您提供了这些有价值的信息。也支持您,谢谢。

7

打开外壳并键入:

who -q

最后一行将为您计数。

编辑:

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

要查看唯一的用户名:

who | awk '{ print $1 }' | sort | uniq

要查看不重复用户数:

who | awk '{ print $1 }' | sort | uniq | wc -l 

计入同一用户的所有登录总数。
hayalci

检查重新编辑,我想您会发现新答案可以解决该问题。
艾利·佩恩

这仍然行不通,uniq仅删除重复的连续行,您需要先对谁进行排序。
theotherre

这就是我在凌晨1点发布答案所得到的。(叹气)固定。
艾利·佩恩

3

您要查看会话数还是实际用户数?

$ who
andrew   tty1         2009-07-26 15:31 (:0)
andrew   pts/0        2009-07-27 00:11 (:0.0)
andrew   pts/1        2009-07-27 01:58 (:0.0)

那是在我的笔记本电脑上,所以我是唯一的用户,但是我已经登录了三次。

$ who | wc -l
3
$ users | wc -w
3

尽管可以获取实际用户数量,但是很容易过滤掉这些重复项。

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1

3

这是tink伟大的awk帖子的bash版本:

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

2

当前登录的用户数:

who |cut -c 1-9 |sort -u |wc -l

上述帐户及其帐户名称:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l

1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

谁打印出列表,剪切将删除第一行以外的所有内容,对-u进行排序,并删除重复项,然后wc -l对行进行计数。在ubuntu / bash上对我来说很好用:)


1

您可以简单地使用w/usr/bin/w在基于Red Hat的系统上)或uptime,它们显示已登录用户的实际数量。

w:

                              v
 22:40:38 up 3 days, 22 min,  1 user,  load average: 0.02, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
manuel   pts/0    pc-manuel        09:35    0.00s  0.07s  0.00s /usr/bin/screen -xRR

正常运行时间:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01

1

还有一种只使用一个管道的方法...

users | awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(i in a){print i"\t"a[i]}}'

:}



0

您总是可以下载称为TOP的Unix免费工具。它会生成用户列表以及他们当时在系统上所做的事情,并且只要运行就将继续更新。

它位于http://www.unixtop.org/

它具有许多命令行开关,因此您应该能够提取所需的信息。


我还没有找到默认情况下不包含top的linux发行版,更不用说没有从软件包安装它的选项了。
theotherreceived

0
who | cut -d ' ' -f1 | uniq | wc -l

2
这似乎是Kim答案的一个小变化,并且没有任何解释。作为对该答案的评论(可能需要更多代表),它可能更合适。目的是使每个答案提供的解决方案都与已提供的解决方案实质上不同。
fixer1234 '19

-2

如果要按正确的顺序查找登录和注销的用户总数,则最好的运行命令是

cat -n /etc/passwd

2
不,那不是该命令的作用。cat -n只打印文件中的所有行,每行编号。您将获得该系统上存在的用户列表,但不会获得太多的登录信息。
cpast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.