Was ist lnav?
lnav, der Logfile Navigator, ist ein Log-Viewer fürs Terminal, der Logdateien aus vielen Quellen zu einer einzigen, nach Zeitstempel geordneten Ansicht zusammenführt. Du gibst ihm ein paar Dateien, ein Verzeichnis oder ein komprimiertes Archiv, und er erkennt die Formate selbst (syslog, das systemd-Journal, Apache- und nginx-Access-Logs, JSON Lines und viele mehr), verzahnt die Meldungen nach Zeit, färbt Fehler und Warnungen ein, damit sie auffallen, und folgt den Dateien, während sie wachsen. Von dort aus filterst du, suchst, springst von Fehler zu Fehler, und wenn eine Frage mehr als eine Suche braucht, fragst du die Log-Meldungen mit SQL ab. Entfernte Logs öffnet es über ssh so einfach wie lokale. lnav ist in C++ von Tim Stack geschrieben und steht unter der BSD-2-Clause-Lizenz.
apt upgrade an Ort und Stelle.
⚡ Hauptfunktionen von lnav
🔀 Eine gemeinsame Zeitachse
Öffne syslog, ein Anwendungs-Log und ein Webserver-Log zusammen, und lnav verzahnt ihre Zeilen nach Zeitstempel, du liest also, was im ganzen System passiert ist, in der Reihenfolge, in der es passiert ist.
🔍 Automatische Formaterkennung
syslog, journald-JSON, Apache- und nginx-Access-Logs, JSON Lines, logfmt und Dutzende mehr werden ohne Konfiguration erkannt; Level, Zeitstempel und Felder werden geparst, Fehler und Warnungen hervorgehoben.
🗄️ SQL über deine Logs
Jedes erkannte Format ist eine Tabelle. Drück ; und führe SELECT-Abfragen auf die Log-Meldungen aus: Fehler pro Host zählen, die langsamsten Requests finden, Statuscodes gruppieren, mit dem Ergebnis im selben Fenster.
🌐 Entfernte Logs über ssh
lnav user@host:/var/log/syslog öffnet ein Log auf einem anderen Rechner über deine normale ssh-Konfiguration und deine Schlüssel, ohne einen Agenten auf dem Server.
📦 Komprimierte Dateien und Archive
Rotierte .gz- und .bz2-Logs öffnen sich direkt, ebenso .zip- und .tar-Archive, ein Support-Bundle lässt sich also lesen, ohne es vorher zu entpacken.
👀 Folgen, filtern und suchen
Dateien werden verfolgt, während sie wachsen, Filter blenden Zeilen nach Muster aus oder ein, Suchen heben jeden Treffer hervor, und einzelne Tasten springen zum nächsten Fehler oder zur nächsten Warnung, damit nichts Wichtiges vorbeirollt.
apt upgrade hält dich auf der neuesten Version.
📦 Installation aus deb.griffo.io
Schritt 1: Repository hinzufügen
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Es gibt einen für immer kostenlosen Spiegel. deb-free.griffo.io liefert Pakete für immer kostenlos — ohne Konto, ohne Abo, höchstens 2 Monate hinter Upstream, Sicherheitsfixes sofort. Derzeit enthält er cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud und Zed; lnav ist nicht dabei, deshalb führt heute nur das Repository oben dorthin — auf Anfrage kann es aufgenommen werden.
🧩 Zur extrepo-Option. extrepo ist Debians eigenes Werkzeug für externe Repositories: Es legt die Sources-Datei an und installiert den Signaturschlüssel für dich, nachdem es ihn gegen signierte Metadaten geprüft hat. Dieses Repository ist dort als griffo registriert, der für immer kostenlose Spiegel als griffo-free. Unter Debian (bookworm, trixie, forky und sid) sind die Befehle oben damit die gesamte Einrichtung.
extrepo richtet nur die Sources-Datei und den Schlüssel ein; die Zugangsdaten eines Abos gehören weiterhin in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu wird nicht abgedeckt, denn extrepo veröffentlicht Metadaten nur für Debian-Suites: dort nimmst du die Befehle mit sudo oder als root.
Schritt 2: lnav installieren
# Neuestes lnav installieren (ersetzt das ältere lnav der Distribution an Ort und Stelle)
sudo apt install lnav
# Installation prüfen
dpkg -s lnav | grep Version# Neuestes lnav installieren (ersetzt das ältere lnav der Distribution an Ort und Stelle)
apt install lnav
# Installation prüfen
dpkg -s lnav | grep VersionSchritt 3: Der erste Start
# Logs unter /var/log sind für root und die Gruppe adm lesbar
sudo lnav /var/log
# Kein rsyslog (der Debian-Standard)? Das systemd-Journal als JSON lesen
journalctl -o json | lnav
# Deine eigenen Logs brauchen kein sudo; die Formate werden erkannt
lnav ~/app/logs/
# In lnav öffnet ? die eingebaute Hilfe, q beendet es# Logs unter /var/log sind für root und die Gruppe adm lesbar
lnav /var/log
# Kein rsyslog (der Debian-Standard)? Das systemd-Journal als JSON lesen
journalctl -o json | lnav
# Deine eigenen Logs brauchen kein sudo; die Formate werden erkannt
lnav ~/app/logs/
# In lnav öffnet ? die eingebaute Hilfe, q beendet es🎯 Grundlegende Verwendungsbeispiele
Logs lesen und verfolgen:
# Rotierte und komprimierte Logs öffnen sich direkt, Archive ebenso
lnav /var/log/nginx/access.log.2.gz support-bundle.tar.gz
# Mehrere Quellen, nach Zeitstempel zu einer Zeitachse zusammengeführt
lnav /var/log/nginx/ ~/app/logs/app.log
# Ein Log auf einem anderen Rechner, über deine normale ssh-Konfiguration
lnav user@host:/var/log/syslogFiltern und SQL:
# In lnav: e / E springt zum nächsten / vorigen Fehler, w / W zu Warnungen
# :filter-in error nur passende Zeilen behalten
# :filter-out healthcheck passende Zeilen ausblenden
# ;SELECT c_ip, count(*) AS hits FROM access_log GROUP BY c_ip ORDER BY hits DESC
# Dieselbe Abfrage ohne Oberfläche, für Skripte
lnav -n -c ';SELECT sc_status, count(*) FROM access_log GROUP BY sc_status' /var/log/nginx/access.logAktuell bleiben:
# lnav wird mit dem restlichen System aktualisiert
sudo apt update && sudo apt upgrade
# Welche Version installiert ist und welche die neueste verfügbare ist
apt policy lnav
# Wieder entfernen
sudo apt remove lnav# lnav wird mit dem restlichen System aktualisiert
apt update && apt upgrade
# Welche Version installiert ist und welche die neueste verfügbare ist
apt policy lnav
# Wieder entfernen
apt remove lnav🔧 Werkzeug-Integrationen
lnav liest alles, was Text erzeugt, aus Dateien, aus Pipes und von anderen Rechnern:
- ssh: entfernte Pfade wie
user@host:/var/log/sysloglaufen über deine bestehende ssh-Konfiguration und deine Schlüssel; das Paket empfiehlt dafüropenssh-client - systemd-Journal: leite
journalctl -o json(mit-fzum Verfolgen) in lnav, und jedes Journal-Feld wird durchsuchbar und abfragbar - Container:
docker logs -f app 2>&1 | lnavoderkubectl logs -f pod | lnavgibt Container-Ausgaben dieselbe Hervorhebung und dasselbe SQL - Zwischenablage: Zeilen markieren und
cdrücken, um sie zu kopieren; das Paket schlägtwl-clipboardoderxclipfür Wayland und X11 vor - Eigene Formate: beschreibe ein hauseigenes Log-Format in einer JSON-Datei und installiere es mit
lnav -i myformat.json; danach bekommt es Erkennung, Hervorhebung und eine eigene SQL-Tabelle - Skripte und CI:
lnav -n -cführt Befehle und Abfragen ohne Oberfläche aus, dasselbe SQL, das interaktiv eine Frage beantwortet, läuft also auch in einem Cronjob oder einer Pipeline - Dokumentation: die Manpage kommt mit dem Paket (
man lnav), das vollständige Handbuch steht unter docs.lnav.org
🚀 Warum deb.griffo.io?
- Offizielles Debian: liefert lnav 0.12.4 in trixie und 0.11.1 in Bookworm, jeweils für die Lebensdauer des Release eingefroren
- Upstream-Downloads: ein Zip mit einer statischen Binärdatei von der GitHub-Release-Seite, von Hand in deinen PATH kopiert, ohne Manpage, und für jedes Release erneut zu holen
- Selbst aus dem Quelltext bauen: eine C++-Toolchain plus die Entwicklungspakete von SQLite, PCRE2, ncurses, libarchive und libcurl, und ein langer Build
- deb.griffo.io: neueste Version mit automatischen Updates
- ✅ Derselbe Paketname wie bei Debian: das Paket heißt
lnav, genau wie im Debian-Archiv, dieses Repository aktualisiert das mitgelieferte lnav also beiapt upgradean Ort und Stelle, und ein späteresapt removehinterlässt nichts - ✅ Der offizielle statische Build: upstreams eigene statische musl-Binärdatei, ganz ohne Laufzeitabhängigkeiten und auf jeder Version mit demselben Verhalten
- ✅ Vollständiges Paket: die Binärdatei
lnavund ihre Manpage, mitopenssh-clientals Empfehlung für entfernte Logs undwl-clipboardoderxclipals Vorschlag zum Kopieren von Zeilen - ✅ Automatische Updates: Pakete werden innerhalb von Stunden nach dem Upstream-Release aktualisiert
- ✅ Zwei Architekturen: amd64 und arm64 auf jeder Version, dasselbe lnav läuft also auf Servern, Laptops und ARM-Boards wie dem Raspberry Pi
- ✅ Multi-Distribution: läuft auf Bookworm, Trixie, Forky und Sid
- ✅ Einfache Wartung: Updates mit den üblichen apt-Befehlen
📦 Paket-Build-Repository
Die Debian-Pakete werden in diesem GitHub-Repository automatisch gebaut und gepflegt:
- 🪵 lnav-debian - Builds der neuesten Releases
🔗 Verwandte Pakete
Ebenfalls verfügbar über deb.griffo.io:
- lazydocker - Eine Terminal-Oberfläche für Docker, um den Container zu finden, dessen Logs du brauchst
- k9s - Eine Terminal-Oberfläche für Kubernetes-Cluster und ihre Pods
- ripgrep - Schnelle rekursive Suche, um einen ganzen Log-Baum auf einmal zu durchsuchen
- bottom - Ein Systemmonitor fürs Terminal, für das, was die Logs nicht verraten
- fzf - Ein Fuzzy Finder, um die zu öffnende Logdatei auszuwählen