上一篇
如何写linux系统who命令
- Linux
- 2025-08-04
- 4
Linux系统中,写
who
命令可直接输入
who
并回车,显示当前登录用户信息;也可用不同参数如
-H
显标题、
-q
只显账号数等按需查看。
Linux系统中,who
命令是一个基础且强大的工具,用于显示当前登录系统的用户信息,以下是关于如何编写和使用该命令的详细说明:
基本语法与功能
who
命令的核心作用是读取/var/run/utmp
文件(存储用户登录记录),并格式化输出结果,其最简形式为直接输入who
,此时会列出所有已登录用户的用户名、终端类型、登录时间及来源主机等信息。
user1 pts/0 2023-10-27 10:30 (:0.0)
user2 tty1 2023-10-27 09:00
上述输出表明两个用户的登录状态,包括他们使用的虚拟控制台或伪终端设备,这种默认视图适合快速查看系统活跃会话概览。
常用选项详解
选项 | 作用描述 | 示例输出效果 |
---|---|---|
-H , --heading |
(如NAME/LINE/TIME等),提升可读性 | NAME LINE TIME COMMENT |
-q , --count |
仅显示总登录用户数和账号列表,简化监控需求 | root root root # users=3 |
-u , -i |
展示每个用户的空闲时长:短时间内活跃标记为“.”,超24小时无操作则显示“old” | user1 + pts/0 ... (old) |
-r |
查询当前系统运行级别(如多用户模式对应数字3) | run-level 3 2024-10-06 13:10 |
-m |
等同于输入am i ,专门过滤出当前执行此命令的用户会话 |
root pts/1 2024-10-06 13:47(192.168.3.241) |
-T , -w |
标注消息状态(+表示可接收消息,-代表禁止) | root + tty7 ... |
-b |
显示系统最后一次启动的时间戳 | system boot 2023-10-24 09:00 |
-p |
列出由init进程衍生的所有活动子进程 | cron . Jun 8 04:15 old 4809 |
这些选项可通过组合使用实现复杂场景下的精准查询。who -H -u
既能保留易读的表头,又能获取用户闲置细节。
典型应用场景
- 快速排查异常会话:当服务器出现性能瓶颈时,管理员可通过
who -u
定位长时间空闲却占用资源的账户,及时终止无效连接; - 自动化脚本适配:在Shell脚本中嵌入
whoami
判断当前用户身份,根据角色动态调整配置参数,增强程序健壮性; - 安全审计追踪:结合管道符与文本处理工具(如
grep
/awk
),可筛选特定IP段的外部访问记录,例如who | grep '192.168'
能高亮内网设备的登录事件; - 历史日志分析:指定归档文件作为数据源(如
who /var/log/wtmp
),可追溯过往的登录注销记录,辅助事件回溯。
进阶技巧与生态整合
- 跨命令协作:将
who
的输出导入到其他工具进行二次加工,例如使用who | sort -k3
按登录时间排序会话,或通过who > userlist.txt
保存实时快照; - 手册深度挖掘:执行
man who
获取完整参数文档,探索未公开的隐藏功能,Linux手册页通常包含版本差异说明和注意事项; - 系统级联监控:在Ansible等运维平台中调用
who
模块,批量采集多节点的用户分布数据,构建集中化管理看板。
注意事项与最佳实践
- 权限控制:普通用户只能查看自身会话,而root有权访问全体信息,若遇到权限不足提示,需用sudo提权执行;
- 时效性局限:该命令仅反映瞬时状态,无法捕获历史行为,如需长期跟踪,应配置日志转储机制;
- 字段解析规范:理解输出中的特殊符号含义(如括号内的主机名、方括号里的PID),有助于准确解读数据背后的业务逻辑。
以下是两个常见问题及其解答:
Q1: 如果发现陌生用户在线,如何安全地结束其会话?
A: 先用who
确认该用户的TTY设备名(如pts/5),然后使用pkill -kill -t pts/5
强制终止对应终端上的进程,建议优先尝试礼貌性通知(如发送SIGHUP信号),无效后再采取强硬措施。
Q2: who
与w
命令有什么区别?
A: w
除了提供who
的全部功能外,还会显示CPU负载、进程详情等扩展信息,更适合深度调优;而who
专注于简洁的用户会话展示,性能开销更低,可根据需求选择合适工具。
who
命令看似简单却蕴含丰富的系统监控能力,通过灵活运用其选项参数,并与其他Linux工具协同工作,可以显著提升