最常用可靠方式是journalctl配合grep,需加--no-pager才能管道过滤;分页模式下可用/键搜索;-o cat可简化输出便于grep;注意权限、引号及避免冗余命令。

直接用 journalctl 配合 grep 是最常用、最可靠的方式。journalctl 本身不内置关键词高亮或全文检索功能,但输出可管道传递,结合 grep 能精准定位含指定字符串的日志行。
用 --no-pager + grep 精准筛选
默认 journalctl 启用分页器(如 less),无法直接用管道过滤。必须加 --no-pager 才能将日志输出到 stdout,再交给 grep 处理:
-
journalctl -u nginx.service --no-pager | grep -i "timeout"—— 查 nginx 服务中含 timeout 的日志(-i 忽略大小写) -
journalctl -b --no-pager | grep -E "(fail|error|denied)"—— 查本次启动中多个关键词之一 -
journalctl --since "1 hour ago" --no-pager | grep "Connection refused"—— 查一小时内出现该错误的记录
在分页模式下临时搜索(适合交互查看)
如果已运行 journalctl -u sshd.service 进入分页界面,可直接按 / 键,然后输入关键词(如 /Failed),回车即可跳转到下一个匹配行。支持正则表达式,比如 /authentication.*failure。
- 按 n 查找下一个匹配项,N 反向查找
- 搜索区分大小写,如需忽略,先输入
:set ignorecase(仅当前会话生效) - 退出搜索后,仍可用 ↑/↓ 浏览,按 q 退出
用 -o cat 简化输出再过滤
如果只关心日志消息正文(不含时间戳、服务名等元数据),可用 -o cat 降低干扰,更适合 grep:
journalctl -u docker.service -o cat --no-pager | grep -i "image not found"- 注意:-o cat 会丢失结构信息,排查来源时建议保留默认格式
避免常见陷阱
- 不要用
cat $(journalctl ...)或journalctl ... | cat | grep—— 冗余且可能出错 - 关键词含空格时,grep 命令里要用引号包裹,如
grep "Out of memory" - 普通用户查系统级日志可能权限不足,必要时加 sudo,例如
sudo journalctl --no-pager | grep "systemd-journald"











