Linux实战:从零编写`who`命令教程

linux编写who

时间:2024-11-24 23:59


探索Linux下的`who`命令:深入理解与编写实践 在Linux操作系统的广阔天地里,每一个命令都承载着特定的使命,它们如同构建数字世界的基石,让系统管理员和终端用户能够高效地管理、监控和交互

    其中,`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 include include include include include //