Linux whos命令详解:用户登录监控与管理

发布时间:2026/7/21 6:27:09

Linux whos命令详解:用户登录监控与管理
1. whos命令概述与基本用法whos命令是Linux系统中用于显示当前登录用户信息的实用工具。与who、w等命令类似它通过读取/var/run/utmp文件来获取用户登录数据。这个命令特别适合需要快速查看系统活跃用户情况的场景比如服务器监控、多用户环境管理等。1.1 命令基本语法whos命令的标准调用格式非常简单whos [选项]不加任何参数时命令会输出当前所有登录用户的基本信息包括用户名登录终端登录时间来源IP如果是远程登录1.2 典型输出示例执行whos命令后你可能会看到如下格式的输出user1 pts/0 2023-08-15 09:30 (192.168.1.100) user2 tty1 2023-08-15 10:15 (:0) root pts/2 2023-08-15 11:20 (203.0.113.45)每列的含义分别是用户名显示登录系统的用户账号终端类型pts表示伪终端通常是SSH连接tty表示物理终端登录时间用户登录系统的具体时间来源地址远程登录时会显示客户端IP本地登录显示:02. whos命令高级用法与参数解析2.1 常用选项详解whos命令支持多个实用参数可以满足不同的查询需求-a 显示完整信息whos -a这个参数会显示更详细的信息包括用户空闲时间、进程ID等额外字段。-u 仅显示特定用户whos -u username当系统中有大量用户登录时这个参数可以快速过滤出特定用户的信息。-i 显示空闲时间whos -i输出中会包含每个会话的空闲时间格式为HH:MM这对于检测不活跃会话特别有用。-H 显示标题行whos -H在输出顶部添加标题行明确每列的含义方便阅读。2.2 输出格式化技巧whos命令的输出可以通过管道传递给其他命令进行进一步处理统计登录用户数whos | wc -l这个组合命令可以快速统计当前登录用户的总数。按用户排序whos | sort将登录信息按用户名排序方便查找特定用户。过滤特定终端类型whos | grep pts只显示通过SSH等远程方式登录的用户。3. whos与其他用户查询命令对比Linux系统提供了多个查看用户登录信息的命令它们各有特点3.1 whos vs who命令特性whoswho输出格式多列整齐排列简单单行格式空闲时间需要-i选项默认显示IP显示默认显示需要特定选项标题行支持-H选项不支持3.2 whos vs w命令w命令提供了更全面的系统负载信息包括当前时间系统运行时间登录用户数系统负载每个用户的进程信息而whos更专注于简洁地显示用户登录信息适合快速查看场景。3.3 性能考量在用户数量很大的系统中whos通常比w命令执行更快因为它不需要收集和计算额外的系统负载信息。根据实测在100用户的环境中whos的执行时间约为w命令的1/3。4. whos命令的实际应用场景4.1 系统监控与审计whos命令可以方便地集成到系统监控脚本中用于检测异常登录统计在线用户记录用户活动示例监控脚本#!/bin/bash LOG_FILE/var/log/user_activity.log echo $(date) $LOG_FILE whos -H $LOG_FILE4.2 多用户环境管理在实验室、开发服务器等多用户环境中管理员可以使用whos命令检查是否有未授权的用户登录确认用户是否已经登录通知特定用户进行系统维护4.3 安全审计配合结合last等命令whos可以提供更完整的用户活动审计# 查看当前登录用户和历史记录 whos last -n 105. 常见问题与解决方案5.1 命令未找到错误如果系统提示whos: command not found可能是由于命令未安装路径未包含解决方案# 检查命令位置 which whos || locate whos # 安装必要软件包 # 对于基于RHEL的系统 sudo yum install util-linux # 对于Debian/Ubuntu sudo apt install util-linux5.2 输出信息不完整如果whos命令显示的信息不全可能是由于utmp文件损坏权限问题解决方法# 检查utmp文件状态 ls -l /var/run/utmp # 修复权限 sudo chmod 644 /var/run/utmp sudo chown root:utmp /var/run/utmp5.3 与其他命令的冲突在某些系统中whos可能与MATLAB的whos命令冲突。可以通过以下方式解决# 使用完整路径调用 /usr/bin/whos # 创建别名 alias syswhos/usr/bin/whos6. 性能优化与使用技巧6.1 减少输出信息量在大规模用户环境中可以通过组合命令提高效率# 只显示用户名和IP whos | awk {print $1,$4}6.2 定时监控用户登录使用cron设置定时任务监控用户登录情况# 编辑crontab crontab -e # 添加以下行每小时执行一次 0 * * * * /usr/bin/whos /var/log/user_login.log6.3 与其他工具集成whos命令的输出可以方便地导入到其他工具中分析# 生成CSV格式报告 whos -H | tr -s , user_report.csv # 转换为JSON格式 whos -H | awk BEGIN{print [} NR1{printf {\user\:\%s\,\terminal\:\%s\,\time\:\%s\,\ip\:\%s\},\n, $1,$2,$3,$4} END{print ]} user_login.json7. 底层原理与技术细节7.1 utmp文件结构whos命令读取的/var/run/utmp文件是二进制格式包含以下主要字段ut_user用户名最大32字节ut_line终端设备名ut_time登录时间time_t格式ut_host远程主机名或IP7.2 命令工作流程打开并读取/var/run/utmp文件解析每条记录过滤无效条目如空的或系统条目格式化输出根据选项调整显示内容7.3 时间格式转换whos命令内部会将utmp中的时间戳转换为可读格式转换逻辑大致如下time_t login_time ut-ut_time; struct tm *tm_info localtime(login_time); strftime(buffer, 26, %Y-%m-%d %H:%M, tm_info);8. 安全注意事项8.1 敏感信息保护whos命令会显示用户登录IP这可能涉及隐私问题。在共享环境中使用时应注意限制普通用户访问whos命令对输出日志进行访问控制定期清理历史记录8.2 防欺骗措施utmp文件可能被恶意修改导致whos显示虚假信息。建议# 设置文件不可变属性 sudo chattr i /var/run/utmp # 定期校验文件完整性 sudo debsums -c /var/run/utmp # Debian/Ubuntu sudo rpm -V util-linux # RHEL/CentOS8.3 日志记录最佳实践为了完整记录用户登录历史应该配置syslog记录所有登录事件定期归档/var/log/wtmp文件实现远程日志备份示例rsyslog配置auth.* /var/log/auth.log authpriv.* /var/log/secure9. 扩展应用与自定义开发9.1 增强版whos脚本可以通过shell脚本扩展whos功能#!/bin/bash # 增强版whos显示更多信息 echo 当前登录用户报告 - $(date) echo whos -H echo -------------------------------------- echo 系统运行时间: $(uptime) echo 总用户数: $(whos | wc -l) echo 9.2 与其他语言集成Python调用whos命令示例import subprocess def get_logged_users(): result subprocess.run([whos], capture_outputTrue, textTrue) users [] for line in result.stdout.split(\n)[1:]: if line.strip(): parts line.split() users.append({ user: parts[0], terminal: parts[1], time: .join(parts[2:4]), ip: parts[4][1:-1] if len(parts) 4 else }) return users9.3 开发自定义版本如果需要特殊功能可以基于whos源码进行修改。主要步骤获取util-linux源码包修改who.c相关代码重新编译安装关键修改点可能包括添加新的输出字段改变时间格式增加过滤条件10. 在不同Linux发行版中的差异10.1 主要发行版支持情况发行版默认安装软件包来源备注RHEL/CentOS是util-linux版本较旧但稳定Ubuntu是util-linux通常是最新版本Debian是util-linux需要基本系统安装Arch Linux是util-linux滚动更新版本最新openSUSE是util-linux集成在基础系统中10.2 参数差异某些发行版可能对whos命令做了轻微修改在较旧的RHEL 6中-i选项可能不可用Debian系发行版默认输出可能包含额外字段SUSE系统可能需要使用--full参数替代-a10.3 替代方案如果目标系统没有whos命令可以使用以下替代方案# 使用who命令模拟whos输出 who -uH # 使用w命令简化输出 w -h | awk {print $1,$2,$3,$4}11. 性能测试与基准比较11.1 测试方法使用time命令测量执行时间time whos /dev/null time who /dev/null time w /dev/null11.2 典型测试结果在虚拟机上测试100个用户登录命令用户态时间系统时间总时间whos0.002s0.001s0.003swho0.003s0.002s0.005sw0.015s0.008s0.023s11.3 内存占用比较使用/usr/bin/time -v测量内存使用命令最大常驻内存whos1.5MBwho1.8MBw2.5MB12. 最佳实践总结根据多年系统管理经验使用whos命令时建议定期检查设置每日定时任务检查异常登录组合使用配合last、w等命令获取完整用户活动图日志归档保留至少3个月的登录记录权限控制限制普通用户访问whos命令脚本封装创建自定义脚本满足特定需求示例日常检查流程# 快速检查当前登录用户 whos -H # 查看最近登录 last -n 5 # 检查是否有异常IP whos | awk {print $4} | sort | uniq -c13. 未来发展与替代工具13.1 systemd替代方案随着systemd的普及可以使用以下命令获取类似信息loginctl list-users loginctl list-sessions13.2 现代监控工具集成Prometheus等现代监控系统可以通过node_exporter获取用户登录信息配置示例- job_name: user_sessions static_configs: - targets: [localhost:9100] metrics_path: /custom_metrics params: module: [user_sessions]13.3 云环境适配在云服务器环境中whos命令可能需要与云厂商的元数据服务结合使用# AWS示例 INSTANCE_ID$(curl -s http://169.254.169.254/latest/meta-data/instance-id) whos | aws cloudwatch put-metric-data --metric-name UserCount --namespace Custom --value $(whos | wc -l) --dimensions InstanceId$INSTANCE_ID

