【Shell 命令集合 系统管理 】Linux 显示系统中所有用户的登录记录 last命令 使用指南

简介: 【Shell 命令集合 系统管理 】Linux 显示系统中所有用户的登录记录 last命令 使用指南

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


描述


last命令是Linux系统中的一个命令,用于显示系统中所有用户的登录记录。它会从/var/log/wtmp文件中读取数据,并将登录信息以表格形式展示出来。具体来说,last命令可以显示以下信息:

  1. 用户名:显示登录的用户名。
  2. 终端:显示用户登录所使用的终端设备,如tty1、pts/0等。
  3. IP地址:显示用户登录时的IP地址。
  4. 登录时间:显示用户登录的具体时间。
  5. 登出时间:显示用户登出的具体时间。
  6. 登录持续时间:显示用户登录的持续时间。

通过查看last命令的输出,系统管理员可以了解到系统中各个用户的登录情况,包括登录的时间、终端设备以及登录持续时间等信息。这对于系统管理员来说是非常有用的,可以帮助他们追踪和监控系统的登录活动,及时发现异常登录行为。此外,last命令还可以用于检查用户是否按照规定的时间段登录系统,以及查看用户的登录历史记录等。


语法格式

last [选项] [用户名]

参数说明

  • -n 数字:指定显示最近的登录记录数量。
  • -t 时间戳:显示指定时间戳之后的登录记录。
  • -i:显示详细的登录信息,包括IP地址和登录持续时间。
  • -f 文件:从指定文件中读取登录记录。
  • 用户名:显示指定用户的登录记录。

错误情况

  • 如果/var/log/wtmp文件不存在或无法访问,last命令将无法获取登录记录。
  • 如果没有指定用户名,且当前用户不是root用户,则只能查看自己的登录记录。
  • 如果指定的用户名不存在或没有登录记录,last命令将不会显示任何内容。

请注意,last命令需要root用户或具有读取/var/log/wtmp文件权限的用户才能正常运行。

注意事项

在使用Linux Shell中的last命令时,有一些注意事项需要考虑:

  1. 需要root权限或特定权限:last命令需要root权限或具有读取/var/log/wtmp文件的权限才能正常运行。因此,非特权用户可能无法查看所有用户的登录记录。
  2. wtmp文件的可用性:last命令从/var/log/wtmp文件中读取登录记录。确保该文件存在且可读取。如果/var/log/wtmp文件被删除或权限设置不正确,将无法获取登录记录。
  3. 参数的正确使用:last命令支持多种参数,如-n、-t、-i等。确保正确使用参数以获得所需的结果。例如,使用-n参数指定要显示的登录记录数量,使用-t参数指定时间戳等。
  4. 用户名的准确性:如果指定了用户名参数,确保用户名的准确性。如果提供的用户名不存在或没有登录记录,last命令将不会显示任何内容。
  5. 登录记录的时间戳:last命令显示的登录时间戳是从/var/log/wtmp文件中读取的。请注意,这些时间戳可能与实际登录时间有所不同,因为它们是由系统记录的。
  6. 安全性问题:last命令可以显示用户的登录信息,包括IP地址。在某些情况下,这可能涉及到安全性问题。确保在必要时保护好/var/log/wtmp文件,并仅将登录信息提供给有权访问的人员。
  7. 检查登录异常:通过查看last命令的输出,可以检查是否有异常登录行为。如果发现未经授权的登录记录,应及时采取相应的安全措施。

总之,在使用last命令时,需要注意权限、文件可用性、参数使用、用户名准确性、时间戳、安全性和异常登录等方面的问题,以确保正确获取和分析登录记录。


底层实现

