Comandes LinuxGestionar fitxers i directoris a LinuxInformació del sistema LinuxLinuxVeure el contingut d'un fitxer a Linux

Guia de journalctl: consultar i filtrar els registres de systemd



A les distribucions amb systemd (pràcticament totes les actuals: Debian, Ubuntu, Fedora, RHEL i derivades…), els missatges del sistema i dels serveis els recull el servei systemd-journald en un registre central anomenat journal. La comanda per consultar-lo és journalctl. En aquesta guia t’explico com llegir-lo, com filtrar només el que t’interessa i com controlar quant espai ocupa.

Què és el journal

systemd-journald recull en un sol lloc:

  • Els missatges del nucli (el que abans miraves amb dmesg).
  • La sortida dels serveis gestionats per systemd (el que escriuen per pantalla o al syslog).
  • Els missatges del procés d’arrencada.

A diferència dels fitxers de text de /var/log, el journal es guarda en un format binari indexat, amb molta informació addicional per a cada missatge (servei, PID, usuari, prioritat…). Per això no es llegeix amb cat sinó amb journalctl, i per això es pot filtrar tan fàcilment.

Qui el pot llegir

Un usuari normal només veu els seus propis missatges. Per veure els de tot el sistema has de fer servir sudo o pertànyer al grup systemd-journal (també hi tenen accés els grups adm i wheel):

sudo usermod -aG systemd-journal joan

Als exemples d’aquesta guia poso sudo per si de cas.

Ús bàsic

sudo journalctl

Mostra tot el journal, del missatge més antic al més recent, dins del paginador less (surts amb q). Cada línia té la data, el nom de l’equip, el procés i el missatge:

Oct 04 08:55:32 piiespai sshd-session[2160402]: Failed password for invalid user admin from 203.0.113.45 port 25804 ssh2
Oct 04 08:55:34 piiespai sshd-session[2160402]: Connection closed by invalid user admin 203.0.113.45 port 25804 [preauth]

Opcions més útils

OpcióQuè fa
-eObre el paginador directament al final (el més recent)
-n 50Mostra només les 50 darreres línies
-rOrdre invers: el més recent primer
-fSegueix el registre en temps real, com tail -f
-u serveiNomés els missatges d’un servei (unitat de systemd)
-bNomés els missatges de l’arrencada actual (-b -1: l’anterior)
-kNomés els missatges del nucli
-p prioritatNomés els missatges d’aquesta prioritat o més greus
-S, --since / -U, --untilInterval de temps
-g patróNomés els missatges que coincideixen amb una expressió regular
-xAfegeix explicacions als missatges coneguts
-o formatFormat de sortida: short-iso, json-pretty, cat, verbose…
--no-pagerTreu la sortida directament, sense less (útil en scripts)

Exemples

El més recent i en temps real

sudo journalctl -e           # obre el journal pel final
sudo journalctl -n 20        # les 20 darreres línies
sudo journalctl -f           # en temps real (Ctrl+C per sortir)

Els missatges d’un servei

$ sudo journalctl -u ssh -n 3
Oct 04 08:55:30 piiespai sshd-session[2160402]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.0.113.45
Oct 04 08:55:32 piiespai sshd-session[2160402]: Failed password for invalid user admin from 203.0.113.45 port 25804 ssh2
Oct 04 08:55:34 piiespai sshd-session[2160402]: Connection closed by invalid user admin 203.0.113.45 port 25804 [preauth]

El nom del servei és el de la unitat de systemd (ssh a Debian i Ubuntu, sshd a RHEL i Fedora). Pots posar diversos -u alhora, i combinar-ho amb qualsevol altra opció:

sudo journalctl -u nginx -u php8.4-fpm --since "2 hours ago"
sudo journalctl -u ssh -f

Quan un servei no arrenca, el més pràctic és combinar systemctl status servei (que ja mostra les darreres línies del journal) amb journalctl -u servei -e.

Per dates

sudo journalctl --since "2026-10-01 10:00" --until "2026-10-01 12:00"
sudo journalctl --since "1 day ago"
sudo journalctl --since yesterday --until today
sudo journalctl --since "-30m"

--since i --until accepten dates (AAAA-MM-DD HH:MM:SS), les paraules yesterday, today, tomorrow i now, i temps relatius ("2 hours ago", -30m).

Per arrencades

$ sudo journalctl --list-boots
IDX BOOT ID                          FIRST ENTRY                  LAST ENTRY
  0 30e152f11e704af29f69fd0469a3d18f Fri 2026-09-25 10:52:35 CEST Sun 2026-10-04 09:00:01 CEST

