我知道这是一个业余问题。我需要编写一个 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]