Linux last 命令(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

Linux last 命令:记录系统登录的“时光机”

在 Linux 系统管理中,了解用户登录行为是一项基础且重要的技能。无论是排查安全问题、分析系统负载,还是审计操作记录,Linux last 命令都是不可或缺的工具。它能够清晰地展示系统中所有用户的登录历史,甚至包括登录时间、终端类型和登录来源等细节。对于编程初学者和中级开发者而言,掌握这一命令不仅能提升系统管理能力,还能为日后的运维工作打下坚实基础。


一、last 命令的基础概念与核心功能

last 命令通过读取系统的 /var/log/wtmp 日志文件,将用户登录、退出以及其他系统事件(如系统重启)以时间倒序的方式呈现出来。它本质上是一个“登录历史记录浏览器”,就像一本记录系统活动的“时光机日志簿”。

1.1 基础语法与基本用法

核心语法

last [OPTIONS] [USERNAME] [TTY]  
  • 基础示例
    直接输入 last 命令,系统会输出所有用户的登录记录,包括当前在线的用户(以 still logged in 标记):
    $ last  
    username   pts/0        192.168.1.100   Mon Oct  3 10:15   still logged in  
    username   pts/1        192.168.1.100   Mon Oct  3 09:30 - 10:00  (00:30)  
    reboot   system boot  5.15.0-43-generic Mon Oct  3 09:00 - 12:00  (03:00)  
    

1.2 关键字段解析

每一行输出包含以下信息:

  1. 用户名:登录用户的账号名。
  2. 终端类型:如 pts/0 表示伪终端,tty1 表示物理终端。
  3. 登录来源:IP 地址或主机名,如 192.168.1.100
  4. 登录时间:格式为 日 月 日 时:分
  5. 退出时间:若用户已退出,则显示退出时间;若仍在登录中,则显示 still logged in
  6. 登录时长:括号内的 (HH:MM) 表示登录持续时间。

二、last 命令的进阶用法:参数与场景应用

2.1 过滤特定用户或终端的登录记录

通过指定用户名或终端名,可以快速定位目标记录:

  • 示例 1:查看特定用户(如 john)的登录历史
    $ last john  
    
  • 示例 2:查看终端 pts/2 的登录记录
    $ last -i pts/2  
    

2.2 限制输出行数:-n 参数

若登录记录过多,可通过 -n 参数指定显示行数,避免屏幕信息过载。例如,显示最近 3 次登录记录:

$ last -n 3  

2.3 包含失败登录尝试:lastb 命令

默认情况下,last 不显示失败的登录尝试。若需查看这些记录,可使用 lastb 命令(读取 /var/log/btmp 文件):

$ lastb  

2.4 显示详细信息:-x 参数

通过 -x 参数,last 将显示系统事件(如重启、关机)和更多细节(如登录时的进程 ID):

$ last -x  

2.5 结合 grep 过滤关键词

若需进一步筛选,可将 last 输出通过管道符(|)传递给 grep

  • 示例:查找所有来自 192.168.1.50 的登录记录
    $ last | grep "192.168.1.50"  
    

三、last 命令的高级技巧与实战案例

3.1 计算特定用户的登录次数

通过 awkgrep 的组合,可以统计某用户(如 admin)的登录次数:

$ last admin | grep -v "wtmp" | wc -l  
  • 解释
    • grep -v "wtmp" 排除日志文件头部信息。
    • wc -l 统计行数,即登录次数。

3.2 过滤并格式化输出:-w 参数

使用 -w 参数可显示完整的登录来源信息(如域名而非 IP 地址),并扩展字段宽度:

$ last -w  

3.3 结合 awk 提取关键信息

若需导出登录记录到文件或进一步处理,可用 awk 提取特定字段。例如,提取用户名和登录 IP:

$ last | awk '{print $1 " " $3}'  

四、常见问题与解决方案

4.1 问题 1:last 命令输出为空

可能原因

  • /var/log/wtmp 文件被意外删除或权限不足。
  • 系统未安装 util-linux 包(包含 last 工具)。

解决方法

$ sudo apt install util-linux      # 安装缺失的包  
$ sudo touch /var/log/wtmp        # 重新创建日志文件  
$ sudo chmod 644 /var/log/wtmp    # 设置正确权限  

4.2 问题 2:如何永久保留登录记录?

默认情况下,wtmp 文件会周期性覆盖旧数据。若需长期保存,可通过以下步骤:

  1. 修改日志轮转配置文件(如 /etc/logrotate.conf),增加 rotate 30 以保留 30 天记录。
  2. 使用 logrotate 工具管理日志文件。

五、last 命令与相关工具的联动使用

5.1 与 who 命令对比

who 命令仅显示当前在线用户的登录信息,而 last 展示所有历史记录。两者结合使用可全面了解系统状态:

$ who       # 查看当前登录用户  
$ last -n 1 # 查看最近一次登录记录  

5.2 与 history 命令的区别

history 记录的是当前用户的 Shell 命令历史,而 last 记录的是所有用户的登录行为,两者作用不同但互补。


六、总结与学习建议

Linux last 命令是系统管理员和开发者必备的工具,它通过直观的登录记录帮助用户追踪系统活动。掌握其基本语法、参数组合以及与 grepawk 的联动,能够显著提升问题排查和系统审计的效率。

对于初学者,建议从基础用法开始实践,逐步尝试 last -nlastb 等进阶功能。中级开发者则可结合脚本编写,将 last 的输出整合到自动化运维流程中。

下一步学习方向

  • 探索 lastlog 命令(显示每个用户的最近一次登录记录)。
  • 学习 auditd 工具,实现更细粒度的系统行为监控。

通过持续实践和场景应用,你将发现 Linux last 命令在系统管理中的无限潜力。

最新发布