Иногда возникает задача найти что-то в логах ручками, без установки анализаторов логов.
ㅤ
Логов может быть много, некоторые сжатые - некоторые нет. Для работы со сжатыми файлами есть утилиты, начинающиеся на z.
zcat, zgrep, zdiff... ls -/bin/z* в помощь.Для сборки логов в один я написал простой скрипт. Он выдает в stdout все логи, в порядке создания, сжатые разжимаются.
#!/bin/bash
test -z "$1" && echo "need log file" && exit
declare EXT=gz
for CUR_LOG in $(ls -tr "$1"*);do
PREFIX=z
if [[ "${CUR_LOG##*.}" != "$EXT" ]];then
PREFIX=
fi
${PREFIX}cat ${CUR_LOG}
done
Сохраняем его в файл
sumlog.sh делаем файл исполняемым:chmod +x sumlog.sh
sudo ./sumlog.sh /var/log/apache2/access.log
Лог файл без индексов и архивных расширений.
Поскольку скрипт очень простой, метод написания я выбрал максимально извращенный. :-)
declare EXT=gz - сжатый файл.ls -tr "$1"* спиcок файлов, отсортированный по времени (-t), в порядке убывания (-r)Если у файла расширение не gz, то используем утилиту cat, если gz - zcat
А дальше обрабатывать вывод можно как угодно:
sudo ./sumlog.sh /var/log/apache2/access.log|grep ...
sudo ./sumlog.sh /var/log/apache2/access.log|awk ...
sudo ./sumlog.sh /var/log/apache2/access.log|sed ...
UPD: Тут пользователь Кирилл Катаевский (@rosskk) подсказал, как можно упростить:
#!/bin/bash
test -z "$1" && echo "need log file" ||zcat -f $(ls -tr "$1"*)
tags: #bash © by Tagd Tagd
—
🔔 @bashdays