# journalctl — das systemd-Journal abfragen und durchsuchen

> Praxis-Guide zu journalctl: das systemd-Journal nach Unit, Zeit und Priorität filtern, Logs live verfolgen, Boot- und Kernel-Meldungen prüfen und Speicher freiräumen.

Source: https://www.jpkc.com/db/cheatsheets/shell-system/journalctl/

<!-- PROSE:intro -->
journalctl ist dein Fenster in das systemd-Journal – den zentralen Log-Speicher, der Meldungen von Kernel, Diensten und Anwendungen strukturiert und durchsuchbar sammelt. Statt verstreute Textdateien unter `/var/log` zu durchforsten, filterst du gezielt nach Unit, Zeitraum, Priorität oder Prozess und verfolgst neue Einträge in Echtzeit. Dieser Guide zeigt dir die Abfragen, die du beim Debugging und im Betrieb wirklich brauchst – von der Diagnose eines einzelnen Dienstes bis zum Aufräumen eines voll gelaufenen Journals.
<!-- PROSE:intro:end -->

## Grundlegende Nutzung

`journalctl` — Alle Journal-Einträge anzeigen (älteste zuerst) im Pager.

```bash
journalctl
```

`journalctl -r` — Einträge in umgekehrter Reihenfolge anzeigen (neueste zuerst).

```bash
journalctl -r
```

`journalctl -n N` — Nur die letzten N Einträge anzeigen (Standard: 10).

```bash
journalctl -n 50
```

`journalctl -f` — Follow-Modus – neue Einträge fortlaufend anzeigen (wie tail -f).

```bash
journalctl -f
```

`journalctl -e` — Im Pager ans Ende des Journals springen.

```bash
journalctl -e
```

`journalctl --no-pager` — Direkt ohne Pager ausgeben. Praktisch zum Weiterleiten (Piping).

```bash
journalctl --no-pager -n 100
```

## Nach Unit/Service filtern

`journalctl -u UNIT` — Logs einer bestimmten systemd-Unit bzw. eines Dienstes anzeigen.

```bash
journalctl -u nginx.service
```

`journalctl -u UNIT -f` — Logs eines bestimmten Dienstes live verfolgen.

```bash
journalctl -u nginx.service -f
```

`journalctl -u UNIT1 -u UNIT2` — Logs mehrerer Dienste anzeigen.

```bash
journalctl -u nginx.service -u php-fpm.service
```

`journalctl -u 'nginx*'` — Logs für Units anzeigen, die auf ein Muster passen.

```bash
journalctl -u 'nginx*'
```

`journalctl -u UNIT --since today` — Heutige Logs eines Dienstes anzeigen.

```bash
journalctl -u sshd.service --since today
```

## Nach Zeit filtern

`journalctl --since 'YYYY-MM-DD HH:MM:SS'` — Einträge ab einem bestimmten Datum und Zeitpunkt anzeigen.

```bash
journalctl --since '2024-01-15 09:00:00'
```

`journalctl --until 'YYYY-MM-DD HH:MM:SS'` — Einträge bis zu einem bestimmten Datum und Zeitpunkt anzeigen.

```bash
journalctl --until '2024-01-15 17:00:00'
```

`journalctl --since today` — Einträge von heute anzeigen.

```bash
journalctl --since today
```

`journalctl --since yesterday --until today` — Einträge von gestern anzeigen.

```bash
journalctl --since yesterday --until today
```

`journalctl --since '1 hour ago'` — Einträge der letzten Stunde anzeigen.

```bash
journalctl --since '1 hour ago'
```

`journalctl --since '30 min ago'` — Einträge der letzten 30 Minuten anzeigen.

```bash
journalctl --since '30 min ago'
```

`journalctl --since '2 days ago'` — Einträge der letzten 2 Tage anzeigen.

```bash
journalctl --since '2 days ago'
```

## Nach Priorität filtern

`journalctl -p err` — Nur Fehlermeldungen und höher anzeigen (err, crit, alert, emerg).

```bash
journalctl -p err
```

`journalctl -p warning` — Warnungen und höher anzeigen.

```bash
journalctl -p warning
```

