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命令将逐渐成为您优化开发效率和保障系统安全的重要助手。

最新发表
友情链接