如何检查 Linux 系统中用户是否当前已登录

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何查看当前哪些用户已登录到 Linux 系统。你将探索一些基础命令,如使用 who 命令列出已登录的用户,使用 w 命令获取有关他们会话和活动的更详细信息。

在本实验结束时,你将能够快速识别 Linux 系统上的活跃用户,并了解他们登录会话的基本信息,包括如何查看 /var/run/utmp 中的登录记录。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/UserandGroupManagementGroup -.-> linux/whoami("User Identifying") subgraph Lab Skills linux/cat -.-> lab-558775{{"如何检查 Linux 系统中用户是否当前已登录"}} linux/ps -.-> lab-558775{{"如何检查 Linux 系统中用户是否当前已登录"}} linux/whoami -.-> lab-558775{{"如何检查 Linux 系统中用户是否当前已登录"}} end

使用 who 命令列出已登录的用户

在这一步中,你将学习如何使用 who 命令列出当前已登录到系统的用户。对于系统管理员和普通用户来说,这是一个查看系统上哪些用户处于活跃状态的基础命令。

who 命令会显示当前已登录用户的信息。这些信息通常包括用户名、他们使用的终端线路、登录时间,以及他们登录的远程主机(如果适用)。

让我们来试试看。如果终端尚未打开,请打开它。你可以在桌面左侧找到 Xfce Terminal 图标。

输入以下命令并按回车键:

who

你应该会看到类似以下的输出:

labex    :0           <timestamp> (:0)

让我们来分析一下这个输出:

  • labex:这是已登录用户的用户名。在这个 LabEx 环境中,默认用户是 labex
  • :0:这表示正在使用的终端线路或显示器。:0 通常指的是主图形显示器。
  • <timestamp>:这显示了用户登录的日期和时间。时间戳的确切格式和内容可能会略有不同。
  • (:0):这通常会提供有关登录会话的额外信息,在这种情况下,是确认显示器的信息。

who 命令虽然简单,但对于快速查看谁在使用系统非常有用。这是了解用户活动的良好第一步。

记住,实践是关键!多运行几次这个命令,以便熟悉它。

点击 继续 进入下一步。

使用 w 命令检查用户会话

在这一步中,你将探索 w 命令,该命令能提供当前已登录用户的更详细信息以及他们正在进行的操作。虽然 who 命令能快速列出用户,但 w 命令能提供与用户会话相关的系统当前活动的快照。

w 命令会显示哪些用户已登录以及他们正在做什么。它是监控系统使用情况和识别与每个用户关联的活跃进程的便捷工具。

让我们在终端中运行 w 命令。如果你关闭了终端,请再次打开 Xfce Terminal

输入以下命令并按回车键:

w

你应该会看到类似以下的输出:

 <timestamp> up <uptime>,  <users> users,  load average: <load_avg>
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
labex    :0       :0               <login_time>   <idle_time>   <jcpu_time>   <pcpu_time> w

让我们来分析一下输出的不同部分:

  • 第一行提供了一个摘要:
    • <timestamp>:当前时间。
    • up <uptime>:系统自上次启动以来运行的时长。
    • <users> users:当前已登录的用户数量。
    • load average: <load_avg>:系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载。这表示等待运行的进程的平均数量。
  • 标题行(USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT)描述了每个已登录用户后续列的含义。
  • USER:用户名。
  • TTY:用户正在使用的终端线路。
  • FROM:用户登录的远程主机(如果适用)。对于像这样的本地图形会话,通常显示为 :0
  • LOGIN@:用户登录的时间。
  • IDLE:终端的空闲时间。
  • JCPU:与该终端关联的所有进程使用的时间。
  • PCPU:当前进程使用的时间。
  • WHAT:用户当前进程的命令行。在这种情况下,显示为 w,因为这是你刚刚运行的命令。

who 命令相比,w 命令能提供更动态的视图,不仅显示哪些用户已登录,还显示他们正在积极进行的操作。

尝试使用 w 命令。你会发现它对于快速评估系统活动很有用。

点击 继续 进入下一步。

检查 /var/run/utmp 中的登录记录

在这一步中,你将了解 /var/run/utmp 文件,以及像 whow 这样的命令是如何从该文件获取信息的。这个文件是 Linux 跟踪哪些用户已登录系统的关键部分。

/var/run/utmp 文件是一个二进制文件,包含当前已登录到系统的用户信息。当用户登录和注销时,该文件会不断更新。像 whowusers 这样的命令会读取这个文件以显示当前的登录信息。

由于 /var/run/utmp 是一个二进制文件,你不能像查看文本文件那样,简单地使用 catless 等命令来查看其内容。这样做会得到无法读取的字符。

让我们尝试使用 cat 命令来查看它,看看会发生什么(并理解为什么我们不这样做):

cat /var/run/utmp

你会看到很多乱码字符,对于二进制文件来说,这是意料之中的。

<binary_output>

要以人类可读的格式读取 /var/run/utmp 的内容,你通常需要使用专门用于解析该文件的命令,比如你在前面步骤中使用过的 whow

另一个专门用于读取和显示 /var/run/utmp 内容的命令是 utmpdump。这个命令对于调试或检查文件中的原始数据很有用。

让我们使用 utmpdump 来查看 /var/run/utmp 的内容。

utmpdump /var/run/utmp

你应该会看到结构化且可读的输出,显示每个登录会话的记录。确切的输出将取决于系统的当前状态,但大致如下:

Utmp dump of /var/run/utmp
[<type>] [<pid>] [<line>] [<id>] [<user>] [<host>] [<exit>] [<session>] [<tv_sec>] [<tv_usec>] [<addr_v6>]
...
[7] [ <pid> ] [ :0 ] [ :0 ] [ labex  ] [ :0 ] [  0,  0 ] [ <session_id> ] [ <timestamp> ] [ <usec> ] [ <ipv6_address> ]
...

输出显示了 utmp 文件中每个条目的各个字段,包括条目类型(如用户登录)、进程 ID、终端线路、用户名、主机、登录时间等等。

了解 /var/run/utmp 有助于你理解 Linux 是如何跟踪用户会话的,以及像 whow 这样的命令在底层是如何工作的。

点击 继续 完成本次实验。

总结

在本次实验中,你学习了如何检查 Linux 系统上当前有哪些用户已登录。你首先使用了 who 命令,该命令能提供已登录用户的基本列表,包括他们的终端、登录时间和来源。这个命令是快速识别活跃用户的基础工具。

在使用 who 命令之后,你探索了 w 命令。虽然在节选内容中没有提供 w 命令的完整详细信息,但它被介绍为一个工具,能提供关于已登录用户及其当前活动的更详细信息,比 who 命令提供的简单列表更丰富。