`journalctl -p crit` — Nur kritische Meldungen und höher anzeigen.

```bash
journalctl -p crit
```

`journalctl -p info` — Info und höher anzeigen (Standard).

```bash
journalctl -p info
```

`journalctl -p debug` — Alle Meldungen inklusive Debug-Ebene anzeigen.

```bash
journalctl -p debug
```

`journalctl -p err..warning` — Meldungen in einem Prioritätsbereich anzeigen.

```bash
journalctl -p err..warning
```

## Nach Prozess & Benutzer filtern

`journalctl _PID=PID` — Logs einer bestimmten Prozess-ID anzeigen.

```bash
journalctl _PID=1234
```

`journalctl _UID=UID` — Logs einer bestimmten Benutzer-ID anzeigen.

```bash
journalctl _UID=1000
```

`journalctl _GID=GID` — Logs einer bestimmten Gruppen-ID anzeigen.

```bash
journalctl _GID=33
```

`journalctl _COMM=COMMAND` — Logs von Prozessen mit einem bestimmten Kommandonamen anzeigen.

```bash
journalctl _COMM=sshd
```

`journalctl _EXE=PATH` — Logs einer bestimmten ausführbaren Datei anzeigen.

```bash
journalctl _EXE=/usr/sbin/nginx
```

`journalctl _HOSTNAME=HOST` — Logs eines bestimmten Hostnamens anzeigen (nützlich bei zentralem Journaling).

```bash
journalctl _HOSTNAME=webserver01
```

## Kernel-Meldungen

`journalctl -k` — Nur Kernel-Meldungen anzeigen (entspricht dmesg).

```bash
journalctl -k
```

`journalctl -k -b` — Kernel-Meldungen des aktuellen Boots anzeigen.

```bash
journalctl -k -b
```

`journalctl -k -p err` — Kernel-Fehler anzeigen.

```bash
journalctl -k -p err
```

`journalctl -k -f` — Kernel-Meldungen in Echtzeit verfolgen.

```bash
journalctl -k -f
```

## Boot-Logs

`journalctl -b` — Logs des aktuellen Boots anzeigen.

```bash
journalctl -b
```

`journalctl -b -1` — Logs des vorherigen Boots anzeigen.

```bash
journalctl -b -1
```

`journalctl -b -2` — Logs von vor zwei Boots anzeigen.

```bash
journalctl -b -2
```

`journalctl --list-boots` — Alle verfügbaren Boot-Sitzungen mit Zeitstempeln auflisten.

```bash
journalctl --list-boots
```

## Ausgabeformate

`journalctl -o short` — Standard-Ausgabe im Syslog-Stil.

```bash
journalctl -o short -n 10
```

`journalctl -o short-precise` — Syslog-Stil mit Mikrosekunden-Genauigkeit.

```bash
journalctl -o short-precise -n 10
```

`journalctl -o short-iso` — Syslog-Stil mit ISO-8601-Zeitstempeln.

```bash
journalctl -o short-iso -n 10
```

`journalctl -o verbose` — Alle Felder jedes Eintrags anzeigen.

```bash
journalctl -o verbose -n 5
```

`journalctl -o json` — Ausgabe im JSON-Format (ein Objekt pro Zeile).

```bash
journalctl -o json -n 5
```

`journalctl -o json-pretty` — Ausgabe als formatiertes JSON.

```bash
journalctl -o json-pretty -n 5
```

`journalctl -o cat` — Nur den Meldungstext anzeigen (ohne Metadaten).

```bash
journalctl -u nginx -o cat -n 20
```

`journalctl -o export` — Binäres Exportformat für journalctl --import.

```bash
journalctl -o export > journal.export
```

## Suchen & Grep

`journalctl -g PATTERN` — Einträge per regulärem Ausdruck filtern (wie grep).

```bash
journalctl -g 'error|fail'
```

`journalctl -g PATTERN --case-sensitive=no` — Regex-Suche ohne Beachtung der Groß-/Kleinschreibung.

```bash
journalctl -g 'timeout' --case-sensitive=no
```

`journalctl | grep PATTERN` — Zur klassischen Textsuche durch grep leiten.

