本指南解释了 Systemd 的 journalctl 实用程序及其各种命令的基础知识。您可以使用这些命令对 Linux 中的桌面和服务器日志进行故障排除。这就是您可以使用 journalctl 通过不同示例查看和分析 Systemd 日志的方式。
许多人说 Systemd 不好,它对系统很繁重,而且一直是一个有争议的话题。但你不能否认它提供了一套很好的实用程序来管理和排除系统故障。想象一下,您最终会得到一个没有 GUI 的损坏系统。您可能也搞砸了 boot 和 GRUB。在这种情况下或一般情况下——您可以从 LIVE 系统启动,挂载您的 Linux 分区并浏览 Systemd 日志以找出问题所在。
通过设计,systemd 提供了一种集中方式来处理来自进程、应用程序等的所有操作系统日志。所有这些日志记录事件都由 systemd 的 journald 守护进程处理。journald 守护进程收集来自 Linux 操作系统各处的所有日志,并将主题作为二进制数据存储在文件中。
集中记录事件的优点,作为二进制数据的系统问题有很多。例如,由于系统日志存储为二进制而不是文本 - 您可以通过多种方式进行翻译,例如文本、JSON 对象以满足各种需求。此外,由于日志是通过日志的日期/时间操作顺序存储的,因此跟踪单个事件非常容易。
请记住,journald 收集的日志文件有数千行,并且会针对每个事件、每次启动进行更新。因此,如果您长时间运行 Linux 操作系统,journal日志大小应该以 GB 为单位。由于日志数以千计,因此最好使用基本命令进行过滤以了解有关系统问题的更多信息。
journald 的配置文件位于以下路径中。它包含有关日志记录如何发生的各种标志。您可以查看该文件并进行必要的更改。但我建议不要修改此文件,除非您知道自己在做什么。
这将为您提供所有日志条目,包括来自所有应用程序和进程的错误、警告等。它显示最旧日志在顶部和当前日志在底部的列表。您需要按住 ENTER 逐行滚动。您也可以使用 PAGE UP 和 PAGE DOWN 键滚动。按 q 退出此视图。
默认情况下,journalctl 显示当前系统时区的日志时间。但是,您可以轻松地在命令中提供时区以将相同的日志转换为不同的时区。例如,要以 UTC 格式查看日志,请使用以下命令。
系统生成的日志具有不同的优先级。有些日志可能是可以忽略的警告,有些可能是严重错误。您可能只想查看错误,而不是警告。这也可以使用以下命令。
当您指定错误代码时,它会显示来自该代码及以上代码的所有消息。例如,如果您指定以下命令,它将显示优先级为 2、1 和 0 的所有消息
当您运行 journalctl 命令时,它会显示来自当前启动的信息,这些信息来自您正在运行的当前会话。但也可以查看有关过去引导的信息。
journal 日志会在每次重新启动时不断更新。journald 跟踪不同引导中的日志。要查看,引导日志使用以下命令。
您还可以使用-x开关来在显示中添加对 systemd 错误消息的解释。在某些情况下,这是救命稻草。
journalctl 足够强大,可以在命令本身中提供类似“english”的参数来进行时间和日期操作。
下面是不同命令的一些示例。您可以根据需要修改它们。一看就知道,以下命令中的日期、时间格式为YYYY-MM-DD HH:MM:SS
Linux 内核消息也可以从 journal 日志中提取。要查看当前启动的内核消息,请仅使用以下命令。
您只能从 journald 日志中过滤掉来自 systemd 服务单元的特定日志。例如,要从 NetworkManager 服务中查找日志,请使用以下命令。
如果您正在分析服务器日志,则此命令在多个用户登录时很有帮助。您可以首先使用以下命令从用户名中找出用户 ID。例如,要找出用户“linuxmi”的 id
您还可以查找特定程序或可执行文件的 journald记录。例如,如果要查找 gnome-shell 的消息,可以运行以下命令。
我希望本指南可以帮助您使用 journalctl 在 Linux 桌面或服务器故障排除上查看分析 systemd 日志。如果您知道如何使用命令,systemd 日志管理功能非常强大,它可以让您在调试期间轻松一些。如今,所有主要的主流 Linux 发行版都使用 Systemd。Ubuntu、Debian、Fedora、Arch——它们都使用 systemd 作为默认操作系统产品。如果您想了解无 systemd 的 Linux 发行版,那你可能需要查看MX-Linux、Gentoo、Slackware、Void Linux。