last命令底层的实现涉及到/var/log/wtmp文件的读取和解析。下面是大致的底层实现过程:

  1. 打开/var/log/wtmp文件:last命令首先会尝试打开/var/log/wtmp文件,该文件是系统记录登录和注销事件的二进制文件。
  2. 解析wtmp文件:last命令会读取/var/log/wtmp文件的内容,并按照特定的格式进行解析。wtmp文件中的数据是按照固定的记录结构进行存储的,包含了每个用户的登录和注销事件的详细信息。
  3. 解析登录记录:last命令会解析每个登录记录的相关信息,如用户名、终端设备、登录时间、IP地址等。它会根据记录的结构和字段的定义,逐个解析登录记录。
  4. 过滤和排序:last命令会根据用户指定的参数,如用户名、时间戳、数量等,对解析出的登录记录进行过滤和排序。它会根据参数的要求,筛选出符合条件的登录记录。
  5. 显示结果:最后,last命令会将过滤和排序后的登录记录以表格形式显示在终端上。它会按照一定的格式将用户名、终端设备、IP地址、登录时间和注销时间等信息进行展示。

需要注意的是,具体的实现细节可能因不同的Linux发行版而有所差异。但通常都会涉及到对wtmp文件的读取和解析过程,以及对登录记录的过滤和排序操作。通过这些步骤,last命令能够提供用户登录记录的详细信息。


示例

示例一

显示所有用户的登录记录:

$ last

示例二

显示指定用户的登录记录:

$ last username

示例三

显示最近10条登录记录:

$ last -n 10

示例四

显示指定时间段内的登录记录:

$ last -t YYYYMMDDHHMMSS

示例五

显示指定终端设备的登录记录:

$ last tty1

示例六

显示登录记录的详细信息,包括IP地址和登录持续时间:

$ last -i

示例七

将登录记录输出到指定文件中:

$ last > login_history.txt

用c语言实现


下面是一个用C语言实现last命令的示例代码,代码中包含了注释以解释每个步骤的作用:

#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
    struct utmp current_record;  // 用于存储当前记录的结构体
    int utmp_fd;  // utmp文件的文件描述符
    // 打开utmp文件
    utmp_fd = open("/var/log/wtmp", O_RDONLY);
    if (utmp_fd == -1) {
        perror("Error opening /var/log/wtmp");
        return 1;
    }
    // 读取并解析utmp文件中的记录
    while (read(utmp_fd, &current_record, sizeof(struct utmp)) == sizeof(struct utmp)) {
        // 过滤掉非用户登录记录
        if (current_record.ut_type == USER_PROCESS) {
            // 打印用户名、终端设备、登录时间等信息
            printf("Username: %s\n", current_record.ut_user);
            printf("Terminal: %s\n", current_record.ut_line);
            printf("Login Time: %ld\n", current_record.ut_tv.tv_sec);
            printf("\n");
        }
    }
    // 关闭utmp文件
    if (close(utmp_fd) == -1) {
        perror("Error closing /var/log/wtmp");
        return 1;
    }
    return 0;
}

请注意,此示例仅演示了如何读取utmp文件并打印用户登录记录的基本信息。要实现更多功能,如根据参数过滤记录、显示IP地址和登录持续时间等,需要进一步解析utmp文件的内容,并根据需要进行处理。此外,此示例代码可能需要在特权用户下运行,以便访问/var/log/wtmp文件。


结语

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

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

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

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

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

目录
相关文章
|
9月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
9月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
845 9
|
9月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
870 2
|
11月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1247 1
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
334 18
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
401 4
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
667 3
|
运维 网络协议 Linux
Linux - last 命令
Linux - last 命令
367 0
Linux - last 命令
|
运维 Linux 网络安全
Linux - last 命令(Mac 电脑)
Linux - last 命令(Mac 电脑)
549 0
Linux - last 命令(Mac 电脑)
|
Linux
12.26 Linux查看过去登陆的用户信息(last和lastlog命令)
前面,我们已经学了使用 w 或 who 命令查看当前登陆系统的用户信息,但如果原先登录的用户现在已经退出登录,那么是否还能查看呢?当然可以,这就需要使用 last 和 lastlog 命令。
1123 0
12.26 Linux查看过去登陆的用户信息(last和lastlog命令)