journalctl
read the system logsjournalctl queries the journal, where systemd collects everything services print, along with kernel and boot messages. Instead of opening files in /var/log you ask for one unit, one time range, or errors only.
A service failed? journalctl -u name -e shows the end of its log, where the reason is.
At the terminal
Read the session first, then the notes: each numbered line in the output is answered by the note with the same number.
What the numbered lines are telling you
Each line has the time, the host, the program and its process id, then the message.
nginx could not bind to port 80 because something else already has it. This line is what systemctl status hints at but cuts short.
The service exited with an error, so the unit is marked failed.
-p err keeps messages of priority error and worse; -b limits them to the current boot.
Switches
A switch changes how the command behaves. These are the ones used day to day; man journalctl lists the rest. Single-letter switches can usually be joined, so -l -a may be written -la.
-u UNIT- Show the log of one service.
-f- Follow: print new entries as they arrive.
-e- Jump to the end of the log.
-b- Only entries from the current boot. -b -1 is the previous boot.
-p LEVEL- Only this priority and worse: err, warning, info.
--since TIME- From this time: "today", "1 hour ago", "2026-09-30 09:00".
-n NUM- Show the last NUM lines.
-k- Kernel messages only.
--no-pager- Print directly instead of opening a pager.
Variations worth knowing
The same tool, pointed at a narrower question. These four cover most of what it is reached for day to day.
journalctl -fFollows every log on the system live.
journalctl -u ssh -eOpens one service’s log at its end.
journalctl -k -bKernel messages from this boot, like dmesg.
journalctl --disk-usageShows how much space the journal is taking.
In cybersecurity
The journal is the first place to look after anything unexpected.
"journalctl -u ssh" shows every accepted and failed login; "journalctl _COMM=sudo" shows who ran what as root.
Full access needs root or membership of the adm or systemd-journal group, because the logs contain user names, addresses and commands.
An intruder with root can clear the journal. Forwarding logs to another host is what makes them trustworthy evidence.