← На главную

ffs быстрее ripgrep, но почти бесполезна без SIP — зато дико крута

21.06.2026 20:44 · hackernews

Утилита ffs ищет файлы в обход ядра — читает диски напрямую через raw device. Написана на C (около 1.5k строк). Чтобы работать с основным диском на macOS, придётся отключить SIP — иначе даже с sudo не получить доступ к суперблоку. Если читать образ .dmg или отмонтированный раздел, права не нужны. ffs может пропускать свежие записи, которые ядро ещё не сбросило на диск, — поможет ручной вызов sync. На лету меняющейся файловой системе возможны проблемы с чтением деревьев.

Поддерживаются три ФС: ext4 (самая простая, пишет на место, без COW), btrfs (сложнее, требует синхронизации суперблока — можно обойти через fsfreeze или отдельный том) и apfs (проприетарная, реверс-инжиниринг, на основном диске macOS только с отключённым SIP). ffs читает блоки напрямую, минуя VFS и буферизированный read(). Это замедляет поиск на маленьких или закешированных директориях, но на больших наборах файлов становится быстрее, чем ripgrep — потому что ядру приходится реально ходить на диск, а VFS становится накладной.

Бенчмарки с -F --no-heading -H -n --no-ignore --hidden --one-file-system --no-messages у ripgrep. Для 631k файлов (репозитории) ffs — 5.5 с, ripgrep — 4.8 с. Для 1.5M файлов — 18.4 с против 25.7 с. Для 3.25M файлов — 36.2 с против 74.7 с. ffs использует openmp для распараллеливания, а ripgrep — SIMD. Для сборки нужны libzstd (для btrfs) и openmp.

Отдельный бонус: можно искать на отмонтированных томах, просто передав путь к сырым байтам (.iso, .dmg) и тип ФС: ffs "<query>" /path/to/volume.dmg apfs. Сам автор называет ffs «практически бесполезным, но чертовски крутым» — для реальной работы он предлагает проект fff, который обгоняет ripgrep без sudo.

Читать оригинал →