【Shell 命令集合 系统管理 】Linux 显示当前系统上已登录用户的信息 rwho命令 使用指南

简介: 【Shell 命令集合 系统管理 】Linux 显示当前系统上已登录用户的信息 rwho命令 使用指南

Shell 命令专栏:Linux Shell 命令全解析


描述


rwho命令用于显示当前系统上已登录用户的信息。它从指定的远程主机或本地主机上的utmp文件中读取数据,并将结果显示在终端上。

rwho命令的输出格式如下:

  1. 用户名:显示登录用户的用户名。
  2. 远程主机:显示登录用户所在的远程主机名称。
  3. 登录时间:显示用户登录的时间。
  4. 空闲时间:显示用户最后一次活动的时间。
  5. JCPU:显示用户在系统中花费的总CPU时间。
  6. PCPU:显示用户在当前进程中花费的CPU时间。
  7. 命令:显示用户当前正在执行的命令。

rwho命令的输出结果类似于以下示例:

user1    remote_host1  2021-01-01 10:00  00:10  0.50s  0.10s  command1
user2    remote_host2  2021-01-01 09:30  01:30  1.20s  0.80s  command2
user3    remote_host3  2021-01-01 08:45  00:20  0.30s  0.05s  command3

通过rwho命令,系统管理员可以查看当前系统上的活动用户,以及他们的登录时间、活动状态和执行的命令。这对于监控系统使用情况、定位问题和管理用户活动非常有用。


语法格式

rwho [选项] [远程主机]

参数说明

  • -l:以详细模式显示登录用户信息,包括空闲时间和CPU时间。
  • -r:以逆序方式显示登录用户信息,最新登录的用户显示在前面。
  • -u username:显示指定用户的登录信息。
  • -h remote_host:显示指定远程主机上的登录用户信息。

错误情况

  • 如果utmp文件不存在或不可读,则会显示错误消息。
  • 如果指定的远程主机无法连接或不存在,则会显示错误消息。
  • 如果没有登录用户,则不会显示任何信息。

请注意,rwho命令需要root权限才能读取utmp文件以获取登录用户信息。如果没有足够的权限,可能无法正常运行该命令。

注意事项

在使用rwho命令时,有一些注意事项需要考虑:

  1. 需要root权限:rwho命令需要root权限才能读取utmp文件以获取登录用户信息。如果没有足够的权限,可能无法正常运行该命令。
  2. utmp文件的位置:rwho命令默认从utmp文件中读取登录用户信息。utmp文件通常位于/var/run/utmp或/var/log/wtmp目录下。确保这些文件存在且可读,否则可能会导致rwho命令无法获取用户信息。
  3. 远程主机连接:如果要从指定的远程主机上读取登录用户信息,确保能够通过网络连接到该主机。如果远程主机无法连接或不存在,rwho命令可能无法获取到用户信息。
  4. 信息更新延迟:rwho命令显示的用户信息可能会有一定的延迟,因为它从utmp文件中读取数据。如果有新用户登录或已登录用户退出系统,rwho命令可能不会立即反映这些变化。
  5. 不同系统的兼容性:rwho命令在不同的Linux发行版和Unix系统中可能会有一些差异。某些系统可能使用不同的文件名或存储用户信息的方式有所不同。在不同系统上使用rwho命令时,需要查阅相关文档以了解其特定的用法和兼容性。
  6. 安全性考虑:rwho命令可以显示登录用户的信息,包括用户名、远程主机和登录时间。在多用户环境中,这些信息可能包含敏感数据。因此,在使用rwho命令时,需要注意保护用户隐私和系统安全。

总之,在使用rwho命令时,需要确保有足够的权限、正确配置utmp文件、能够连接到远程主机,并且了解其特定的用法和兼容性。同时,要注意保护用户隐私和系统安全。


底层实现

