如何在Linux中仅提取last命令显示的历史登录记录日期
提取last命令登录记录日期字段的可行方案
last默认输出的登录记录结构固定,直接用系统自带的文本处理工具就能提取日期字段,不需要依赖额外工具,以下是可直接用的实现:
- 快速提取默认格式下的日期
适配默认英文locale的last输出,自动过滤末尾的wtmp日志统计行,直接提取周、月、日字段:
如果需要同时带上登录时间点,调整打印字段为last | awk '!/^wtmp/ && NF {print $4, $5, $6}'$4, $5, $6, $7即可。 - 脚本兼容方案(规避列错位/语言环境问题)
不同发行版、不同中文/非英文locale下last的列位置可能偏移,推荐用last内置的iso时间格式参数,输出标准结构化时间后再提取,拿到YYYY-MM-DD格式的标准日期,稳定性更高,适合写进生产脚本:last --time-format=iso | awk '!/^wtmp/ && NF {print substr($4, 1, 10)}' - 提取所有出现过登录行为的去重日期
如果不需要逐条对应记录,只想统计存在登录行为的日期,追加去重排序逻辑即可:last --time-format=iso | awk '!/^wtmp/ && NF {print substr($4, 1, 10)}' | sort -u
注意:
last的数据源是/var/log/wtmp二进制日志,如果该日志被轮转、手动清空过,你只能拿到当前日志留存周期内的登录记录,无法提取已经被清理的历史登录数据。
内容的提问来源于stack exchange,提问作者KostasA
相关产品推荐
相关产品推荐

