【Shell 命令集合 系统管理 】Linux 显示目前登入系统的用户信息 w命令 使用指南

简介: 【Shell 命令集合 系统管理 】Linux 显示目前登入系统的用户信息 w命令 使用指南

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


描述


w命令是Linux系统中的一个实用工具,用于显示当前系统上登录的用户信息。它提供了关于每个用户的详细信息,包括登录名、终端、登录时间、运行时间和所执行的命令。

w命令的输出通常包含以下列:

  1. 用户名(USER):显示当前登录的用户名。
  2. 终端(TTY):显示用户所使用的终端设备,例如tty1、pts/0等。
  3. 远程主机(FROM):如果用户是通过远程连接登录的,则显示远程主机的IP地址或主机名。
  4. 登录时间(LOGIN@):显示用户登录系统的时间。
  5. 登录时长(IDLE):显示用户最后一次活动以来的时间,如果用户一直处于活动状态,则显示运行时间。
  6. JCPU:显示所分配给用户的CPU时间。
  7. PCPU:显示所分配给进程的CPU时间。
  8. 命令(WHAT):显示用户当前正在执行的命令或进程。

通过w命令,系统管理员可以方便地查看当前登录的用户信息,包括他们的活动状态、登录时间和所执行的命令。这对于监控系统的使用情况、检查用户活动和排查问题非常有用。


语法格式

w [选项] [用户名]

参数说明

  • -h, --no-header:不显示标题行。
  • -u, --users:显示用户的进程和CPU使用情况。
  • -s, --short:以短格式显示信息,只显示用户名、终端和登录时间。
  • -f, --from:显示用户的登录来源。
  • -i, --ip-addr:显示用户的IP地址。
  • -V, --version:显示w命令的版本信息。
  • 用户名:只显示指定用户名的信息。

错误情况

  • 如果没有登录用户,则w命令将不会输出任何信息。
  • 如果指定的用户名不存在或没有登录用户与该用户名相关联,则会显示相应的错误信息。
  • 如果使用无效的选项或参数,则会显示错误信息并给出相应的提示。

注意:在某些Linux发行版中,w命令可能需要root或sudo权限才能正常工作。否则,可能会收到权限不足的错误信息。

注意事项

在使用Linux Shell的w命令时,有一些注意事项需要牢记:

  1. 权限要求:w命令通常需要root或sudo权限才能正常工作,因为它涉及到查看其他用户的信息。如果没有足够的权限,可能会收到权限不足的错误信息。
  2. 输出信息:w命令输出的信息非常详细,包含了用户的登录时间、活动状态、终端等信息。在查看信息时,要确保对于其他用户的信息是有权限查看的,并且要遵守隐私保护的原则。
  3. 参数使用:根据自己的需求选择合适的参数来使用w命令。例如,使用-h参数可以隐藏标题行,使用-u参数可以查看用户的进程和CPU使用情况等。
  4. 用户名指定:可以通过在命令后面指定用户名来只显示特定用户的信息。但要注意,只能查看当前登录用户或具有相同权限的其他用户的信息。如果指定的用户名不存在或没有登录用户与该用户名相关联,则会显示相应的错误信息。
  5. 空闲时间和活动状态:w命令输出的信息中包含了用户的空闲时间和活动状态。空闲时间表示用户最后一次活动以来的时间,活动状态可以是idle(空闲)、running(运行中)或unknown(未知)。通过观察空闲时间和活动状态,可以了解用户的活动情况。
  6. 版本信息:可以使用-V参数查看w命令的版本信息。
  7. 结果解读:在查看w命令的输出结果时,要注意理解各列的含义和格式。例如,终端可能显示为tty1、pts/0等,登录时间可能以24小时制显示,活动状态可能显示为idle、running或unknown等。

总之,在使用w命令时,要确保有足够的权限,遵守隐私保护原则,并正确理解和解读命令的输出结果。这样才能更好地利用w命令来监控和管理系统中的用户信息。


底层实现

