who 是 Linux 系统中一个基础且重要的系统管理命令,用于查询和显示当前登录系统的用户信息。它通过读取系统日志文件(默认为 /var/run/utmp)来获取数据,并将结果以清晰格式输出。
一、命令基本语法与功能
命令的基本语法为:
who [选项]... [文件 | 参数1 参数2]
如果不指定文件,则默认读取 /var/run/utmp 来获取当前登录信息;如果指定文件(如 /var/log/wtmp),则可以查看历史登录记录。
执行 who 命令(不加任何选项)会默认显示当前所有登录用户的用户名 、终端设备 、登录时间 以及远程主机地址(如果是从远程登录)。
二、常用选项与示例
who 命令支持丰富的选项来满足不同的查询需求。以下是一些最常用的选项及其效果:
| 选项 | 功能描述 | 示例命令与典型输出 |
|---|---|---|
-H |
在输出结果上方显示列标题,使信息更易读。 | who -H 会输出类似 NAME LINE TIME IDLE PID COMMENT 的标题行。 |
-u 或 -i |
显示用户空闲时间 和进程ID 等额外信息。空闲时间显示规则:. 表示最近1分钟内有活动;00:11 表示空闲11分钟;old 表示空闲超过24小时;? 表示无法检测(如图形界面)。 |
who -uH |
-a |
显示所有信息 ,是 -b -d --login -p -r -t -T -u 选项的集合,输出包括系统启动时间、运行级别、死进程等最全面的信息。 |
who -a |
-b |
仅显示系统最近一次启动的时间和日期。 | who -b 输出:system boot 2025-06-09 05:58。 |
-r |
显示系统当前的运行级别。 | who -r 输出:run-level 5 2025-06-09 05:58。 |
-q |
快速统计,只显示登录的用户名列表和用户总数,输出简洁。 | who -q 输出:root root root root 和 # users=4。 |
-m |
仅显示与当前终端关联的用户信息 。其等效命令 who am i 或 who mom likes 也用于实现此功能。 |
who -m 或 who am i。 |
-T 或 -w |
显示用户终端的消息写入状态 :+ 表示允许接收消息;- 表示禁止;? 表示状态未知或终端不支持。 |
在 who -a 的输出中,用户名旁会显示 + 或 - 符号。 |
三、核心应用场景
- 实时查看在线用户:最基本的用途,快速了解谁登录了系统以及从何处登录。
- 系统状态检查 :通过
-b和-r选项可以方便地查看系统启动时间和运行级别,用于基础运维。 - 用户会话管理 :结合
-u选项查看用户的空闲时间,可以帮助管理员判断哪些会话可能可以被安全终止。在需要踢出指定用户时,可先用who或w命令查出其对应的终端(如pts/3),然后使用pkill -kill -t pts/3命令强制其下线。 - 审计与历史查询 :通过指定日志文件(如
who /var/log/wtmp),可以回顾系统的登录、注销、重启等历史记录。
四、输出字段详解
以 who -uH 的典型输出为例:
NAME LINE TIME IDLE PID COMMENT
root pts/0 2025-06-09 01:40 . 11005 (192.168.118.1)
- NAME:登录的用户名。
- LINE :终端设备类型。
ttyN表示物理终端;pts/N表示伪终端(通常是 SSH 或 Telnet 远程连接);:0表示图形界面会话。 - TIME:用户登录的时间。
- IDLE:用户空闲时间,规则如上所述。
- PID:用户登录 Shell 的进程 ID。
- COMMENT :注释信息,通常是远程登录的主机 IP 地址,本地登录则可能显示
(:0)或为空。