-
Linux who命令(手把手讲解)
2025-12-04 14:21:23
前言
在Linux系统运维和开发过程中,掌握用户状态监控工具是提升系统管理效率的关键技能之一。Linux who命令作为基础但功能强大的工具,能够实时显示当前登录系统的用户信息、终端类型及登录时间等核心数据。对于编程初学者而言,它是一个了解系统运行状态的入门级工具;而对中级开发者来说,通过组合使用who命令与管道、文件操作等技术,可以构建出更复杂的系统监控方案。本文将从基础用法逐步深入,结合实际案例,帮助读者系统掌握这一工具的使用逻辑与应用场景。
一、who命令的核心功能与使用场景
1.1 基础功能解析
who命令的全称是"who are you",其核心作用是列出当前登录系统的用户信息。它通过读取系统日志文件/var/run/utmp和/var/log/wtmp中的记录,展示以下关键信息:
用户名(Username)
登录终端(Terminal)
登录时间(Login Time)
登录来源地址(对于网络连接终端)
形象比喻:可以将who命令想象成一个“系统监控室的观察员”,它持续关注着所有用户登录系统的活动轨迹,并将这些轨迹以简洁的文本格式呈现出来。
基础语法示例:
who
执行结果示例:
user1 tty1 2023-10-05 14:30
user2 pts/0 2023-10-05 14:35 (192.168.1.100)
1.2 典型使用场景
系统安全审计:快速查看是否存在异常登录用户
开发协作调试:确认同事是否正在使用共享开发环境
运维监控:结合脚本实现自动化登录状态报警
日志分析:与last命令结合,追溯历史登录记录
二、who命令的进阶用法与参数详解
2.1 核心参数与扩展功能
参数 -a:显示完整信息
使用-a参数(等同于--all)可让who命令展示所有可用字段,包括:
用户进程ID(PID)
控制终端(Controlling Terminal)
登录进程ID(Process ID)
登录ID(Login ID)
示例代码:
who -a
输出解析:
run-level 5 2023-10-05 14:30
...(其他系统信息略)...
user1 tty1 2023-10-05 14:30
user2 pts/0 2023-10-05 14:35 (192.168.1.100)
参数 -q:快速查看用户数量
-q参数(等同于--count)用于快速统计当前登录用户数量,适合需要简洁结果的场景。
示例代码:
who -q
输出示例:
user1 user2
参数 -m:仅显示当前终端信息
通过-m参数,who命令会仅输出当前终端的登录信息,这对于需要排除其他用户干扰的场景特别有用。
示例代码:
who -m
输出示例:
user2 pts/0 2023-10-05 14:35 (192.168.1.100)
2.2 who命令的输入源与输出逻辑
输入源解析
who命令的数据来源于两个关键文件:
/var/run/utmp:记录当前活动的登录会话
/var/log/wtmp:记录所有历史登录事件
技术细节:
utmp文件是动态更新的,当用户登录或注销时会被实时修改
wtmp文件是只追加的,用于长期存储登录日志
输出字段含义
字段名含义说明
USER登录用户的系统账号名
LINE登录使用的终端设备名(如tty1、pts/0)
FROM登录来源的IP地址(仅远程登录时显示)
IDLE用户空闲时间(某些系统版本中显示)
LOGIN TIME用户登录的具体日期和时间
三、who命令的高级应用场景
3.1 结合管道实现过滤与格式化
示例1:统计特定用户的登录次数
通过组合grep和wc命令,可以快速统计某个用户的历史登录次数:
who /var/log/wtmp | grep "user1" | wc -l
示例2:提取远程登录用户的IP地址列表
使用awk命令提取登录来源IP字段:
who | awk '{print $5}' | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
3.2 与系统监控工具联动
案例:实时监控登录事件
通过watch命令每秒刷新who命令的输出,实现动态监控效果:
watch -n 1 "who -q"
案例:构建登录审计脚本
创建一个脚本文件login_monitor.sh,定时记录登录用户变化:
#!/bin/bash
LOG_FILE=/var/log/login_monitor.log
who >> $LOG_FILE
并添加到crontab每5分钟执行一次:
*/5 * * * * /path/to/login_monitor.sh
四、常见问题与解决方案
4.1 问题1:who命令输出为空
可能原因:
当前终端未被正确记录到utmp文件中
文件权限不足(需以root权限执行who)
解决方案:
尝试使用sudo who或检查终端配置文件(如/etc/utmp的权限设置)。
4.2 问题2:远程登录IP地址未显示
可能原因:
使用SSH的本地终端模拟器未正确传递来源地址
系统日志配置未启用IP记录
解决方案:
检查SSH配置文件/etc/ssh/sshd_config中的PrintLastLog和LogLevel参数设置。
4.3 问题3:历史登录记录无法查看
可能原因:
wtmp文件被意外删除或清空
文件权限限制了普通用户的访问
解决方案:
使用sudo权限执行who /var/log/wtmp,或联系系统管理员恢复日志文件。
五、与相似命令的对比与选择
5.1 who vs whoami
命令核心功能适用场景
who列出所有登录用户信息系统监控、用户行为分析
whoami仅显示当前用户的登录名快速确认当前用户身份
5.2 who vs w
对比维度whow
输出信息简洁的登录列表包含用户进程、系统负载等详细信息
适用场景快速查看用户列表分析用户活跃度与系统资源占用
选择建议:
需要基础用户列表时使用who
需要结合系统负载分析时选择w命令
结论
通过本文的学习,读者应已掌握Linux who命令的基础用法、参数扩展及高级应用场景。作为系统管理员或开发者的日常工具,它不仅能帮助快速定位登录异常,还能通过组合其他命令构建出强大的监控系统。建议读者通过以下步骤深化实践:
在本地或虚拟机环境中执行本文中的示例命令
尝试编写结合who与grep的自动化监控脚本
探索/var/log/wtmp文件的结构与分析方法
记住:掌握工具的核心在于理解其背后的数据来源与逻辑关系,而不仅仅是记忆命令行参数。随着对Linux系统运行机制的深入理解,who命令将逐渐成为您优化开发效率和保障系统安全的重要助手。