在CentOS系统的日常运维与管理中,实时掌握当前登录用户的状态是保障服务器安全与稳定运行的关键环节。who命令作为Linux系统中最基础且核心的用户查询工具,能够直接读取系统登录记录文件,为管理员提供精准的在线用户信息,它不仅能够显示谁正在登录系统,还能揭示用户登录的来源IP、登录时间以及使用的终端设备,对于系统管理员而言,熟练运用who命令是进行安全审计、故障排查和用户管理的必备技能,其核心价值在于通过简单的指令快速获取系统用户活动的“快照”,从而为后续的决策提供数据支持。
基本功能与输出解析
who命令默认的输出内容简洁而信息量大,每一行代表一个登录会话,理解其输出字段的含义是深入使用该命令的前提,在终端直接输入who后,系统通常会返回包含以下几列信息的数据:

登录用户名,这是发起会话的系统账户标识;其次是终端设备名,如pts/0或tty1,这标识了用户连接到系统所使用的接口。tty通常指物理终端或虚拟控制台,而pts则代表伪终端,通常是通过SSH或Telnet等网络方式远程连接时分配的,第三列是登录时间,精确到具体的日期和小时分钟,最后一列(如果存在)则是远程主机的IP地址或主机名,这对于追踪用户来源至关重要。
通过这些基础信息,管理员可以迅速判断当前系统的负载情况以及是否有异常的异地登录行为,发现一个本应只有本地运维人员访问的服务器出现了来自海外IP的pts连接,这通常是安全入侵的早期预警信号。
核心参数详解与进阶应用
虽然who命令的基本用法已经能够满足大部分查看需求,但在复杂的运维场景中,结合特定参数使用才能发挥其最大效能,以下是在CentOS环境下最为常用且具有高价值的参数组合。
查看系统启动时间与运行级别 使用who b和who r是系统健康检查的重要手段。who b(boot time)会显示系统的最后一次启动时间,这对于判断服务器是否发生过意外重启、计算系统连续运行时间非常有帮助,如果发现启动时间与预期不符,说明系统可能存在自动重启或人为重启的情况,需要进一步检查系统日志。who r(runlevel)则显示当前系统的运行级别,这对于CentOS 7及以下版本的服务模式管理尤为重要,管理员可以据此确认系统是否处于预期的运行模式(如多用户模式无图形界面)。
详细列出所有用户信息who a(all)是“重型”参数,它相当于集成了多个常用参数的功能,能够输出最详尽的登录信息,除了默认字段外,它还会显示用户的空闲时间、进程ID(PID)、终端状态以及注释信息等,空闲时间(IDLE)对于管理多用户系统特别有用,管理员可以识别出哪些账号长时间占用资源但未进行操作,从而决定是否清理会话或联系用户,进程ID则允许管理员直接通过kill命令对异常会话进行强制终止,这是处理僵死进程或恶意连接时的专业操作手段。 与统计汇总** 为了提高数据的可读性,特别是在编写脚本或生成报告时,who H(heading)会打印出每一列的标题,让输出结果一目了然,虽然who本身侧重于当前状态,但结合count参数(如who q)可以快速统计当前登录用户的总数及登录名列表,这对于监控系统并发连接数、判断是否达到License限制或负载阈值提供了快速的数据参考。
实际场景中的解决方案
在CentOS服务器的实际管理中,who命令往往与其他工具配合使用,形成一套完整的运维解决方案。

安全审计与入侵检测 在安全审计场景下,单纯的who输出可能不足以追溯历史,管理员通常会将who的实时输出与w命令对比。w命令不仅显示谁在登录,还显示用户当前正在执行的命令,如果发现一个用户通过who看到处于登录状态,但在w中显示其正在执行敏感命令如vi /etc/passwd或进行wget操作,这需要立即引起警觉,专业的解决方案是编写监控脚本,定期执行who并解析IP字段,将其与白名单IP库进行比对,一旦发现非白名单IP登录,立即通过邮件或短信发送警报。
维护前的用户通知 在进行计划性系统维护,如内核升级或重启服务之前,确认是否有用户在线是标准操作流程,使用who命令可以快速列出所有在线用户,如果发现有关键业务人员在线,管理员可以通过wall命令发送广播消息通知其保存工作并退出,在强制关机前,再次执行who确认所有用户已登出,可以有效避免数据丢失或业务中断,这是体现运维专业度的重要细节。
故障排查:终端异常占用 有时服务器可能会出现资源占用异常,或者某个服务无法启动提示端口被占用,但通过常规的ps命令难以定位,利用who a查看终端状态,结合fuser命令检查特定终端占用的文件资源,往往能发现隐藏的僵死进程,一个已经断开的SSH会话可能在后台仍挂载着某个文件系统,导致无法卸载,通过who找到该伪终端(pts),利用pkill t pts/1强制结束该终端的所有进程,是解决此类挂载问题的有效手段。
与相关命令的对比与独立见解
许多初学者容易混淆who、w和last这三个命令,虽然它们都与用户信息相关,但侧重点截然不同。who专注于“当前状态”,回答的是“现在谁在系统上”;w专注于“当前行为”,回答的是“他们在做什么以及系统负载如何”;last则专注于“历史记录”,回答的是“过去谁登录过”。
从专业角度来看,who命令的优势在于其轻量级和输出格式的标准化,非常适合被Shell脚本解析调用,相比于w命令输出的复杂格式,who的文本流处理起来更加简单直接,在编写自动化运维脚本,特别是需要批量检查多台服务器在线用户状态的场景下,who q或who u是比w更优的选择,因为它减少了不必要的系统开销,且提取核心数据的效率更高。
常见问题处理
在使用who命令时,偶尔会遇到输出为空或显示不准确的情况,这通常是由于/var/run/utmp文件损坏或权限设置不当造成的。utmp文件是who命令读取数据源的核心文件,如果发现who无法显示当前登录用户(明明自己已登录),首先应检查该文件的权限,通常应为rwrwr,如果文件损坏,最简单的解决方案是删除该文件(rm /var/run/utmp),系统通常会在下次重启或相关服务启动时自动重新创建它,在某些极小化的容器环境中,可能默认没有安装who命令或相关服务,此时需要通过包管理器(如yum install utillinux)进行补充安装。

相关问答
Q1:在CentOS中,如何使用who命令查看除了当前登录用户外的所有历史登录记录? A:who命令本身主要用于查看当前登录用户,如果需要查看历史登录记录,包括过去的登录、登出事件以及重启记录,应使用last命令。last会读取/var/log/wtmp文件,显示更详尽的历史会话列表,如果只想查看最近登录的用户,可以使用last n 10来限制显示的行数。
Q2:who命令显示的IP地址为“:0”或类似符号,这是什么意思? A:当who命令的显示结果中主机名或IP地址部分显示为0、1等时,这通常表示用户是通过本地图形界面(如X Window System或GNOME Desktop)直接登录的,而不是通过网络(SSH/Telnet),这里的数字代表显示编号(Display Number),是本地图形终端的标识。
互动
掌握who命令只是精通Linux系统运维的第一步,在实际的服务器管理工作中,您是否遇到过利用who命令成功拦截异常登录的经历?或者您在查看用户状态时有哪些独到的脚本编写技巧?欢迎在评论区分享您的实战经验和见解,让我们一起探讨更高效的服务器安全管理方案。
