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 关键字段解析
每一行输出包含以下信息:
- 用户名:登录用户的账号名。
- 终端类型:如
pts/0
表示伪终端,tty1
表示物理终端。 - 登录来源:IP 地址或主机名,如
192.168.1.100
。 - 登录时间:格式为
日 月 日 时:分
。 - 退出时间:若用户已退出,则显示退出时间;若仍在登录中,则显示
still logged in
。 - 登录时长:括号内的
(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 计算特定用户的登录次数
通过 awk
和 grep
的组合,可以统计某用户(如 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
文件会周期性覆盖旧数据。若需长期保存,可通过以下步骤:
- 修改日志轮转配置文件(如
/etc/logrotate.conf
),增加rotate 30
以保留 30 天记录。 - 使用
logrotate
工具管理日志文件。
五、last 命令与相关工具的联动使用
5.1 与 who
命令对比
who
命令仅显示当前在线用户的登录信息,而 last
展示所有历史记录。两者结合使用可全面了解系统状态:
$ who # 查看当前登录用户
$ last -n 1 # 查看最近一次登录记录
5.2 与 history
命令的区别
history
记录的是当前用户的 Shell 命令历史,而 last
记录的是所有用户的登录行为,两者作用不同但互补。
六、总结与学习建议
Linux last 命令是系统管理员和开发者必备的工具,它通过直观的登录记录帮助用户追踪系统活动。掌握其基本语法、参数组合以及与 grep
、awk
的联动,能够显著提升问题排查和系统审计的效率。
对于初学者,建议从基础用法开始实践,逐步尝试 last -n
、lastb
等进阶功能。中级开发者则可结合脚本编写,将 last
的输出整合到自动化运维流程中。
下一步学习方向:
- 探索
lastlog
命令(显示每个用户的最近一次登录记录)。 - 学习
auditd
工具,实现更细粒度的系统行为监控。
通过持续实践和场景应用,你将发现 Linux last 命令在系统管理中的无限潜力。