w命令用于显示当前登录系统的用户信息及其正在执行的进程。它提供了比who命令更详细的信息,包括用户登录时间、空闲时间、当前执行的命令等。
w [选项] [用户名]
如果不指定用户名,显示所有登录用户的信息。
w命令需要读取/var/run/utmp文件获取登录信息/proc/uptime和/proc/loadavg| 字段 | 说明 |
|---|---|
| USER | 登录用户名 |
| TTY | 用户使用的终端。pts表示伪终端,tty表示物理终端 |
| FROM | 用户登录的远程主机名或IP地址。本地登录显示为空或"-" |
| LOGIN@ | 用户登录时间 |
| IDLE | 用户空闲时间(没有操作终端的时间) |
| JCPU | 该终端所有进程占用的CPU时间 |
| PCPU | 当前进程占用的CPU时间 |
| WHAT | 用户当前正在执行的命令 |
| 参数 | 说明 |
|---|---|
用户名 |
指定要查看的用户名,只显示该用户的信息 |
-h, --no-header |
不显示头部信息(系统信息行) |
-u, --no-current |
忽略当前进程的用户名,使用更准确的算法 |
-s, --short |
使用简短格式,不显示登录时间和JCPU/PCPU时间 |
-f, --from |
显示FROM字段(默认显示,但可用-f开关) |
--help |
显示帮助信息 |
-V, --version |
显示版本信息 |
不带任何参数使用w命令:
$ w
10:30:45 up 15 days, 3:20, 3 users, load average: 0.08, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
john pts/0 192.168.1.100 09:15 1:05m 0.05s 0.01s sshd: john [priv]
alice pts/1 :0 10:20 2.00s 0.10s 0.02s vim document.txt
bob tty2 - 09:45 30:00 0.03s 0.01s -bash
头部信息解释:
只查看指定用户的信息:
$ w john
10:35:20 up 15 days, 3:25, 3 users, load average: 0.05, 0.02, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
john pts/0 192.168.1.100 09:15 1:10m 0.05s 0.01s sshd: john [priv]
使用-s参数显示简短格式:
$ w -s
10:40:10 up 15 days, 3:30, 3 users, load average: 0.03, 0.02, 0.00
USER TTY FROM IDLE WHAT
john pts/0 192.168.1.100 1:15m sshd: john [priv]
alice pts/1 :0 5.00s vim document.txt
bob tty2 - 35:00 -bash
简短格式省略了LOGIN@、JCPU和PCPU字段。
使用-h参数隐藏系统信息行:
$ w -h
john pts/0 192.168.1.100 09:15 1:20m 0.05s 0.01s sshd: john [priv]
alice pts/1 :0 10:20 10.00s 0.10s 0.02s vim document.txt
bob tty2 - 09:45 40:00 0.03s 0.01s -bash
默认显示FROM字段,可以使用-f开关控制:
# 默认显示FROM字段
$ w
# 不显示FROM字段
$ w -f
10:45:30 up 15 days, 3:35, 3 users, load average: 0.02, 0.01, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
john pts/0 09:15 1:25m 0.05s 0.01s sshd: john [priv]
alice pts/1 10:20 15.00s 0.10s 0.02s vim document.txt
bob tty2 09:45 45:00 0.03s 0.01s -bash
组合多个参数使用:
# 简短格式且不显示头部
$ w -s -h
john pts/0 192.168.1.100 1:30m sshd: john [priv]
alice pts/1 :0 20.00s vim document.txt
bob tty2 - 50:00 -bash
# 查看特定用户的简短信息
$ w -s alice
10:50:15 up 15 days, 3:40, 3 users, load average: 0.01, 0.01, 0.00
USER TTY FROM IDLE WHAT
alice pts/1 :0 25.00s vim document.txt
使用watch命令实时监控用户活动:
# 每2秒刷新一次w命令输出
$ watch -n 2 w
# 每5秒刷新,只显示简短格式
$ watch -n 5 "w -s"
# 监控特定用户
$ watch -n 2 "w john"
使用w命令检查可疑登录:
# 查看所有登录用户的详细信息
$ w
11:00:00 up 15 days, 3:50, 4 users, load average: 0.15, 0.08, 0.03
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
john pts/0 192.168.1.100 09:15 1:45m 0.05s 0.01s sshd: john [priv]
alice pts/1 :0 10:20 30.00s 0.10s 0.02s vim document.txt
bob tty2 - 09:45 1:00:00 0.03s 0.01s -bash
unknown pts/2 203.0.113.5 10:55 0.00s 0.20s 0.05s w # 可疑IP!
# 进一步调查可疑IP
$ last | grep 203.0.113.5
$ netstat -an | grep 203.0.113.5
结合其他命令进行更深入的分析:
# 统计登录用户数
$ w -h | wc -l
3
# 提取所有登录用户的用户名
$ w -h | awk '{print $1}' | sort -u
alice
bob
john
# 查看空闲时间最长的用户
$ w -h | sort -k5 -r | head -5
# 查看正在执行特定命令的用户
$ w -h | grep "vim"
alice pts/1 :0 10:20 45.00s 0.10s 0.02s vim document.txt
watch w实时监控用户活动w输出,识别异常登录w查看其状态w获取用户信息A: who命令只显示登录用户的基本信息,而w命令提供更详细的信息,包括用户正在执行的命令、CPU时间、空闲时间等。
A: 当用户空闲时间超过24小时,w命令会显示"old"而不是具体时间。
A: 本地登录的用户(如从图形界面或物理终端登录)的FROM字段会显示为空或"-"。
A: 空闲时间超过24小时会显示为"old",要查看具体时间可以使用last命令。
A: 用户信息来自/var/run/utmp,系统信息来自/proc/uptime和/proc/loadavg。
who - 显示当前登录用户(基本信息)last - 显示用户登录历史uptime - 显示系统运行时间和平均负载ps - 显示进程状态top - 动态显示进程信息finger - 显示用户信息users - 用一行显示当前登录用户