【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编程专家。我期待看到你在这个旅途中取得更大进步!

目录
相关文章
|
9天前
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
59 23
|
8天前
|
消息中间件 NoSQL Linux
Redis的基本介绍和安装方式(包括Linux和Windows版本),以及常用命令的演示
Redis(Remote Dictionary Server)是一个高性能的开源键值存储数据库。它支持字符串、列表、散列、集合等多种数据类型,具有持久化、发布/订阅等高级功能。由于其出色的性能和广泛的使用场景,Redis在应用程序中常作为高速缓存、消息队列等用途。
96 16
|
26天前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
92 25
|
2月前
|
Linux
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
177 56
|
23天前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
43 18
|
1月前
|
Linux 定位技术
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
125 24
|
1月前
|
安全 Shell Linux
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
110 3
Linux系统之su命令的基本使用
|
1月前
|
Linux
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
67 15
|
1月前
|
监控 数据可视化 Java
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
76 13
|
2月前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
136 20