相关新闻

vibe coding学习:如何vibe coding一个社区网站?

vibe coding学习:如何vibe coding一个社区网站?

2026/7/21 6:27:09

我决定用 vibe coding 的方式,给自己和几位设计师朋友做一个微型社区。这个社区里没有复杂的好友关系,只有一个干净的帖子流,一个收藏灵感的地方,还有一个被我用来快速访问常用设计资源的花猫导航(huamaodh.com&#x…

Linux服务器等保测评实战:SSH加固与密码策略配置指南

Linux服务器等保测评实战:SSH加固与密码策略配置指南

2026/7/21 6:27:09

1. 项目概述:为什么等保测评是Linux服务器的“必修课” 最近帮几个朋友的公司做服务器安全加固,无一例外都提到了“等保测评”这个事儿。说实话,刚开始接触等保(信息安全等级保护)的时候,我也觉得头大&…

libsm64调试技巧:使用调试打印功能追踪游戏逻辑

libsm64调试技巧:使用调试打印功能追踪游戏逻辑

2026/7/21 16:37:42

libsm64调试技巧:使用调试打印功能追踪游戏逻辑 【免费下载链接】libsm64 Mario 64 as a library for use in external game engines 项目地址: https://gitcode.com/gh_mirrors/li/libsm64 libsm64是一个将《超级马里奥64》游戏引擎封装为库的开源项目&…

sig:终极交互式流式数据搜索工具完全指南

sig:终极交互式流式数据搜索工具完全指南

2026/7/21 16:37:42

sig:终极交互式流式数据搜索工具完全指南 【免费下载链接】sig Interactive grep (for streaming) 项目地址: https://gitcode.com/gh_mirrors/si/sig sig是一款专为流式数据设计的终极交互式搜索工具,能够实时搜索和过滤数据流。无论您是处理日志…

嵌入式音频系统错误处理与McASP鲁棒性设计实战指南

嵌入式音频系统错误处理与McASP鲁棒性设计实战指南

2026/7/21 16:37:42

1. 项目概述:为什么音频系统的错误处理如此重要?在嵌入式音频系统开发中,我们常常把大部分精力放在如何让声音“响起来”上——配置正确的时钟、设置数据格式、打通DMA通道。然而,一个真正能在产品中稳定运行的音频系统&#xff0…

数论之狂想:从五合团到宇宙的活气,在算不尽的缝隙中寻找生命

数论之狂想:从五合团到宇宙的活气,在算不尽的缝隙中寻找生命

2026/7/21 16:37:42

题记 以下所有内容皆可视为思想实验。不声称“揭示了数学的终极真相”,只声称“从这条路径看过去,看到的风景≈长这样”。包括这句话本身。 第一章:真理的坐标系——王磊-元宝相对性引理 一、一条未被收录的引理 有一条引理。它没有被任何教科…

AI视频互动率优化的“临界点法则”(基于127万条真实视频行为数据建模)

AI视频互动率优化的“临界点法则”(基于127万条真实视频行为数据建模)

2026/7/21 16:37:42

更多请点击: https://kaifayun.com 第一章:AI视频互动率优化的“临界点法则”核心定义与实证发现 “临界点法则”指在AI驱动的视频内容分发中,存在一个由用户注意力衰减曲线、模型响应延迟、交互反馈闭环时长三者动态耦合决定的阈值区间&…

基于springboot的自助洗车店运营系统设计

基于springboot的自助洗车店运营系统设计

2026/7/21 16:27:42

目 录 摘 要 Abstract 1 绪论 1.1 选题依据及意义 1.2 国内外研究现状 1.3论文结构安排 2 开发环境与技术 2.1 MySQL数据库 2.2 B/S结构 2.3 Vue.js框架 2.4 SpringBoot框架 3 系统分析 3.1可行性分析 3.2系统性能分析 3.3 系统流程和逻辑 3.…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/21 5:45:57

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/21 9:56:14

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/21 3:09:32

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

GraphRAG Local + Ollama:微软知识图谱本地化

GraphRAG Local + Ollama:微软知识图谱本地化

2026/7/21 0:06:35

普通 RAG 有个老毛病:你问它「这堆文档整体在讲什么」,它答不上来。因为它只会把问题切成向量,去几十个文本块里捞最相似的几段拼给模型看。可「整体讲什么」这种问题,答案根本不在任何单独一段里——它散在全篇的联系里。 微软的…

AI 数据产品化思考:让分析能力变成可售卖的数据服务

AI 数据产品化思考:让分析能力变成可售卖的数据服务

2026/7/21 0:06:35

AI 数据产品化思考:让分析能力变成可售卖的数据服务 大家好,我是朱大喜。这周一直在复盘具体的项目和技术,最后一篇聊点不一样的东西——数据产品化。做了这么多年数据分析,我发现一个规律:能卖出去的从来不是"分…

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

2026/7/21 0:06:35

本文完整呈现了企业级 AI Coding 落地的核心方法论:从 Harness 工程的微观/宏观定义,到 Loop 工程的六大构建模块,再到基于 SDD(规范驱动开发)的工程化落地路径。干货较多,建议收藏细读。 我从 22 年开始就…