Hister позволяет индексировать локальные файлы и историю браузера для быстрого единого поиска. Знакомая ситуация: вы знаете, что нужная информация есть в заметке Markdown, PDF или конфигурационном файле, но не помните, где он сохранён. Команда find работает, только если известно имя файла, а grep -r вынуждена сканировать все каталоги, что на больших папках отнимает много времени.
Hister решает эту проблему, заранее создавая индекс файлов. Вместо повторного сканирования всего при каждом запросе он обращается к индексированным данным, благодаря чему поиск, обычно занимающий несколько секунд, выполняется за миллисекунды.
Инструмент протестирован на Ubuntu 26.04 и RHEL 10, но поскольку Hister распространяется в виде одного бинарного файла Go, он одинаково работает на большинстве современных дистрибутивов Linux.
Что именно делает Hister
Hister запускает небольшой локальный сервер и строит поисковый индекс выбранных папок. Вместо того чтобы перебирать все файлы при каждом запросе, он обращается к готовому индексу, что значительно ускоряет поиск.
Инструмент умеет читать содержимое PDF, DOCX, Markdown (.md), Org (.org) и простых текстовых файлов, сохраняя извлечённый текст в индексе. Это позволяет искать по содержимому, названию, типу файла или пути, даже если вы не помните имя файла.
Также Hister может индексировать историю браузера и веб-страницы с помощью специального браузерного расширения, но в этом руководстве мы сосредоточимся только на поиске локальных файлов.
Установка Hister
Загрузите последний бинарный файл Hister для вашей системы Linux со страницы релизов на GitHub. На момент написания статьи последняя стабильная версия — 0.16.0.
После загрузки сделайте файл исполняемым и переместите его в каталог из переменной PATH:
chmod +x hister
sudo mv hister /usr/local/bin/hister
Команда chmod +x даёт бинарному файлу право запуска как программы. Загруженные файлы по умолчанию обычно не имеют такого разрешения.
Команда sudo mv перемещает файл в /usr/local/bin/ — стандартное место для пользовательских программ. Поскольку этот каталог уже включён в PATH, вы сможете запускать hister из любого места без указания полного пути.
sudo необходима, потому что запись в /usr/local/bin/ требует прав администратора. Без неё операция завершится ошибкой «Permission denied».
Запуск сервера Hister
Для запуска локального сервера используется тот же инструмент командной строки. Выполните:
hister listen
По умолчанию сервер слушает 127.0.0.1:4433, то есть доступен только с этого же компьютера.
Не закрывайте окно терминала, пока работает сервер. Если закрыть терминал, сервер Hister остановится. Если нужно, чтобы он продолжал работать, пока вы используете этот же терминал для других задач, запустите его внутри мультиплексора терминала, например tmux или screen.
Когда сервер запущен, откройте браузер и перейдите по адресу:
http://localhost:4433
Откроется веб-интерфейс Hister, в котором можно искать проиндексированные файлы через простую страницу поиска в браузере.
Указание Hister, какие файлы индексировать
Hister индексирует только те папки, которые явно указаны в конфигурационном файле. По умолчанию конфигурация находится по пути:
~/.config/hister/config.yml
Если файла нет, создайте его командой:
hister create-config ~/.config/hister/config.yml
Откройте конфигурационный файл в любом текстовом редакторе:
nano ~/.config/hister/config.yml
Найдите существующую секцию indexer: и замените запись directories: [] следующей конфигурацией. Вместо /home/username/Documents укажите папку, которую должен индексировать Hister.
indexer:
detect_languages: true
directories:
- path: /home/username/Documents
filetypes:
- md
- txt
- pdf
excludes:
- "*secret*"
- "*.tmp"
max_file_size_mb: 1
Параметр path задаёт каталог для индексации.
filetypes ограничивает индексацию только указанными расширениями. В этом примере обрабатываются только Markdown (.md), текстовые (.txt) и PDF (.pdf).
excludes пропускает файлы, подпадающие под заданные шаблоны. Здесь игнорируются все файлы, содержащие в имени secret, и временные файлы с расширением .tmp.
Примечание: YAML чувствителен к отступам. Убедитесь, что пробелы в точности соответствуют примеру. Даже небольшая ошибка в отступах может помешать запуску Hister.
После сохранения файла перезапустите сервер, чтобы применить новую конфигурацию:
hister listen
Hister сразу начинает индексацию выбранной папки в фоновом режиме, поэтому можно начинать пользоваться сервером, не дожидаясь завершения всего процесса. После первоначального сканирования он автоматически отслеживает изменения в папке и обновляет индекс при добавлении, изменении или удалении файлов.
Поиск по проиндексированным файлам
Когда сервер Hister запущен и файлы проиндексированы, откройте новое окно терминала или вкладку и выполните:
hister search
Запуск hister search без поискового запроса открывает встроенный терминальный интерфейс (TUI). По мере ввода текста совпадающие файлы появляются мгновенно.
Для навигации используйте следующие сочетания клавиш:
- Tab - переключение между полем поиска и списком результатов.
- Enter - открыть выбранный файл.
- Ctrl+D - удалить выбранную запись из индекса.
Если вам удобнее графический интерфейс, откройте браузер и перейдите по адресу:
http://localhost:4433
Веб-интерфейс позволяет искать проиндексированные файлы прямо из браузера, не обращаясь к терминалу.
Совет: не закрывайте терминал с запущенным hister listen, пока работаете с терминальным или веб-интерфейсом. Если остановить сервер, оба поисковых интерфейса перестанут работать.
Нюансы, которые часто вызывают вопросы
По умолчанию Hister индексирует только файлы размером до 1 МБ. Это ограничение задаётся параметром indexer.max_file_size_mb в конфигурационном файле. Если большой PDF- или DOCX-файл не появляется в результатах поиска, увеличьте это значение и перезапустите сервер, чтобы Hister смог проиндексировать документ.
Также Hister по умолчанию пропускает скрытые файлы и папки, а также распространённые каталоги вроде node_modules и __pycache__. Если вы хотите включить скрытые файлы, добавьте к записи каталога параметр include_hidden: true.
Например:
indexer:
detect_languages: true
directories:
- path: /home/username/Documents
include_hidden: true
filetypes:
- md
- txt
- pdf
После любых изменений в конфигурационном файле перезапустите сервер Hister, чтобы новые настройки вступили в силу.
Поиск с помощью языка запросов Hister
Проиндексировав файлы, вы можете начинать поиск из терминала командой:
hister search
Просто введите слово или фразу в поле поиска. Например, запрос invoice вернёт все проиндексированные файлы, содержащие это слово в названии, содержимом или пути.
Если нужны более точные результаты, Hister поддерживает поиск по отдельным полям:
title- ищет только по названиям файлов или страниц.text- ищет только по содержимому файлов.url- ищет по путям к файлам или URL.type:file- находит только локальные файлы.type:web- находит только проиндексированные веб-страницы.- Символ
-перед словом исключает его из результатов.
Например, чтобы найти счета, не являющиеся черновиками, введите:
invoice -draft
Можно также комбинировать несколько фильтров, использовать кавычки для точных фраз, подстановочный знак *, а также группировать условия с помощью круглых скобок и символа | (логическое ИЛИ).
Скажем, такой запрос:
title:(invoice|receipt) type:file -"draft"
Он найдёт локальные файлы, в названии которых содержится invoice или receipt, исключая любые результаты с точным словом draft.
Регистр при поиске не учитывается, поэтому запросы Invoice, invoice или INVOICE дадут одинаковые результаты.
Экспорт и резервное копирование индекса
Если вы потратили время на построение индекса, стоит сделать его резервную копию. Hister позволяет экспортировать проиндексированные данные в файл командой:
hister export backup.json
Будет создан файл backup.json с вашими проиндексированными данными. Вы можете сохранить его как резервную копию или скопировать на другую систему.
Чтобы позже восстановить индекс, используйте:
hister import file backup.json
Команда импортирует содержимое файла обратно в Hister, восстанавливая ранее экспортированный индекс.
Помимо JSON-файлов экспорта, hister import file умеет работать с сохранёнными HTML-страницами и архивами 7z, созданными из предыдущих экспортов. Можно даже указать каталог, и Hister импортирует все поддерживаемые файлы из него в порядке имён.
Распространённые ошибки
Забывают перезапустить сервер после изменения конфигурации. Hister автоматически отслеживает новые, изменённые и удалённые файлы в уже индексируемых каталогах. Однако, если вы добавили новый каталог в config.yml, необходимо перезапустить сервер, прежде чем он начнёт индексацию этого расположения.
Если файлы из недавно добавленной папки не появляются в результатах поиска, перезапустите сервер:
hister listen
Как только сервер перезапустится, Hister начнёт фоновую индексацию нового каталога.
Оставляют сервер работать на переднем плане. Многие новички держат отдельное окно терминала только ради hister listen. Это работает, но не единственный способ.
Если не хотите постоянно занимать терминал, запустите Hister в мультиплексоре tmux или screen. Для более постоянного решения можно настроить его как пользовательскую службу systemd — тогда сервер будет автоматически стартовать и оставаться в фоне после входа в систему.






Пока нет комментариев. Будьте первым!