Linux中的who
命令是一个基础且实用的系统工具,主要用于显示当前登录系统的用户信息,它通过读取/var/run/utmp
或/var/log/wtmp
等文件来获取用户登录数据,帮助管理员或用户快速了解系统的使用情况,以下从功能、语法、选项、输出格式及实际应用场景等方面进行详细解析。

基本语法与功能
who
命令的基本语法非常简单,直接在终端输入who
即可执行,无需额外参数,其核心功能是列出当前所有登录到系统的用户信息,包括用户名、终端设备、登录时间和远程主机地址(如果适用),执行who
后可能输出类似内容:
user1 pts/0 2023-10-01 10:30 (192.168.1.100)
user2 tty1 2023-10-01 09:15 :0
每行代表一个登录会话,从左到右依次为用户名、终端类型、登录时间和来源地址。
常用选项及作用
who
命令支持多个选项,用于控制输出内容和格式,以下是常用选项的说明:
选项 | 全称 | 功能描述 |
---|---|---|
-a |
--all |
显示所有信息,包括idle (空闲时间)和exit (退出时间) |
-b |
--boot |
显示系统最后一次启动的时间 |
-d |
--dead |
显示已终止的进程(僵尸会话) |
-H |
--heading |
,便于理解输出结构 |
-i |
--idle |
显示用户终端的空闲时间(等同于-u ) |
-l |
--login |
显示登录系统的所有进程,包括未登录的 |
-m |
--machine |
显示与stdout 关联的用户信息(类似who am i ) |
-q |
--count |
仅显示登录用户数量,并列出用户名 |
-r |
--runlevel |
显示当前系统的运行级别 |
-s |
--short |
默认选项,仅显示用户名、终端和登录时间 |
-u |
--users |
显示用户登录状态和空闲时间 |
-w |
--mesg |
显示用户终端的写入权限状态 |
示例说明:
who -H
:添加列标题,输出更直观:USER TTY TIME IDLE PID COMMENT user1 pts/0 2023-10-01 10:30 1234 (192.168.1.100)
who -u
:显示用户空闲时间,表示当前活跃,mm:ss
表示空闲时长:user1 pts/0 2023-10-01 10:30 . 1234 (192.168.1.100) user2 tty1 2023-10-01 09:15 2:30 5678
who -q
:快速统计用户数量:# users=2 # user1 user2
输出字段详解
默认情况下,who
的输出包含以下字段(以user1 pts/0 2023-10-01 10:30 (192.168.1.100)
为例):

- USER:登录系统的用户名。
- TTY:终端设备名称,
tty
表示本地物理终端,pts/
表示虚拟终端(SSH或telnet等)。 - TIME:用户登录的时间,格式为“年-月-日 时:分”。
- ADDRESS:远程主机的IP地址(仅对远程登录有效),本地登录时显示为空。
使用-u
选项后,会增加以下字段:
- IDLE:终端空闲时间,表示当前有输入,否则显示空闲时长。
- PID:登录进程的ID,可用于终止会话(如
kill PID
)。
实际应用场景
- 监控当前用户活动:管理员可以通过
who
查看谁在线、登录时间和来源地址,及时发现异常登录。who -a
可显示系统启动时间和僵尸会话,帮助排查问题。 - 排查登录问题:若用户反馈无法登录,可通过
who -l
查看所有登录进程,确认是否有重复会话或异常进程。 - 快速统计用户数:
who -q
适用于需要快速了解在线用户数量的场景,如系统负载监控脚本。 - 结合其他命令使用:
who
的输出可管道传递给其他命令,例如who | wc -l
统计用户数量,或who | grep user1
筛选特定用户信息。
注意事项
- 文件依赖:
who
命令依赖/var/run/utmp
文件记录当前登录信息,若该文件损坏或丢失,who
可能无法正确显示数据。 - 权限限制:普通用户只能查看自己的登录信息,而root用户可查看所有用户信息。
- 时间格式:登录时间可能因系统设置显示为24小时制或12小时制,需注意区分。
相关问答FAQs
问题1:who
命令和w
命令有什么区别?
解答:who
命令主要用于显示当前登录用户的简要信息(如用户名、终端、登录时间),而w
命令在who
的基础上增加了更多系统资源使用情况,如CPU负载、进程数、终端空闲时间等。w
更适合监控系统资源占用,而who
更适合快速查看用户登录状态。
问题2:如何通过who
命令查找某个特定用户的登录记录?
解答:可以使用grep
命令过滤who
的输出,要查找用户user1
的登录信息,执行who | grep user1
,若需查看历史登录记录(包括已退出的用户),需使用last
命令,它会读取/var/log/wtmp
文件并显示更详细的登录历史。