Linux系统之lslogins 命令详解
lslogins 命令详解
一、命令概述
lslogins
是用于显示系统中已知用户信息的工具,通过解析 wtmp
(登录日志)、btmp
(失败登录日志)、/etc/passwd
、/etc/shadow
(需root权限)等文件,输出用户的基本信息、登录历史、密码状态(如过期时间)等。其核心功能是集中展示用户账户的关键属性,支持按用户、组筛选,适配不同输出格式,适用于系统用户管理、安全审计(如查看失败登录)和账户状态核查。
二、语法格式
lslogins [选项] [-s|-u[=UID]] [-g groups] [-l logins]
- 参数说明:
- 选项控制信息类型(如密码过期、失败登录)、筛选条件(如组、登录名)、输出格式等。
-s
/-u
分别指定显示系统账户/用户账户(-u=UID
可指定具体UID)。-g groups
仅显示属于指定组的用户(组名/ID,逗号分隔)。-l logins
仅显示指定登录名/UID的用户(逗号分隔)。
三、核心功能
lslogins
整合多源用户信息,核心功能包括:
- 基础用户信息:用户名、UID、GID、家目录、默认shell等(来自
/etc/passwd
)。 - 登录相关信息:最后登录时间、IP地址、失败登录记录(来自
wtmp
、btmp
)。 - 密码与账户状态:最后密码更改时间、账户过期日期(来自
/etc/shadow
,需root权限)。 - 筛选与分类:区分系统账户(低UID)和普通用户账户,按组或登录名筛选结果。
- 灵活输出:支持冒号分隔、
NAME=VALUE
导出、指定列等格式,适配手动查看或脚本解析。
四、选项详解
1. 信息类型控制(显示特定数据)
选项 | 长选项 | 说明 |
---|---|---|
-a | --acc-expiration | 显示密码最后更改日期和账户过期日期(需root权限,依赖 /etc/shadow )。 |
-f | --failed | 显示用户最后失败的登录尝试信息(如时间、来源IP)。 |
-L | --last | 显示用户最后登录会话信息(如登录时间、终端、IP)。 |
-p | --pwd | 显示与密码登录相关的信息(通常与 -a 、-f 、-L 结合使用)。 |
2. 筛选用户(按组、登录名、账户类型)
选项 | 长选项 | 说明 |
---|---|---|
-s | --system-accs | 仅显示系统账户:默认UID < 1000(不含),排除 nobody /nfsnobody (UID 65534),具体范围由 /etc/login.defs 中的 SYS_UID_MIN 和 SYS_UID_MAX 定义。 |
-u[=UID] | --user-accs[=UID] | 仅显示普通用户账户:默认UID ≥ 1000,范围由 /etc/login.defs 中的 UID_MIN 和 UID_MAX 定义;-u=UID 可指定单个UID的用户。 |
-g groups | --groups=groups | 仅显示属于 groups (组名或GID,逗号分隔)的用户。 |
-l logins | --logins=logins | 仅显示 logins (用户名或UID,逗号分隔)指定的用户。 |
3. 输出格式控制
选项 | 长选项 | 说明 |
---|---|---|
-c | --colon-separate | 用冒号分隔每个用户的信息(默认用换行分隔)。 |
-e | --export | 以 NAME=VALUE 格式输出(便于脚本解析,如 USER=root UID=0 )。 |
-n | --newline | 每条信息单独占一行(而非列对齐)。 |
--noheadings | - | 不显示表头(列标题),适合批量处理。 |
--notruncate | - | 不截断长文本(如长用户名、家目录路径)。 |
-o list | --output list | 指定输出列(用逗号分隔列名,如 USER,UID,LAST_LOGIN ),通过 lslogins --help 查看支持的列。 |
-r | --raw | 原始输出(无列对齐,字段直接拼接)。 |
--time-format type | - | 日期显示格式:short (默认,简洁格式)、full (完整格式)、iso (ISO 8601格式)。 |
4. 其他选项
选项 | 长选项 | 说明 |
---|---|---|
-G | --supp-groups | 显示用户所属的附加组信息。 |
-h | --help | 显示帮助信息(含支持的输出列)并退出。 |
-V | --version | 显示版本信息并退出。 |
--btmp-file path | - | 指定 btmp 日志文件的替代路径(默认 /var/log/btmp )。 |
--wtmp-file path | - | 指定 wtmp 日志文件的替代路径(默认 /var/log/wtmp )。 |
五、核心输出信息
lslogins
输出的关键信息(列)包括:
- 基础用户属性:
USER
(用户名)、UID
(用户ID)、GID
(主组ID)、HOME
(家目录)、SHELL
(默认shell)。 - 登录相关:
LAST_LOGIN
(最后登录时间)、TTY
(终端)、IP
(登录IP)、FAILED_LOGIN
(最后失败登录时间)。 - 密码与账户状态:
PWD_CHANGE
(最后密码更改时间)、PWD_EXPIRE
(密码过期时间)、ACC_EXPIRE
(账户过期时间,需-a
和root权限)。 - 组信息:
GROUP
(主组)、SUPP_GROUPS
(附加组,需-G
)。
六、使用示例
1. 显示所有用户的基本信息
lslogins # 输出所有用户的用户名、UID、GID、家目录等基础信息
2. 查看特定用户的详细信息(含最后登录)
lslogins -l root,1000 -L # 显示root和UID=1000的用户,包含最后登录会话
3. 显示系统账户(低UID)
lslogins -s # 仅显示系统账户(UID范围由/etc/login.defs定义)
4. 查看用户密码状态(需root,含过期时间)
sudo lslogins -a -l alice # 显示alice的密码更改时间、账户过期日期(需root)
5. 显示失败登录记录
lslogins -f # 输出所有用户的最后失败登录尝试(时间、IP等)
6. 以NAME=VALUE格式导出用户信息(适合脚本)
lslogins -e -l bob # 以bob=VALUE格式输出bob的信息
七、注意事项
-
权限要求:
- 查看密码相关信息(如
-a
选项)需root
权限(因需访问/etc/shadow
)。 - 普通用户可查看基础用户信息,但部分敏感字段(如密码过期时间)会显示为
*
或空。
- 查看密码相关信息(如
-
账户分类依据:
- 系统账户(
-s
)和普通用户账户(-u
)的UID范围由/etc/login.defs
中的SYS_UID_MIN
、SYS_UID_MAX
、UID_MIN
、UID_MAX
定义,默认系统账户UID < 1000(排除nobody
)。
- 系统账户(
-
日志文件:
- 登录历史(
-L
)和失败登录(-f
)依赖wtmp
和btmp
日志,若日志被清理,相关字段可能为空。
- 登录历史(
-
输出列自定义:
脚本中建议用-o
指定列(如lslogins -o USER,UID,LAST_LOGIN --noheadings
),避免依赖默认格式。