```bash
journalctl --no-pager | grep 'Failed password'
```

## Speicherplatz & Wartung

`journalctl --disk-usage` — Anzeigen, wie viel Speicher das Journal belegt.

```bash
journalctl --disk-usage
```

`journalctl --vacuum-size=SIZE` — Alte Einträge entfernen, bis das Journal unter SIZE liegt. Destruktiv: gelöschte Logs sind unwiderruflich weg.

```bash
sudo journalctl --vacuum-size=500M
```

`journalctl --vacuum-time=TIME` — Einträge entfernen, die älter als TIME sind. Destruktiv.

```bash
sudo journalctl --vacuum-time=30d
```

`journalctl --vacuum-files=N` — Nur die N neuesten Journal-Dateien behalten; ältere werden gelöscht. Destruktiv.

```bash
sudo journalctl --vacuum-files=5
```

`journalctl --rotate` — Rotation der Journal-Dateien erzwingen (aktuelle Datei schließen, neue beginnen) – Voraussetzung für sofortiges Vacuumen.

```bash
sudo journalctl --rotate
```

`journalctl --verify` — Integrität der Journal-Dateien prüfen.

```bash
journalctl --verify
```

## Typische Muster

`journalctl -u nginx -p err --since today` — Heutige Fehler von nginx.

```bash
journalctl -u nginx.service -p err --since today
```

`journalctl -u sshd -g 'Failed password' --since '1 hour ago'` — Fehlgeschlagene SSH-Logins der letzten Stunde.

```bash
journalctl -u sshd.service -g 'Failed password' --since '1 hour ago'
```

`journalctl -p err -b --no-pager` — Alle Fehler seit dem aktuellen Boot ohne Pager.

```bash
journalctl -p err -b --no-pager
```

`journalctl -u UNIT -o json --no-pager | jq .` — Dienst-Logs als JSON mit jq auswerten.

```bash
journalctl -u nginx -o json --no-pager -n 5 | jq .
```

`journalctl -k -p err -b` — Kernel-Fehler des aktuellen Boots.

```bash
journalctl -k -p err -b
```

`journalctl --since '5 min ago' -f` — Die letzten 5 Minuten anzeigen und weiter verfolgen.

```bash
journalctl --since '5 min ago' -f
```

<!-- PROSE:outro -->
## Fazit

journalctl macht aus verstreuten Logdateien eine einzige, durchsuchbare Quelle: Mit `-u`, `--since`, `-p` und `-f` grenzt du Vorfälle in Sekunden ein, und `-b` bzw. `-k` bringen dich gezielt an Boot- und Kernel-Meldungen; `-x` ergänzt erklärende Hinweise zu vielen systemd-Einträgen. Für den Zugriff auf fremde oder systemweite Logs musst du in der Gruppe `adm` oder `systemd-journal` sein (oder `sudo` nutzen); ob das Journal Neustarts überlebt, hängt von `Storage=persistent` und einem vorhandenen `/var/log/journal` ab. Vorsicht bei `--vacuum-size`, `--vacuum-time`, `--vacuum-files` und `--rotate`: Diese Befehle löschen bzw. verdrängen alte Einträge unwiderruflich – ideal zum Freiräumen von Speicher, aber führe sie nie auf Verdacht aus, solange du die Logs noch zur Analyse brauchst.

## Weiterführende Links

- [systemd: journalctl (Manpage)](https://www.freedesktop.org/software/systemd/man/latest/journalctl.html) – offizielle Referenz aller Optionen und Journal-Felder
- [ubuntuusers-Wiki: systemd/journalctl](https://wiki.ubuntuusers.de/systemd/journalctl/) – deutschsprachige Einführung in das systemd-Journal
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [systemctl](https://www.jpkc.com/db/cheatsheets/shell-system/systemctl/) – systemd-Dienste verwalten und ihren Status prüfen
- [dmesg](https://www.jpkc.com/db/cheatsheets/shell-system/dmesg/) – den Kernel-Ringpuffer direkt auslesen
- [loginctl](https://www.jpkc.com/db/cheatsheets/shell-system/loginctl/) – Login-Sitzungen und Benutzer über systemd-logind verwalten