rwho命令底层的实现涉及以下几个步骤:

  1. 读取utmp文件:rwho命令首先读取utmp文件,该文件记录了当前登录用户的信息。utmp文件通常位于/var/run/utmp或/var/log/wtmp目录下。
  2. 解析utmp文件:rwho命令解析utmp文件中的数据,提取出登录用户的用户名、远程主机、登录时间等信息。
  3. 远程主机信息获取(可选):如果指定了远程主机参数,rwho命令会通过网络连接到指定的远程主机,并读取其utmp文件中的登录用户信息。这需要使用相应的网络协议(如rsh、ssh等)来建立连接和传输数据。
  4. 格式化输出:rwho命令将解析得到的登录用户信息进行格式化,并将结果输出到终端。

底层实现中,rwho命令会使用系统调用(如open、read等)来读取和解析utmp文件,以及网络相关的系统调用来连接远程主机(如果有指定的话)。

需要注意的是,utmp文件的格式和存储方式可能因不同的系统而有所不同。因此,rwho命令在不同的Linux发行版和Unix系统中的底层实现可能会有所差异。具体的实现细节可以参考相关的系统文档或源代码。


示例

示例一

显示当前系统上的所有登录用户信息。

$ rwho

示例二

从指定的远程主机上读取utmp文件,并显示登录用户信息。

$ rwho remote_host

示例三

以详细模式显示当前系统上的登录用户信息,包括空闲时间和CPU时间。

$ rwho -l

示例四

以逆序方式显示登录用户信息,最新登录的用户显示在前面。

$ rwho -r

示例五

显示指定用户的登录信息。

$ rwho -u username

示例六

显示指定远程主机上的登录用户信息。

$ rwho -h remote_host

示例七

显示登录用户信息,并按照登录时间进行排序。

$ rwho | sort -k4

用c语言实现


以下是一个用C语言实现rwho命令的示例代码,注释中解释了每个步骤的功能和实现方法:

#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
    struct utmp ut;
    int utmpfd;
    // 打开utmp文件
    utmpfd = open("/var/run/utmp", O_RDONLY);
    if (utmpfd == -1) {
        perror("open");
        return 1;
    }
    // 读取utmp文件中的记录
    while (read(utmpfd, &ut, sizeof(struct utmp)) == sizeof(struct utmp)) {
        // 只处理登陆用户记录
        if (ut.ut_type == USER_PROCESS) {
            // 输出用户名、远程主机和登录时间
            printf("用户名: %s\n", ut.ut_user);
            printf("远程主机: %s\n", ut.ut_host);
            printf("登录时间: %ld\n", ut.ut_tv.tv_sec);
            printf("\n");
        }
    }
    // 关闭utmp文件
    if (close(utmpfd) == -1) {
        perror("close");
        return 1;
    }
    return 0;
}

这个示例代码使用了等头文件来实现rwho命令。它打开utmp文件,读取其中的记录,并筛选出用户登录记录,然后输出用户名、远程主机和登录时间。

需要注意的是,这只是一个简化的示例代码,实际的rwho命令可能需要更多的功能和错误处理。此外,utmp文件的位置和格式可能因不同的系统而有所不同,具体的实现可能需要根据系统的要求进行调整。


结语

在我们的探索过程中,我们已经深入了解了Shell命令的强大功能和广泛应用。然而,学习这些技术只是开始。真正的力量来自于你如何将它们融入到你的日常工作中,以提高效率和生产力。

心理学告诉我们,学习是一个持续且积极参与的过程。所以,我鼓励你不仅要阅读和理解这些命令,还要动手实践它们。尝试创建自己的命令,逐步掌握Shell编程,使其成为你日常工作的一部分。

同时,请记住分享是学习过程中非常重要的一环。如果你发现本博客对你有帮助,请不吝点赞并留下评论。分享你自己在使用Shell命令时遇到的问题或者有趣的经验,可以帮助更多人从中学习。

此外,我也欢迎你收藏本博客,并随时回来查阅。因为复习和反复实践也是巩固知识、提高技能的关键。

最后,请记住:每个人都可以通过持续学习和实践成为Shell编程专家。我期待看到你在这个旅途中取得更大进步!

目录
相关文章
|
7月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
680 3
Linux系统禁用swap
|
7月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1233 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
765 3
Linux系统初始化脚本
|
7月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
918 1
|
7月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1284 1
|
7月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
675 10
|
7月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
691 3
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
10月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
366 60
|
7月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。