linux w命令

w命令用于显示当前登录系统的用户信息及其正在执行的进程。它提供了比who命令更详细的信息,包括用户登录时间、空闲时间、当前执行的命令等。

语法格式

w [选项] [用户名]

如果不指定用户名,显示所有登录用户的信息。

命令功能

  • 显示当前登录系统的用户信息
  • 查看用户的登录时间、空闲时间和当前活动
  • 显示系统运行时间和平均负载
  • 监控用户正在执行的命令

📝 重要说明

  • w命令需要读取/var/run/utmp文件获取登录信息
  • 输出顶部的系统信息来自/proc/uptime/proc/loadavg
  • 可以指定用户名查看特定用户的信息
  • 空闲时间超过24小时会显示为"old"

输出字段说明

字段 说明
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 显示版本信息

常用示例

示例1:基本用法 - 查看所有登录用户

不带任何参数使用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

头部信息解释:

  • 10:30:45 - 当前系统时间
  • up 15 days, 3:20 - 系统已运行15天3小时20分钟
  • 3 users - 当前有3个用户登录
  • load average: 0.08, 0.03, 0.01 - 系统平均负载(1分钟、5分钟、15分钟)

示例2:查看特定用户信息

只查看指定用户的信息:

$ 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]

示例3:简短格式输出

使用-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字段。

示例4:不显示头部信息

使用-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

示例5:不显示FROM字段

默认显示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

示例6:组合使用参数

组合多个参数使用:

# 简短格式且不显示头部
$ 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

示例7:监控用户活动变化

使用watch命令实时监控用户活动:

# 每2秒刷新一次w命令输出
$ watch -n 2 w

# 每5秒刷新,只显示简短格式
$ watch -n 5 "w -s"

# 监控特定用户
$ watch -n 2 "w john"

示例8:识别异常登录

使用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

示例9:与其他命令结合使用

结合其他命令进行更深入的分析:

# 统计登录用户数
$ 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

💡 实用技巧

  1. 实时监控:使用watch w实时监控用户活动
  2. 安全审计:定期检查w输出,识别异常登录
  3. 性能监控:关注系统负载和用户CPU使用情况
  4. 故障排查:用户报告问题时,先用w查看其状态
  5. 脚本集成:在脚本中使用w获取用户信息

常见问题

Q: w命令和who命令有什么区别?

A: who命令只显示登录用户的基本信息,而w命令提供更详细的信息,包括用户正在执行的命令、CPU时间、空闲时间等。

Q: IDLE字段显示"old"是什么意思?

A: 当用户空闲时间超过24小时,w命令会显示"old"而不是具体时间。

Q: 为什么有些用户的FROM字段显示为空或"-"?

A: 本地登录的用户(如从图形界面或物理终端登录)的FROM字段会显示为空或"-"。

Q: 如何查看更长时间的空闲时间?

A: 空闲时间超过24小时会显示为"old",要查看具体时间可以使用last命令。

Q: w命令显示的信息从哪里来?

A: 用户信息来自/var/run/utmp,系统信息来自/proc/uptime/proc/loadavg

相关命令

  • who - 显示当前登录用户(基本信息)
  • last - 显示用户登录历史
  • uptime - 显示系统运行时间和平均负载
  • ps - 显示进程状态
  • top - 动态显示进程信息
  • finger - 显示用户信息
  • users - 用一行显示当前登录用户