Shell脚本显示在线用户

Shell脚本显示在线用户

我知道这是一个业余问题。我需要编写一个 Bash shell 脚本来计算 SSH 服务器上当前有多少用户在线。我需要忽略多次登录并显示用户名和他们登录的位置。

谢谢。

答案1

这闻起来像是家庭作业,但是好吧:

#!/bin/bash

users=$(users | xargs -n1 | sort -u)
for u in $users; do
    w -h | awk '{print $1 " " $3}' | grep -m1 $u
done

解释:

首先,我们使用“user”命令建立一个登录用户列表,并通过在每行上放置一个(xargs -n)并使用唯一过滤(sort -u)进行排序来过滤掉重复项。

w -h 打印所有登录用户的列表,我们通过 awk 管道仅打印所需的字段(1 和 3),通过 grep 管道传输结果以过滤除我们在每个循环迭代中寻找的用户之外的所有用户。-m1 确保它在第一次匹配后停止,您也可以通过“head -1”管道传输。

答案2

使用该w命令,显示谁登录了以及他们正在做什么。

mike@magisterial $ w
 12:00:25 up 239 days, 22:40, 18 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
john    pts/1    xx.yy.74.10    09:29    1:34m  0.59s  0.02s sshd: john [priv]
jane    pts/3    xx.yy.74.10    09:44    2:05m  0.38s  0.01s sshd: jane [priv]
mike    pts/4    xx.yy.74.10    09:45    1:10m  0.21s  0.21s -bash

在您的情况下,使用 grep 过滤输出以仅返回 ssh 登录:

w | grep 'sshd:'

john    pts/1    xx.yy.74.10    09:29    1:34m  0.59s  0.02s sshd: john [priv]
jane    pts/3    xx.yy.74.10    09:44    2:05m  0.38s  0.01s sshd: jane [priv]

相关内容