journalctl看起来像是一个查看日志的好工具,但我被困在一个简单的问题上:我想查看所有包含短语的 cron 消息update-ipsets
。
我当然可以
journalctl -u cron.service | grep update-ipsets
但是你失去了 journalctl 输出的所有其他好处(颜色编码、自动分页、实时视图等)
我试过了:
journalctl -u cron.service MESSAGE=update-ipsets
journalctl -u cron.service "MESSAGE=*update-ipsets*"
journalctl -u cron.service "MESSAGE=.*update-ipsets.*"
journalctl -u cron.service "MESSAGE=/.*update-ipsets.*/"
而且您不想通过点击tab后进行试验MESSAGE=
- 挂起 (zsh/Debian Jessie) shell 并且Ctrl-C也没有帮助!
我有点不敢相信它没有内置这个基本功能,所以我确定我一定错过了什么?
谢谢。
由于
systemctl --version
版本237
可能有带有-g/--grep
开关的 grep 模式支持,但它必须在PRCE2
支持的情况下编译(它似乎不包含在 Debian Buster中,>=242
是必需的,可以安装 frombuster-backports
)如果没有 grep 支持,您仍然可以切换到
cat
输出模式并使用grep
's 匹配:如果您想要一个寻呼机,最好将结果通过管道传输到
less
. 您可以使用反转匹配-v / --invert-match
来排除某些消息另一种选择是使用
json
格式:给出详细的输出,单行
使用
jq
您可以轻松地归档消息:目前,journalctl 不支持字段匹配中的模式或通配符。
grep
是您的最佳选择。我遇到了同样的问题,我认为只有在作为参数传递
journalctl
时才搜索 VALUE 的完全匹配。NAME=VALUE
我的调查:
手册页
从
journalctl(1)
匹配的描述中没有提到该模式:
-u
手册页仅在描述选项时引用模式。源代码
函数
fnmatch
insrc/journal
仅在搜索单位时使用。调试日志ctl
启用调试输出,您可以看到模式仅在使用
-u
.所有匹配都被视为精确匹配,包括
UNIT
:使用 journalctl 版本 247.3-7(作为 systemd),--grep(或 -g)选项允许过滤日志中 MESSAGE 字段包含字符串或匹配正则表达式的行。
man journalctl 说:
journalctl 手册和 pcre2pattern 中都没有说的是,正则表达式必须用单引号或双引号括起来,并且不能有其他字符!
如果您以 root 身份或使用 sudo 运行以下命令:
您将获得所有记录的块 ID 的列表以及被防火墙阻止的请求...
希望这有帮助!