公司动态

Linux w命令详解:用户监控与系统负载分析

📅 2026/8/7 13:02:34
Linux w命令详解:用户监控与系统负载分析
1. Linux w命令系统用户监控的瑞士军刀在Linux系统管理中了解当前登录用户的活动状态是日常运维的基础需求。w命令就像系统管理员的控制台仪表盘它能实时显示谁正在使用系统、在做什么以及系统负载情况。这个看似简单的命令实际上整合了who、uptime等多个工具的信息是排查异常登录、分析系统负载的利器。我经常在服务器维护时首先运行w命令它能立即告诉我是否有异常会话、哪些用户正在执行耗资源任务、系统是否过载等关键信息。对于多用户环境或需要监控服务器健康状态的场景掌握w命令的深度用法能显著提升工作效率。2. 命令输出解析与字段详解2.1 典型输出示例$ w 10:30:45 up 15 days, 3:12, 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:15m 0.10s 0.00s sshd: john [priv] alice pts/1 203.0.113.45 10:20 0.00s 0.20s 0.05s vim /var/log/syslog root :0 :0 08:00 ?xdm? 1:20m 0.10s /usr/bin/gnome-shell2.2 关键字段解析系统概览行10:30:45当前系统时间up 15 days系统已运行时间重要判断系统是否需要重启load average1/5/15分钟平均负载超过CPU核心数需警惕用户信息列USER登录用户名注意异常root登录TTY终端类型pts/0表示远程:0表示本地FROM来源IP排查异常地理位置登录LOGIN登录时间判断会话持续时间活动指标IDLE空闲时间长时间空闲可能需清理JCPU该终端所有进程占用CPU时间PCPU当前进程CPU时间定位高负载进程WHAT正在执行的命令关键安全审计点注意IDLE字段中的?xdm?表示图形界面会话其空闲时间无法准确计算3. 高级用法与实用技巧3.1 参数组合实战# 显示精简信息适合快速查看 $ w -h # 按CPU使用排序找资源占用者 $ w | head -1; w | tail -n 2 | sort -k6 -rn # 持续监控每2秒刷新 $ watch -n 2 w # 只显示指定用户 $ w -u alice3.2 安全审计应用检测异常登录# 检查非标准端口SSH登录 $ w | grep -E pts/.*:[5-9][0-9]{3} # 查找root远程登录生产环境应禁止 $ w | grep root.*pts/会话追踪脚本#!/bin/bash while true; do w /var/log/user_activity.log sleep 300 done3.3 性能分析技巧负载解读当1分钟负载值持续超过CPU核心数的70%需要检查WHAT列找出问题进程JCPU分析高JCPU低PCPU可能表示后台有异常进程TTY类型判断tty1本地控制台pts/0SSH或telnet会话:0本地图形界面4. 常见问题排查指南4.1 输出异常情况处理现象可能原因解决方案用户显示为unknown用户被删除但会话保持pkill -KILL -u [UID]FROM显示-本地控制台登录正常现象无需处理WHAT显示-bash空闲shell会话检查.bashrc是否有异常命令高负载但无活跃进程僵尸进程或IO等待top查看wa值检查iotop4.2 实用诊断命令组合# 找出消耗CPU最多的用户 $ ps -eo user,pcpu --sort-pcpu | head # 关联进程树查看 $ ps auxf # 检查网络连接配合FROM字段 $ ss -antp | grep ESTAB5. 生产环境最佳实践日志记录定期归档w输出到/var/log/w.log建议使用logrotate管理告警设置当检测到root远程登录时触发告警# 在/etc/bashrc中添加 if [[ $(w -h | grep -c root.*pts/) -gt 0 ]]; then echo ALERT: Root remote login detected! | mail -s Security Alert adminexample.com fi自动化清理对超过24小时的空闲会话自动断开# 添加到crontab */30 * * * * for u in $(w -h | awk $5 ~ /days/ {print $1}); do pkill -HUP -u $u; done安全加固建议限制w命令权限chmod 750 /usr/bin/w使用sudo替代直接root登录结合last命令进行登录审计我习惯在每台服务器上设置alias www -i这样默认显示IP而不是主机名对于管理大量服务器时追踪问题源特别有用。另外在分析高负载问题时先看w的负载指标再结合top和WHAT列的具体进程信息往往能快速定位到问题根源。