📋 Три команды для работы с логами в Linux, которые я использую чаще всего 🐧



Важной составляющей работы с любого рода сервисами или приложениями является изучение логов, где отображается вся нужная информация, будь до ошибки или успешные авторизации или ответы сервера. При этом, не имеет значения являетесь ли вы системным администратором, разработчиком или обычным пользователем, который разворачивает в рамках домашней среды какой-либо сервис или приложение: логи нужны всем. Поэтому ниже расскажу про три команды для работы с логами в Linux, которые использую чаще всего. Но перед этим давайте узнаем где логи хранятся и какие они.



🗂 Места хранения логов в Linux



Естественно, место, где будут храниться логи можно определить самостоятельно через конфигурационные файлы. Но мы остановимся на классическом варианте - системной папке:



/var/log/...



Внутри нее могут располагаться как отдельные файлы-логи (имеющие расширение log), так и директории с названиями сервисов внутри которых находятся логи. Есть, естественно, исключения. Например, Docker. У него логи запущенных контейнеров находятся в другом месте:



/var/lib/docker/containers/<id_контейнера>/<id_контейнера>-json.log



Опять-таки, повторюсь, что чаще всего местоположение логов, заданное разработчиками программы или сервиса указывается в конфигурационных файлах и может, при желании, меняться пользователем. Системные логи, чаще всего, хранятся в /var/log.



📊 Какие виды логов бывают?



Расскажу, опять-таки, про классическую схему того, какие логи бывают.



access.log - содержат данные о доступе к серверу/ресурсу/приложению (например, успешные авторизации)



error.log - содержат данные об ошибках, возникающих при работе с серверами/ресурсами/приложениями.



🔤 <имя_сервиса>.log - содержат данные обо всех взаимодействиях с сервисом (доступ, ошибки, информация и пр.)



Указанные имена логов являются стандартными, конкретный вариант уже зависит от того, как решили разработчики или пользователь. Используя конфигурационные файлы вы можете задать любое имя для файла с логами. Теперь уже перейдем к командам.



1️⃣ Команда cat для просмотра содержимого лога



При использовании этой команды в терминал будет выведено все содержимое лога:



cat /var/log/<имя_лога>.log



Удобно, когда лог небольшой, в обратном случае вывод может занять длительное время.



2️⃣ Команда tail -f для вывода содержимого лога в режиме реального времени



Напомню, что команда tail выводит по-умолчанию 10 последних строк содержимого файла. Но при использовании ключа -f в выхлоп будут попадать строки лога в режиме реального времени.



tail -f /var/log/<имя_лога>.log



Удобно запустить такую команду и начать тестирование сервиса или программы, чтобы сразу видеть влетающую информацию.



3️⃣ Команда echo -n > для зануления логов



Бывает так, что логи разрастаются до неимоверных размеров. Решается это настройкой так называемой ротации (про нее расскажу отдельно в следующий раз), но если лог разросся до размеров, которые нужно занулить здесь и сейчас, то указанная команда подойдет в самый раз:



echo -n > /var/log/<имя_лога>.log



Почему нельзя решить проблему простым удалением лога при помощи rm? Некоторые сервисы используют проверку наличия файла для записи лога и если он отсутствует, то считают это ошибкой и перестают работать. Поэтому вместо кажущегося очевидного удаления файла лога нужно его просто занулить.



🏁 Работа с логами не составляет каких-то сложностей. Помимо указанных выше команд можно использовать практически все другие инструменты, применяемые к работе с файлами в Linux. В логах можно искать информацию, сортировать ее вывод в терминал, применять редактор sed и так далее. Чтобы не утруждать пользователя или администратора просмотров логов вручную существуют автоматизированные системы сбора и обработки логов, которые позволяют собирать информацию сразу с нескольких серверов. Но это уже совсем другая тема, которая находится больше в сфере системного администрирования.



Поддержите пост лайком, если он оказался полезным. Если возникли вопросы, то задавайте их в комментариях 💬