Что такое lnav?
lnav, Logfile Navigator, — это просмотрщик логов для терминала, который сводит лог-файлы из многих источников в одно представление, упорядоченное по времени. Укажите ему несколько файлов, каталог или сжатый архив, и он сам определит форматы (syslog, журнал systemd, логи доступа Apache и nginx, JSON lines и многие другие), перемешает сообщения по времени, подсветит ошибки и предупреждения и продолжит следить за файлами по мере их роста. Дальше вы фильтруете, ищете, переходите от ошибки к ошибке, а когда вопрос не решается поиском, запрашиваете сообщения логов на SQL. Удалённые логи по ssh открываются так же просто, как локальные. lnav написан на C++ автором Tim Stack и распространяется под лицензией BSD-2-Clause.
apt upgrade.
⚡ Ключевые возможности lnav
🔀 Единая хронология
Откройте вместе syslog, лог приложения и лог веб-сервера, и lnav перемешает их строки по времени, так что вы читаете происходящее во всей системе в том порядке, в котором оно происходило.
🔍 Автоопределение форматов
syslog, JSON журнала journald, логи доступа Apache и nginx, JSON lines, logfmt и десятки других распознаются без настройки; уровни, метки времени и поля разбираются, а ошибки и предупреждения подсвечиваются.
🗄️ SQL по вашим логам
Каждый распознанный формат — это таблица. Нажмите ; и выполняйте запросы SELECT к сообщениям логов: считайте ошибки по хостам, ищите самые медленные запросы, группируйте коды ответа, с результатами в том же окне.
🌐 Удалённые логи по ssh
lnav user@host:/var/log/syslog открывает лог на другой машине через ваши обычные настройки и ключи ssh, без агента на сервере.
📦 Сжатые файлы и архивы
Ротированные логи .gz и .bz2 открываются напрямую, как и архивы .zip и .tar, так что пакет с диагностикой можно прочитать, не распаковывая его.
👀 Слежение, фильтры и поиск
Файлы отслеживаются по мере роста, фильтры скрывают или оставляют строки по шаблону, поиск подсвечивает каждое совпадение, а одна клавиша переносит к следующей ошибке или предупреждению, так что ничего важного не проскочит.
apt upgrade держит вас на последней версии.
📦 Установка из deb.griffo.io
Шаг 1: Добавить репозиторий
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 update🆓 Есть вечно бесплатное зеркало. deb-free.griffo.io раздаёт пакеты бесплатно навсегда — без аккаунта, без подписки, не более 2 месяцев позади upstream, исправления безопасности сразу. Сейчас там cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud и Zed; lnav среди них нет, поэтому репозиторий выше — единственный способ установить его сегодня; попросите, и его можно добавить.
Шаг 2: Установить lnav
# Установить последнюю версию lnav (заменяет более старый lnav дистрибутива на месте)
sudo apt install lnav
# Проверить установку
dpkg -s lnav | grep Version# Установить последнюю версию lnav (заменяет более старый lnav дистрибутива на месте)
apt install lnav
# Проверить установку
dpkg -s lnav | grep VersionШаг 3: Первый запуск
# Логи в /var/log доступны для чтения root и группе adm
sudo lnav /var/log
# Или читайте журнал systemd в JSON, с разбором каждого поля
journalctl -o json | lnav
# Свои логи открываются без sudo; форматы определяются сами
lnav ~/app/logs/
# Нажмите ? внутри lnav для встроенной справки, q для выхода# Логи в /var/log доступны для чтения root и группе adm
lnav /var/log
# Или читайте журнал systemd в JSON, с разбором каждого поля
journalctl -o json | lnav
# Свои логи открываются без sudo; форматы определяются сами
lnav ~/app/logs/
# Нажмите ? внутри lnav для встроенной справки, q для выхода🎯 Базовые примеры использования
Чтение логов и слежение за ними:
# Ротированные и сжатые логи открываются напрямую, как и архивы
lnav /var/log/nginx/access.log.2.gz support-bundle.tar.gz
# Несколько источников, сведённых в одну хронологию по времени
lnav /var/log/nginx/ ~/app/logs/app.log
# Лог на другой машине, через ваши обычные настройки ssh
lnav user@host:/var/log/syslogФильтры и SQL:
# Внутри lnav: e / E к следующей / предыдущей ошибке, w / W к предупреждениям
# :filter-in error оставить только совпадающие строки
# :filter-out healthcheck скрыть совпадающие строки
# ;SELECT c_ip, count(*) AS hits FROM access_log GROUP BY c_ip ORDER BY hits DESC
# Тот же запрос без интерфейса, для скриптов
lnav -n -c ';SELECT sc_status, count(*) FROM access_log GROUP BY sc_status' /var/log/nginx/access.logОбновления:
# lnav обновляется вместе с остальной системой
sudo apt update && sudo apt upgrade
# Какая версия установлена и какая самая новая доступна
apt policy lnav
# Удалить
sudo apt remove lnav# lnav обновляется вместе с остальной системой
apt update && apt upgrade
# Какая версия установлена и какая самая новая доступна
apt policy lnav
# Удалить
apt remove lnav🔧 Интеграции
lnav читает всё, что выдаёт текст: из файлов, из конвейеров и с других машин:
- ssh: удалённые пути вида
user@host:/var/log/syslogидут через вашу существующую конфигурацию и ключи ssh; для этого пакет рекомендуетopenssh-client - Журнал systemd: передайте
journalctl -o json(добавьте-f, чтобы следить) в lnav, и каждое поле журнала станет доступно для поиска и запросов - Контейнеры:
docker logs -f app 2>&1 | lnavилиkubectl logs -f pod | lnavдают выводу контейнеров ту же подсветку и SQL - Буфер обмена: отметьте строки и нажмите
c, чтобы скопировать их; пакет предлагаетwl-clipboardилиxclipдля Wayland и X11 - Свои форматы: опишите внутренний формат логов в JSON-файле и установите его командой
lnav -i myformat.json; он получит определение, подсветку и собственную SQL-таблицу - Скрипты и CI:
lnav -n -cвыполняет команды и запросы без интерфейса, так что тот же SQL, что отвечает на вопрос интерактивно, может работать в cron или в конвейере - Документация: man-страница идёт вместе с пакетом (
man lnav), а полное руководство находится на docs.lnav.org
🚀 Почему стоит выбрать deb.griffo.io?
- Официальная Ubuntu: поставляет lnav 0.13.2 в 26.04, 0.11.2 в Noble и 0.9.0 в Jammy, каждый заморожен на весь срок жизни своего выпуска
- Загрузки из upstream: zip со статическим бинарником со страницы релизов GitHub, который копируется в PATH вручную, без man-страницы, и скачивается заново для каждого релиза
- Сборка из исходников: тулчейн C++ плюс пакеты разработки SQLite, PCRE2, ncurses, libarchive и libcurl, и долгая сборка
- deb.griffo.io: последняя версия с автоматическими обновлениями
- ✅ То же имя пакета, что в Ubuntu: пакет называется
lnav, ровно как в архиве Ubuntu, поэтому этот репозиторий обновляет стандартный lnav на месте приapt upgrade, а последующийapt removeничего не оставляет - ✅ Официальная статическая сборка: собственный статический бинарник upstream на musl, поэтому у него вообще нет зависимостей времени выполнения и он одинаково работает на всех версиях
- ✅ Полный пакет: бинарник
lnavи его man-страница, с рекомендуемымopenssh-clientдля удалённых логов и предлагаемымиwl-clipboardилиxclipдля копирования строк - ✅ Автоматические обновления: пакеты обновляются в течение нескольких часов после релиза upstream
- ✅ Две архитектуры: amd64 и arm64 на всех версиях, так что один и тот же lnav работает на серверах, ноутбуках и ARM-платах вроде Raspberry Pi
- ✅ Много дистрибутивов: работает на Ubuntu 22.04, 24.04, 25.10 и 26.04
- ✅ Простое обслуживание: обновления обычными командами apt
📦 Репозиторий сборки пакета
Пакеты для Ubuntu собираются и поддерживаются автоматически в этом репозитории GitHub:
- 🪵 lnav-debian - Сборки последних выпусков
🔗 Похожие пакеты
Также доступны в deb.griffo.io:
- lazydocker - Терминальный интерфейс для Docker, чтобы найти контейнер, чьи логи вам нужны
- k9s - Терминальный интерфейс для кластеров Kubernetes и их подов
- ripgrep - Быстрый рекурсивный поиск, чтобы прогрепать всё дерево логов разом
- bottom - Системный монитор для терминала, для того, о чём логи молчат
- fzf - Нечёткий поиск, чтобы выбрать нужный лог-файл