Поиск в *.gz архивах без их распаковки
Linux
Часто бывает такая ситуация, что есть острая необходимость найти в логах, которые уже были обработаны и упакованы с помощью logrotate в архивы какую-либо информацию. Например, для поиска в логах nginx или apache действий определенного IP адреса. Чтобы не распаковывать каждый архив и потом искать в нем нужную нам информацию, можно воспользоваться утилитой zgrep.
Содержимое статьи:
Поиск в конкретном gz архиве без распаковки
Если вам необходимо произвести поиск в определенном архиве, но без его распаковки, то это можно сделать следующей командой:
zgrep 'string_to_search' /var/log/nginx/sysadmin.ru-access.log.28.gz
string_to_search — строка, которую мы будем искать
/var/log/nginx/sysadmin.ru-access.log.28.gz — путь к конкретному gz файлу, в котором мы будем производить поиск
Поиск во всех gz архивах без распаковки
Если вам необходимо произвести поиск в множестве архивов, при этом не распаковывая их, то делается это следующей командой:
find /var/log/nginx/ -name '*.gz' -exec zgrep -- 'string_to_search' {} +
/var/log/nginx/ — каталог, в котором находятся архивы
'*.gz' — все архивы gz
string_to_search — строка, которую мы будем искать
Поиск только в определенных gz архивах без распаковки
Если вам необходимо произвести поиск только в определенных gz архивах, например, лог-файлах содержащих в своем названии фразу error, то делается это следующей командой:
find /var/log/nginx/ -name '*error*.gz' -exec zgrep -- 'string_to_search' {} +
/var/log/nginx/ — каталог, в котором находятся архивы
'*error*.gz' — все архивы gz, которые содержат в названии слово error
string_to_search — строка, которую мы будем искать