其中,`who`命令虽然简单,却是系统状态监控不可或缺的一环
它不仅能够展示当前登录到系统的用户信息,还能揭示用户的登录时间、登录来源等关键细节
本文将深入探讨`who`命令的工作原理、功能特性,并动手编写一个简化版的`who`命令,以此加深对Linux系统编程的理解
一、`who`命令概述 `who`命令是Linux系统中一个非常基础且实用的工具,用于显示当前登录到系统的所有用户信息
这些信息通常包括用户名、登录终端、登录时间、远程主机地址等
通过`who`,系统管理员可以快速了解哪些用户正在使用系统,以及他们的活动情况,这对于系统安全监控和性能调优至关重要
二、`who`命令的工作原理 `who`命令的工作原理基于读取系统的用户登录信息文件,主要是`/var/run/utmp`和`/var/log/wtmp`(在某些现代Linux发行版中,可能会使用`/run/utmp`和`/var/log/wtmp`)
这些文件由系统的登录进程(如`getty`、`sshd`等)在用户登录和注销时更新
- /var/run/utmp:该文件包含当前登录用户的信息,包括用户名、登录终端、登录时间等
它是一个二进制文件,每个记录代表一个用户会话
- /var/log/wtmp:该文件记录了所有用户的登录和注销历史,也是二进制格式
它用于生成登录统计信息,如`last`命令的输出
`who`命令通过解析这些文件,提取并格式化显示用户信息,使用户能够直观地了解系统当前的登录状态
三、`who`命令的功能特性 `who`命令不仅提供了基本的用户信息展示,还通过不同的选项和参数,实现了丰富的功能扩展: - who -H:显示列头信息,使得输出更加清晰易读
- who -q:仅显示用户名和用户数量统计,适用于快速概览
- who -T:显示终端名称及其状态(如是否空闲)
- who -u:显示当前登录用户的进程ID(PID)
- who -r:显示当前运行级别(runlevel)
- who am i:显示当前用户的登录信息,相当于`who$(whoami)`
此外,结合`grep`、`awk`等工具,`who`命令的输出可以进一步被筛选和处理,以满足更复杂的查询需求
四、动手编写简化版`who`命令 为了深入理解`who`命令的工作原理,我们可以尝试编写一个简化版的`who`命令
这个简化版将仅读取`/var/run/utmp`文件,并显示用户名、登录终端和登录时间
1. 准备工作 首先,我们需要了解`utmp`结构的定义
在Linux系统中,`utmp`结构通常定义在`
include