systemd是Linux上广泛采用的init系统之一。systemd的主要优点是它能够管理系统日志。它将所有内核消息和用户进程收集到一个名为Journal的日志中。journald是捕获和管理二进制文件中日志的守护程序。这个守护程序的主要优点是以结构化和索引的形式存储数据,使其易于通过journalctl实用程序进行访问和分析。
在本指南中,我将介绍如何使用不同的命令行实用程序在Linux上查看systemd日志。
注意:本指南中提到的命令是在Ubuntu上执行的。它们可以在system d init系统附带的所有Linux发行版上正常运行。
查看systemctl的方法
在Linux上查看systemd日志有两种方法:
- 通过systemctl命令
- 通过Jouralctl命令
systemctl提供最新的服务特定日志,而journalctl提供所有服务和特定服务的深入系统范围日志。
我将探索这两个实用程序来查看systemd日志。但首先,让我们了解systemctl和journalctl命令之间的关键区别。
什么是systemctl
Systemctl是一个命令行实用程序,用于管理系统服务,如启用或禁用服务以及查看状态。系统状态命令还在输出的底部打印服务的几个日志行,该日志是在最近一次引导之后的。但是,服务的这些日志行仅来自当前引导之后。
什么是journalctl
journalctl是一个命令行实用程序,用于打印systemd收集的日志。与systemctl相比,它提供了带有过滤选项的详细输出。此实用程序旨在:
- 读取日志(最早的日志排在第一位)
- 监测器日志
- 根据时间、服务或用户过滤日志
System d从内核、服务和守护进程收集日志,并将它们存储在一个集中的位置。
如何使用systemctl查看服务日志
下面将介绍使用systemctl实用程序查找服务日志的一般语法。
systemctl状态[service—name]
例如,要查看smbd.service的日志信息,请使用下面给出的命令。
系统状态smbd.服务
要获得不分页的输出,请在命令中添加-no-pager选项。
系统状态smbd.服务——无寻呼机
如何使用journalctl查看服务的日志
要查看systemd的特定服务的日志,请使用journalctl和—u命令以及服务或单元名称。
Jouralctl-u[服务名称]
在上面的命令中,—u标志(—unit的简称)用于通过单元名称过滤journalctl输出。
例如,要打印smbd守护进程的日志,我将用smbd.service替换[unit-name]。
journalctl—u smbd. service
在输出中,可以看到最旧的条目首先出现,然后在列出每次引导之后日志。
要获取最新条目,首先使用-e为-pager-end的缩写。
Journal alctl-u smbd.service-e
如果您想从输出中省略分页,只需在上述命令中附加—no—pager即可。
要实时连续打印日志条目,请使用—f的缩写为—follow。
journalctl—u smbd. service—f
通过使用—boot的简称—b标志可以进一步扩展过滤功能,它会根据当前引导打印日志。
journalctl—u [unit—name]—b
让我们打印最近启动时smbd.服务的日志。
journalctl—u smbd. service—b
上面的输出类似于我们使用systemctl status命令得到的输出。
要获得详细的日志概述,请使用—x的缩写为—catalog选项。
Journal alctl-u smbd.service-x
这将附加日志的简短描述。
现在,要使用journalctl根据时间打印日志,有两个选项,—S是—since的缩写,—U是—until的缩写。
journalctl—u [unit—name]—S "[年—月—日][小时:分钟:秒]"
例如,查看单元smbd从2024:01:30 12:05:00的日志。
Journalctl-u smbd.service-S“2024:01:30 12:05:00”
结论
要查看服务的系统日志,有两个主要的实用程序:Jouralctl和systemctl。日志ctl是专门为查看system d的日志而设计的。但是,系统ctl也有打印服务日志的选项。要打印服务使用的日志,请使用Jouralctl-u[单元名称]和系统ctl[单元名称]。