Reading the systemd journal is one of the fastest ways to confirm what happened during boot, service startup, hardware detection, and scheduled background work on a Linux host. It exposes the messages behind failed startups, repeated warnings, and sudden restarts without searching through multiple text log files first.

The systemd-journald service stores log events in a structured binary journal, and journalctl can filter that data by boot, time window, priority, unit, and transport. Using journalctl with --system keeps the view centered on the host-wide system journal instead of mixing in readable per-user entries.

Reading the system journal usually requires sudo unless the current account already has journal-read access through a distribution-specific admin group. journalctl opens output in a pager by default, so --no-pager is useful for direct terminal viewing, copy-paste, and shell redirection, and older boots appear only when the host keeps journal files across reboots.

Steps to view system logs using journalctl:

  1. Show the newest system log entries from the current boot.
    $ sudo journalctl --system --boot --lines=20 --no-pager
    Apr 13 16:35:53 host systemd[1]: Started getty@tty1.service - Getty on tty1.
    Apr 13 16:35:53 host systemd[1]: Reached target getty.target - Login Prompts.
    Apr 13 16:35:53 host systemd[1]: Reached target multi-user.target - Multi-User System.
    Apr 13 16:35:53 host systemd[1]: Reached target graphical.target - Graphical Interface.
    Apr 13 16:35:53 host systemd[1]: Startup finished in 4.785s (kernel) + 2.656s (userspace) = 7.441s.

    --system keeps the view on the host journal, and --no-pager prints directly to the terminal instead of opening less.

  2. Limit the results to the current day when the issue happened recently.
    $ sudo journalctl --system --since=today --lines=20 --no-pager
    Apr 13 16:35:53 host systemd[1]: Started getty@tty1.service - Getty on tty1.
    Apr 13 16:35:53 host systemd[1]: Reached target multi-user.target - Multi-User System.
    Apr 13 16:35:53 host systemd[1]: Reached target graphical.target - Graphical Interface.
    Apr 13 16:35:58 host snapd[697]: daemon.go:556: gracefully waiting for running hooks
    Apr 13 16:36:01 host systemd[1]: snapd.service: Deactivated successfully.

    --since also accepts exact YYYY-MM-DD HH:MM:SS timestamps and keywords such as yesterday, today, and now.

  3. Reduce the output to warning-level events and above when the goal is to find failures faster.
    $ sudo journalctl --system --boot --priority=warning..alert --lines=20 --no-pager
    Apr 13 16:35:51 host kernel: KASLR disabled due to lack of seed
    Apr 13 16:35:51 host kernel: Invalid PCCT: 0 PCC subspaces
    Apr 13 16:35:53 host (cron)[1093]: cron.service: Referenced but unset environment variable evaluates to an empty string: EXTRA_OPTS

    The range warning..alert includes priorities 4 through 1 and leaves out notice, info, and debug messages.

  4. Show only kernel messages when the problem looks like a boot, driver, storage, or hardware issue.
    $ sudo journalctl -k --boot --lines=20 --no-pager
    Apr 13 16:35:51 host kernel: KASLR disabled due to lack of seed
    Apr 13 16:35:51 host kernel: secureboot: Secure boot disabled
    Apr 13 16:35:52 host kernel: NET: Registered PF_QIPCRTR protocol family
    Apr 13 16:35:52 host kernel: loop0: detected capacity change from 0 to 8

    -k is the short form of --dmesg, and it implies the current boot unless another boot is specified.

  5. Follow new system log entries live while reproducing the problem.
    $ sudo journalctl --system --follow --lines=5 --no-pager
    Apr 13 16:35:58 host snapd[697]: daemon.go:556: gracefully waiting for running hooks
    Apr 13 16:35:58 host snapd[697]: daemon.go:558: done waiting for running hooks
    Apr 13 16:36:01 host systemd[1]: snapd.service: Deactivated successfully.
    ##### waits for new entries until Ctrl-C #####

    Press Ctrl-C to stop the live stream, or add --no-tail when older stored lines should remain visible before new entries arrive.

  6. List recorded boots before checking logs from a previous startup.
    $ sudo journalctl --system --list-boots --no-pager
    IDX BOOT ID                          FIRST ENTRY                 LAST ENTRY
      0 c47ac9b8e76c4cdda03e2a5df46d7782 Mon 2026-04-13 16:35:51 +08 Mon 2026-04-13 16:39:12 +08

    When the list shows a -1 entry, journalctl -b -1 opens the previous boot directly.