Answers:
传统上,命令是“谁”而不是“用户”,但是“谁”会为您提供更多信息。回顾原始的Unix文章(70年代中期),示例将是:
who | wc -l
使用'wc -l'计算输出行数-它与'users'和 'who'一起使用。仅当每个用户只有一个单词时(与“用户”一样,而与“谁”一样),才可以可靠地使用“ -w”。
您可以使用'grep -c'计算行数。由于您仅对非空白用户名感兴趣,因此可以执行以下操作:
who | grep -c .
每行总是至少有一个字符。
正如指出的评论由约翰Ť,所述users命令不同于who在许多方面。最重要的是,它不是将名称分配给每行,而是将名称分散到每行几个—我没有一台计算机,该计算机具有足够多的不同用户登录来测试用户数量增加时的情况。另一个区别是“谁”报告使用中的终端连接。打开多个终端窗口后,它将为一个用户显示多行,而“用户”似乎只列出了一个登录用户。
由于这种差异,' grep -c .'表示法不适用于'users'命令;' wc -w'是必需的。
打开外壳并键入:
who -q
最后一行将为您计数。
编辑:
(叹气)我误解了这个问题。这是一种蛮力的方法:
要查看唯一的用户名:
who | awk '{ print $1 }' | sort | uniq
要查看不重复用户数:
who | awk '{ print $1 }' | sort | uniq | wc -l
您要查看会话数还是实际用户数?
$ 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
这是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
您可以简单地使用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
http://www.gnu.org/software/coreutils/manual/html_node/who-invocation.html
“谁”打印有关当前登录用户的信息。概要:
谁[选项] [文件] [我]
您总是可以下载称为TOP的Unix免费工具。它会生成用户列表以及他们当时在系统上所做的事情,并且只要运行就将继续更新。
它具有许多命令行开关,因此您应该能够提取所需的信息。
who | cut -d ' ' -f1 | uniq | wc -l
如果要按正确的顺序查找登录和注销的用户总数,则最好的运行命令是
cat -n /etc/passwd
cat -n只打印文件中的所有行,每行编号。您将获得该系统上存在的用户列表,但不会获得太多的登录信息。