Aquí només hi ha una arrencada (la 0, l’actual); si n’hi hagués més, sortirien amb índexs negatius (-1, -2…).

sudo journalctl -b        # l'arrencada actual
sudo journalctl -b -1     # l'anterior: ideal per saber per què es va penjar o reiniciar

Per poder veure arrencades anteriors, el journal ha de ser persistent (vegeu més avall).

Per gravetat (prioritat)

$ sudo journalctl -p err -b
Oct 04 03:35:36 piiespai sshd-session[2120562]: error: kex_exchange_identification: read: Connection reset by peer
Oct 04 04:24:19 piiespai sshd-session[2126627]: error: Protocol major versions differ: 2 vs. 1

-p err mostra els errors i tot el que és més greu. Les prioritats, de més a menys greu, són:

NúmeroNomSignificat
0emergEl sistema no es pot fer servir
1alertCal actuar immediatament
2critSituació crítica
3errError
4warningAvís
5noticeNormal però destacable
6infoInformatiu
7debugDepuració

També pots indicar un rang: -p warning..err.

Missatges del nucli

sudo journalctl -k        # de l'arrencada actual, com dmesg
sudo journalctl -k -b -1  # de l'arrencada anterior

Útil per a problemes de maquinari, discos o controladors, i també per veure els paquets que bloqueja el tallafoc (UFW hi escriu les línies [UFW BLOCK]).

Buscar un text

sudo journalctl -g "Failed password" --since today

-g accepta expressions regulars i no distingeix majúscules de minúscules si el patró és tot en minúscules.

Per camps

Cada entrada té camps que pots fer servir com a filtre amb la forma CAMP=valor:

sudo journalctl _PID=1234            # un procés concret
sudo journalctl _COMM=cron           # per nom de l'executable
sudo journalctl _UID=1000            # els missatges d'un usuari
sudo journalctl /usr/sbin/cron       # tots els missatges d'un executable

Per veure tots els camps d’una entrada, fes servir -o verbose o -o json-pretty.

Una correcció de l’original: el filtre SYSLOG_FACILITY=3 no mostra els missatges de xarxa sinó els de la facility daemon (serveis del sistema). Més fàcil i llegible: journalctl --facility=daemon. La llista de facilities la pots veure amb journalctl --facility=help (kern, user, mail, daemon, auth…).

Guardar o compartir els registres

sudo journalctl -u nginx --since today --no-pager > nginx_avui.txt
sudo journalctl -b -o short-iso --no-pager > arrencada.txt

-o short-iso posa les dates en format ISO amb zona horària (2026-10-04T08:55:32+02:00), que s’entén millor si envies el fitxer a algú d’un altre país.

Compte: abans de compartir un registre, revisa’l. Hi pot haver adreces IP, noms d’usuari, rutes internes i fins i tot claus d’API o contrasenyes que algun script hagi escrit a la línia de comandes (per exemple, les comandes que executa cron hi queden registrades).

Journal persistent i espai en disc

Si existeix el directori /var/log/journal, el journal es guarda al disc i es conserva entre reinicis. Si no, es guarda a /run/log/journal, a la memòria, i es perd en apagar. A Debian 12 i posteriors, Ubuntu i Fedora ja és persistent per defecte. Si al teu sistema no ho és:

sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald

Per saber quant ocupa i fer neteja:

$ journalctl --disk-usage
Archived and active journals take up 70.8M in the file system.

sudo journalctl --vacuum-size=200M    # deixa'l per sota de 200 MB
sudo journalctl --vacuum-time=4weeks  # esborra el que tingui més de 4 setmanes

Per defecte, el journal pot ocupar fins al 10 % del sistema de fitxers (amb un màxim de 4 GB). Per fixar un límit permanent, crea un fitxer /etc/systemd/journald.conf.d/mida.conf:

[Journal]
SystemMaxUse=500M

i reinicia el servei amb sudo systemctl restart systemd-journald.

I els fitxers de /var/log?

A moltes distribucions encara hi ha rsyslog, que copia els missatges del journal als fitxers de text de sempre (/var/log/syslog, /var/log/auth.log, /var/log/messages…). A Debian 12 i posteriors ja no s’instal·la per defecte, i per això potser no hi trobaràs syslog ni auth.log: tot és al journal. Els serveis que escriuen els seus propis fitxers (Apache, Nginx, MySQL…) continuen fent-ho a /var/log, com sempre.

Posts relacionats