随着systemd的引入,Linux系统日志记录发生了变化。了解如何使用journalctl命令读取和过滤系统日志消息。
对争议并不陌生,systemd系统和****器在收集系统日志的方式上引入了一个重大的改变。根据创建日志的服务或守护程序,日志通常位于文件系统中的不同位置。但他们都有一个共同点。它们是纯文本文件。
使用systemd,所有系统、引导和内核日志文件都由一个集中的、专用的日志解决方案收集和管理。它们存储的格式是二进制的。这有助于以不同的格式提取数据,如我们将看到的JSON。
它还可以更容易地交叉引用以前记录在单独日志文件中的相关信息。因为数据现在保存在一个单独的日志中,所以可以选择来自多个感兴趣来源的数据,并将其显示在一个相互交织的条目列表中。
journalctl是用于处理日志的工具。
您可以在不使用命令行参数的情况下调用journalctl:
journalctljournalctl显示整个日志,最早的条目位于列表顶部。列表以less显示,允许您使用less的常用导航功能进行页面和搜索。您还可以使用左箭头和右箭头键横向滚动以读取宽日志条目。
按结束键将直接跳到列表的底部,以及最新的日志条目。
按Ctrl+C退出。
相关:如何在Linux上使用less命令
尽管可以在不使用sudo的情况下调用journalctl,但是如果使用sudo,则可以确保看到日志中的所有细节。
sudo journalctl如果需要,可以使用--no pager选项使journalctl将其输出发送到终端窗口,而不是发送到less。
sudo journalctl --no-pager输出在终端窗口中快速滚动,然后返回到命令提示符。
要限制journalctl返回的行数,请使用-n(行)选项。让我们要求10行输出:
sudo journalctl -n 10要使JournalCtrl在到达日记账时显示最新条目,请使用-f(跟随)选项。
sudo journalctl -f最新条目的时间戳为07:09:07。当新的活动发生时,新的条目将附加到显示的底部。近实时更新酷!
在07:09:59,一个名为geek app的应用程序在日志中注入了一个日志条目,上面写着“来自HTG的新消息”
因为日志是一个二进制文件,所以需要将其中的数据翻译或解析为文本才能显示给您。使用不同的解析器,可以从相同的二进制源数据创建不同的输出格式。journalctl可以使用几种不同的格式。
默认输出是short格式,这与经典的系统日志格式非常相似。要显式请求短格式,请使用-o(output)选项和short修饰符。
sudo journalctl -n 10 -o short-full从左到右,字段为:
要获得完整的日期和时间戳,请使用short-full修饰符:
sudo journalctl -n 10 -o short-full此输出中的日期和时间格式是您在按时段选择日志消息时需要提供日期和时间的格式,我们将很快看到。
要查看每个日志消息附带的所有元数据,请使用详细修饰符。
sudo journalctl -n 10 -o verbose有许多可能的字段,但很少所有字段都出现在消息中。
一个值得讨论的领域是优先级领域。在本例中,它的值为6。该值表示消息的重要性:
如果要将输出显示为格式正确的JavaScript对象表示法(JSON)对象,请使用JSON修饰符:
sudo journalctl -n 10 -o json每条消息都被正确地包装为一个格式良好的JSON对象,并在每行输出中显示一条消息。
要使JSON输出漂亮地打印出来,请使用JSON漂亮修饰符。
sudo journalctl -n 10 -o json-pretty每个JSON对象被分割成多行,每个名称-值对位于新行上。
要仅查看日志条目消息,而不查看时间戳或其他元数据,请使用cat修饰符:
sudo journalctl -n 10 -o cat这种显示格式会使您很难识别是哪个进程引发了日志事件,尽管有些消息确实包含线索。
要将journalctl的输出限制在您感兴趣的时间段内,请使用-S(因为)和-U(直到)选项。
要查看特定时间和日期以来的日志条目,请使用以下命令:
sudo journalctl -S "2020-91-12 07:00:00"显示仅包含在命令中的日期和时间之后到达的消息。
要定义要报告的时间段,请同时使用-S(自)和-U(直到)选项。此命令查看15分钟内的日志消息:
sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"如果您知道系统上发生了一些奇怪的事情,并且大致是在什么时候发生的,那么这是一个很好的组合用法。
选择时段时可以使用相对寻址。这意味着你可以说“向我展示从一天前到现在的所有事件”这正是这个命令的意思。“d”代表“天”;“-1”代表过去的一天。
sudo journalctl -S -1d日志消息从昨天00:00:00到“现在”列出
如果您想调查最近发生的事情,可以指定以小时为单位的相对时间段。下面我们正在查看最后一小时的日志消息:
sudo journalctl -S -1h最后一小时的消息将为您显示。您还可以使用“m”设置以分钟为单位的相对时间段,使用“w”设置以周为单位的相对时间段。
journalctl了解今天、昨天和明天。这些修饰符提供了一种指定公共时间段的简便方法。要查看昨天发生的所有事件,请使用以下命令:
sudo journalctl -S yesterday昨天发生的所有日志事件,直到午夜00:00:00,都将为您检索和显示。
要查看到目前为止收到的所有日志消息,请使用以下命令:
sudo journalctl -S today显示从00:00:00到发出命令的所有内容。
您可以混合使用不同的时间段修饰符。要查看从两天前到今天开始的所有内容,请使用以下命令:
sudo journalctl -S -2d -U today从前天到今天的所有内容都将被检索和显示。
您可以搜索与范围广泛的日志字段匹配的日志消息。这些搜索尝试在附加到每条消息的元数据中查找匹配项。建议您参考字段列表并选择对您最有用的字段。
请记住,应用程序是否完成每个字段完全取决于应用程序的作者。你不能保证每个字段都会被填充。
所有日记字段修饰符的使用方式都相同。我们将在下面的示例中使用一些。要查找来自特定应用程序的日志消息,请使用\u COMM(command)修饰符。如果还使用-f(follow)选项,journalctl将在新消息到达时跟踪来自此应用程序的消息。
sudo journalctl -f _COMM=geek-app可以使用生成日志消息的进程的进程ID搜索日志条目。使用ps命令查找要搜索的守护进程或应用程序的进程id。
sudo journalctl _PID=751在用于研究本文的机器上,SSH守护进程是process751。
您还可以按用户Id进行搜索。这是启动应用程序或命令的人员或进程所有者的用户Id。
sudo journalctl _UID=1000与任何其他用户ID关联的所有消息都将被过滤掉。仅显示与用户1000相关的消息:
搜索与特定应用程序相关的日志消息的另一种方法是提供可执行文件的路径。
sudo journalctl /usr/bin/anacron检索并显示所有anacron调度程序日志消息。
为了使搜索更容易,我们可以要求journalctl列出它持有的所有值,用于任何日志字段。
要查看journalctl为其记录日志消息的用户ID,请使用-F(fields)选项,并传递UID字段标识符。
journalctl -F _UID我们再来看一下组ID(GID):
journalctl -F _GID您可以使用任何日志字段标识符来执行此操作。
有一种内置的方法可以快速隔离内核消息。你不需要自己搜索和隔离它们。k(kernel)选项删除所有其他消息,并提供内核日志条目的即时视图。
sudo journalctl -k突出显示根据优先级字段中的值反映消息的重要性。
如果您有一个与引导相关的问题需要调查,journalctl会为您提供帮助。可能您添加了新硬件,但它没有响应,或者上次系统升级后,以前工作的硬件组件不再工作。
要查看与上次引导相关的日志条目,请使用-b(boot)选项:
journalctl -b将为您显示上次引导的日志条目。
当我们说“最后一次启动”时,我们指的是使您的计算机在当前登录会话中恢复正常的启动过程。要查看以前的靴子,您可以使用一个数字来告诉journalctl您感兴趣的靴子。要查看上一次的第三次启动,请使用以下命令:
journalctl -b 3一般来说,如果你遇到了问题,不得不重新启动你的机器,这是你感兴趣的前一个引导序列。所以这是一个常见的命令形式。
很容易混淆靴子的顺序。为了提供帮助,我们可以让journalctl使用--list boots选项列出它在日志中记录的引导。
journalctl --list-boots您可以从日期和时间戳中标识要查看消息的引导,然后使用左侧列中的数字获取该引导序列的日志消息。您还可以选择32位引导标识符,并将其传递给journalctl。
sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7检索并显示来自我们请求的引导序列的日志消息。
当然,日志及其所有日志消息都存储在硬盘上。这意味着它们会占用硬盘空间。要查看日志占用了多少空间,请使用--disk usage选项。
journalctl --disk-usage对于今天的硬盘驱动器,152MB的空间并不是很大,但是为了演示的目的,我们还是会将其缩小。我们有两种办法。第一种方法是设置一个大小限制,以便将日志缩减回原来的大小。当然,它会再次生长,但我们现在可以修剪它,为新的生长做好准备。
我们将使用奇妙的标题--vacuum size选项,并传入希望日志缩小到的大小。我们要100 MB。考虑到这一点,我们要求journalctl“扔掉所有可以扔掉的东西,但不要低于100MB。”
journalctl --vacuum-size=100M另一种修剪日志大小的方法是使用--vacuum time选项。此选项告诉journalctl放弃比您在命令行上提供的周期早的消息。您可以在时间段中使用天、周、月和年。
让我们删除所有超过一周的邮件:
journalctl --vacuum-time=1weeks数据是没有用的,除非你能得到它并利用它。然后它就变成有用的信息。journalctl命令是一个灵活而复杂的工具,允许您以多种方式获取感兴趣的信息。
您可以使用您需要的日志消息中的任何信息片段。
...此,这几乎是获取定量数据的唯一方法,说明系统的性能如何——如果您的数字不足,这表明您可能希望升级一些PC组件。 ...
... 无论如何,要学习的最基本的Linux命令之一是一个称为chmod的小而强大的命令。但是在解释这个命令的作用之前,我们必须先了解一下Linux是如何处理文件安全的。 ...
...来重新格式化文本流。它不仅限于处理文件。让我们看看journalctl工具的原始输出是什么样子的。f(follow)选项显示systemd日志中的最新条目,并在新条目到达时更新。 sudo journalctl -f 输出环绕在终端窗口的边缘。 它看起来不太...
...个条目来自哪个日志文件。 尾巴还是有价值的 尽管现在journalctl提供了对系统日志文件的访问,但tail仍然提供了很多功能。尤其是当它与其他命令结合使用时,通过管道进入或离开尾部。 systemd可能已经改变了环境,但是对于...
...用。它的输出可能会让新手感到困惑,但我们将向您展示如何理解它。 自由命令 free命令在终端窗口中打印内存使用情况的快速摘要。它没有太多的选择和技巧,也不需要花太多的时间和精力去学习如何使用它。然而,要学会...
...和术语。按less中的正斜杠“/”键启动搜索功能。 相关:如何在Linux上使用less命令 不再需要sudo 如果希望避免每次使用dmesg时都必须使用sudo,可以使用以下命令。但是,请注意:它允许任何拥有您的计算机用户帐户的人使用dmesg...
...后才能使用连接到Linux计算机的任何数据存储设备。学习如何使用mkfs和其他实用程序来为各种文件系统实现这一点。我们教你怎么做。 mkfs**文件系统 mkfs命令生成文件系统。在其他操作系统上,创建文件系统称为格式化。不管...
...来实现什么可以完成使用世界卫生组织的命令。 相关:如何在Linux中确定当前用户帐户 lastb命令 lastb命令值得一提。它从名为btmp的日志中读取数据。关于这个日志名,大家有了更多的共识。“b”代表坏,但“tmp”部分仍有争议...
...,不如让我们为您介绍一些关于这个主题的便捷指南: 如何在Mac上擦除和格式化驱动器 如何将硬盘或闪存驱动器从FAT32格式转换为NTFS格式 如何在不下载任何其他软件的情况下管理Windows上的分区 如何使用Fdisk管理Linux上的分区 ...
...? 文件系统提供了一种组织驱动器的方法。它指定数据如何存储在驱动器上,以及可以将哪些类型的信息附加到文件、文件名、权限和其他属性。Windows支持三种不同的文件系统。NTFS是最现代的文件系统。Windows的系统驱动器使...