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.
Related: How to view service logs using journalctl
Related: How to check systemd journal size
Related: How to clear old journal logs
$ 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.
$ 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.
$ 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.
$ 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.
$ 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.
$ 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.