列出已登录的用户(名称、终端、登录时间)

列出已登录的用户(名称、终端、登录时间)

我正在尝试打印当前登录终端的用户列表。它应该看起来像这样:

在此输入图像描述

到目前为止我只得到这个:

在此输入图像描述

我缺少终端和登录时间。我怎样才能显示它们?这是我到目前为止得到的:

#!/bin/bash
NOWDATE=$(date +"%Y-%m-%d")
NOWTIME=$(date +"%T")
USERS=$(who | cut -d " " -f1)
TERMINAL=0
LOGIN=0

for u in $USERS
do
    echo "$NOWDATE""_""$NOWTIME User: " $u
done

答案1

解析输出w可能是比who。以下是一些代表性数据,显示了登录时间:

$ who
tom      pts/1        2015-11-15 06:39 (michener:S.0)
$ w
 06:40:10 up  1:04,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tom      pts/1    michener:S.0     06:39    2.00s  0.03s  0.00s w

这些比finger。由于这是课堂练习,因此解析数据的工作就交给 OP 了。作为提示,awk 不仅可以在一行中打印其字段:

  • w通常,可以通过在 awk 脚本中包含一个BEGIN部分(以设置行号或状态)来处理输出。
  • 然后,每行的默认操作(只是没有模式的大括号)将增加行号。
  • 使用行号,专门处理第一行(在这种情况下跳过它:OP可能需要报告标题的用户数量,但这在OP的示例中没有使用),并跳过带有 的行USER
  • 之后,每一行都可以根据OP的需要进行打印。 awk当没有更多数据时将退出;执行此操作无需知道用户数量。

如果OP被告知使用 who,它有列出更多信息的选项,例如,

$ who -l -u
LOGIN    tty5         2015-11-15 05:36              3670 id=5
LOGIN    tty6         2015-11-15 05:36              3671 id=6
LOGIN    tty4         2015-11-15 05:36              3669 id=4
LOGIN    tty3         2015-11-15 05:36              3668 id=3
LOGIN    tty2         2015-11-15 05:36              3667 id=2
LOGIN    tty1         2015-11-15 05:36              3666 id=1
tom      pts/1        2015-11-15 06:39 00:06        5780 (michener:S.0)
tom      pts/2        2015-11-15 06:52   .          6078 (michener:S.1)

再次显示终端名称和登录次数。

答案2

不需要 bash 脚本。您可以使用手指命令。它将提供有关所有登录用户的完整信息。

只需打开终端并输入 Finger 即可。你会得到你需要的。如果您想更多地了解手指可以做什么在这里读

相关内容