Поиск в *.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 — строка, которую мы будем искать



© ИТ Основа