w命令底层是通过读取系统文件和进程信息来获取用户登录信息的。具体实现方式如下:

  1. w命令首先读取系统文件/var/run/utmp,该文件记录了当前登录用户的信息。它包含了每个登录用户的用户名、终端设备、登录时间等。
  2. w命令还会读取系统文件/var/log/wtmp,该文件记录了用户登录和注销的历史记录。通过读取wtmp文件,w命令可以获取用户的登录历史信息。
  3. w命令通过读取/proc目录下的进程信息,获取用户的进程和CPU使用情况。它会遍历/proc目录下的每个进程文件夹,读取相应的进程状态文件,从中提取出用户的进程信息。
  4. w命令根据读取到的信息,进行格式化处理,并输出到终端。

需要注意的是,w命令的具体实现可能会因不同的Linux发行版而有所差异,但基本原理是相似的。它通过读取系统文件和进程信息,获取用户登录和活动情况的详细信息,并将其展示给用户。这样,系统管理员就可以方便地监控和管理系统中的用户活动。


示例

示例一

1. w

输出当前系统上所有登录用户的信息。

示例二

2. w -h

以简洁模式显示当前系统上所有登录用户的信息,不显示标题行。

示例三

3. w -u

显示当前系统上所有登录用户的详细信息,包括用户的进程和CPU使用情况。

示例四

4. w -s

以短格式显示当前系统上所有登录用户的信息,只显示用户名、终端和登录时间。

示例五

5. w -f

显示当前系统上所有登录用户的详细信息,包括用户名、终端、登录时间、登录时长和所执行的命令。

示例六

6. w user1

只显示用户名为user1的用户的信息。

示例七

7. w -i

显示当前系统上所有登录用户的详细信息,并在空闲时间列中显示用户的活动状态(idle、running或unknown)。


用c语言实现


以下是一个用C语言实现w命令的示例代码:

#include <stdio.h>
#include <utmp.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
int main() {
    struct utmp *ut;
    time_t currentTime;
    char timeString[20];
    
    // 打开utmp文件
    FILE *fp = fopen("/var/run/utmp", "r");
    if (fp == NULL) {
        perror("Error opening utmp file");
        exit(1);
    }
    
    // 读取utmp文件中的记录
    while ((ut = getutent()) != NULL) {
        // 过滤掉非登录记录
        if (ut->ut_type != USER_PROCESS) {
            continue;
        }
        
        // 获取登录时间
        currentTime = ut->ut_tv.tv_sec;
        strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M", localtime(&currentTime));
        
        // 输出用户名、终端和登录时间
        printf("%-8s %-12s %s\n", ut->ut_user, ut->ut_line, timeString);
    }
    
    // 关闭utmp文件
    fclose(fp);
    
    return 0;
}

这段代码使用了头文件中的结构体struct utmp和函数getutent(),以及头文件中的函数localtime()strftime()来处理时间格式化。代码的主要逻辑是打开utmp文件,读取其中的记录,并根据记录的类型过滤非登录记录。然后,获取登录时间并格式化输出用户名、终端和登录时间。

需要注意的是,这段代码仅实现了w命令的一小部分功能,只能输出登录用户的用户名、终端和登录时间,并没有包括其他信息,如空闲时间、活动状态等。要完整实现w命令的功能,还需要读取其他系统文件和进程信息,并进行相应的处理。


结语

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

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

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

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

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

目录
相关文章
|
4天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
4天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2
|
4天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
21 3
|
7天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
33 6
|
5天前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
15 1
|
NoSQL Shell 数据库
MongoDB通过Shell 实现集合的日常归档
MongoDB通过Shell 实现集合的日常归档 1.MongoDB数据归档的意义和其他类型的数据库一样,归档对MongoDB同样重要。通过归档,可以保持集合中合适的数据量,对数据库的性能是一种保障,也就是大家常说的数据冷热分离。
2028 0
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
18天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
42 2
6种方法打造出色的Shell脚本
|
4天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
14 1
|
9天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
23 2