Введение
Когда дело доходит до поиска определенных текстовых шаблонов в большом количестве файлов, ручной поиск может оказаться трудной задачей. Сегодня мы углубимся в скрипт Python, который автоматизирует этот процесс, способен рекурсивно искать в каталогах и даже выполнять сложные поисковые запросы. В довершение всего, скрипт использует многопоточность для быстрого выполнения и имеет аккуратный индикатор выполнения!
Загрузите скрипт здесь:
Что делает сценарий?
Скрипт просматривает каждый файл в заданном каталоге в поисках строк, соответствующих определенным критериям поиска. Вот краткое изложение его особенностей:
- Сканирование нескольких каталогов. Скрипт использует
os.walk()
для навигации по каждому каталогу и подкаталогу, начиная с корневого каталога. - Сложные запросы. Он может обрабатывать запросы AND и OR, например «Ошибка AND 404» или «Ошибка OR Exception».
- Параллельное выполнение. Использует Python
concurrent.futures
для многопоточности, что ускоряет поиск. - Индикатор выполнения. Индикатор выполнения в реальном времени для отслеживания процесса.
- Вывод в формате JSON. Результаты можно вывести в файл JSON.
- Вывод на консоль. Если результаты не выводятся в файл JSON, они будут выведены на консоль.
Как это использовать
1. Клонируйте репозиторий:
git clone https://github.com/mikensec/logsearcher.git
2. Перейдите в папку, содержащую файл log_searcher.py.
3. Сделайте скрипт исполняемым:
В Linux или macOS:
chmod +x log_searcher.py
В Windows:
Нет необходимости делать его исполняемым. Просто запустите Python.
4. Запустите скрипт:
В Linux или macOS:
./log_searcher.py /path/to/logs “string1” “string2” --output my_results.json
В Windows:
python log_searcher.py C:\path\to\logs “string1” “string2” --output my_results.json
Шаблоны поиска
Для простого поиска строки просто заключите строку в кавычки:
”строка”
Чтобы объединить несколько поисковых запросов, используйте `and` (без учета регистра):
”string1” and “string2”
Для поиска нескольких альтернатив используйте `или` (без учета регистра):
”string1” или “string2”
Если вы укажете термины без `and` или `or`, скрипт будет искать каждый термин индивидуально во всех файлах журналов.
Примеры
Найдите IP-адреса в диапазоне 10.254.0.0/24:
./log_searcher.py /path/to/logs “¹⁰\.254\.0\.([0–9]{1,2}|[01][0–9]{2}|2[0–4][0–9]|25[0–5])$”
Найдите журналы, содержащие как «ошибки», так и «успешные»:
./log_searcher.py /path/to/logs “error” and “successful”
Сохраните результаты поиска в файл:
./log_searcher.py /path/to/logs “error" --output results.json
Заключение
Этот скрипт Python предлагает мощный, но простой способ поиска в файлах определенных текстовых шаблонов. Благодаря таким функциям, как многопоточность и сложные поисковые запросы, он обеспечивает эффективный метод анализа обширных каталогов.
Оригинально опубликовано на http://github.com.