journalctl 不支持直接按 tty 过滤,但可通过 session=c1(查 loginctl list-sessions 获取)、uid=1000 _tty=/dev/tty1 或组合字段间接定位 tty 相关日志。

journalctl 本身不直接按 TTY(如 tty1、tty2)过滤操作记录,因为 systemd 日志不以 TTY 为原生字段索引。但你可以通过关联的会话(session)、用户(UID)、进程(PID)或终端设备路径间接定位,尤其适用于登录 shell、sudo 命令、交互式命令执行等场景。
查当前用户在指定 TTY 的会话日志
TTY 登录会触发一个 systemd login session,session ID 通常与 TTY 名称对应(如 tty1 → c1,tty2 → c2)。先确认会话编号:
- 运行 loginctl list-sessions 查看所有活跃会话及对应 TTY
- 找到目标 TTY 对应的 SESSION 编号(如 c1)
- 用该编号过滤日志:journalctl SESSION=c1
这条命令会显示该会话生命周期内的所有日志:用户登录、shell 启动、sudo 使用、命令执行(若服务/程序主动记录)、登出等。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
查某 TTY 上特定用户的全部操作痕迹
如果知道登录用户名(如 alice),可结合 UID 和 TTY 设备路径进一步缩小范围:
- 先查用户 UID:id -u alice(假设返回 1000)
- 查该 UID 在该 TTY 的日志:journalctl UID=1000 _TTY=/dev/tty1
- _TTY 是 journal 的标准字段,只对由 login 或 getty 启动的进程有效(即真实终端登录,非 SSH 或图形界面)
查某次 TTY 登录后执行的关键命令(需配合其他工具)
journalctl 不记录命令行文本本身(那是 shell 的职责),但能帮你定位上下文:
- 用 journalctl SESSION=c1 -o verbose | grep MESSAGE 看详细消息字段,可能含 “Started session”、“New session”、“PAM authentication” 等线索
- 查 sudo 操作:journalctl _TTY=/dev/tty1 | grep -i "sudo\|authorization"
- 查 shell 启动:journalctl _TTY=/dev/tty1 UNIT=getty@tty1.service -n 20(getty 日志里常含后续 spawn 的 bash/zsh 进程 PID)
真正要看到输入的命令,得查用户家目录下的 ~/.bash_history(需该 shell 已退出并刷新历史),journalctl 只提供“谁、何时、在哪条终端、是否成功登录/提权”的审计证据。
注意事项
- 普通用户默认只能查自己的会话日志;查他人或系统级 TTY 日志需 sudo
- 日志必须已启用持久化(/var/log/journal/ 存在且 Storage=persistent 在 /etc/systemd/journald.conf 中)
- WSL 或容器环境通常禁用 journald 持久化,journalctl --list-boots 返回空时即无历史会话可查










