
Лаборатория исследований безопасности, воспроизводящая CVE-2026-41414 (pull_request_target pwn в .github/workflows/pr.yml) — снимок skim-rs/skim @ ca986f4, не форк.
Автоматически созданный исследовательский артефакт — не вышестоящий проект.
Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это точный снимок
skim-rs/skimна коммитеca986f444c37d2c1dc15ce1fad2fe101776af8d9(2026-04-14), распространённый под собственной лицензией этого проекта, файл которой включён в этот снимок без изменений.Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение — никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на те значения, которым они соответствовали на 2026-04-14; см.
pinning.mdв выводе системы для каждого изменения, внесённого в снимок.Вопросы или возражения: [email protected]
Жизнь коротка — пользуйся skim!
Мы тратим так много времени на навигацию по файлам, строкам и командам. Вот тут и появляется Skim! Это мощный нечёткий поисковик (fuzzy finder), созданный, чтобы сделать ваш рабочий процесс быстрее и эффективнее.
Skim предоставляет один исполняемый файл под названием sk. Считайте его более умной альтернативой таким инструментам, как
grep — попробовав его однажды, вы удивитесь, как жили без него раньше!
Проект skim содержит несколько компонентов:
sk — основная программаsk внутри Vim/Nvim. Проверьте skim.vim для поддержки Vim.| ОС | Менеджер пакетов | Команда |
|---|---|---|
| macOS | Homebrew | brew install sk |
| macOS | MacPorts | sudo port install skim |
| Alpine | apk | apk add skim |
| Arch | pacman | pacman -S skim |
| Fedora | COPR | см. ниже |
| Gentoo | Portage | emerge --ask app-misc/skim |
| Guix | guix | guix install skim |
| Void | XBPS | xbps-install -S skim |
Актуальные пакеты Fedora предоставляются через неофициальный репозиторий COPR, поддерживаемый сообществом.```bash sudo dnf copr enable sisyphus1813/skim sudo dnf install skim
## Вручную
Подходит любой из следующих способов:
- Использование скрипта установки:
```sh
# Всегда проверяйте содержимое скрипта перед его запуском!
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/skim-rs/skim/releases/latest/download/skim-installer.sh | sh
```
- Использование бинарного файла: просто [скачайте исполняемый файл sk](https://github.com/skim-rs/skim/releases) напрямую.
- Установка из [crates.io](https://crates.io/): `cargo install skim`
- Сборка вручную:
```sh
$ git clone --depth 1 [email protected]:skim-rs/skim.git ~/.skim
$ cd ~/.skim
$ cargo build --release
$ # Добавьте полученный исполняемый файл `target/release/sk` в ваш PATH
```
После этого вам будут доступны:
- Страница руководства (man page), которую можно либо записать в правильный путь, либо запустить `man --local-file <(sk --man)`
- Автодополнение для оболочки (и опциональные привязки клавиш) с помощью `source <(sk --shell \<shell> \[--shell-bindings])`, подробности см. ниже
# Использование
Skim можно использовать либо как универсальный фильтр (по аналогии с `grep`), либо как
интерактивный интерфейс для запуска команд.
## Как плагин для Vim (для neovim смотрите [fzf-lua](https://github.com/ibhagwan/fzf-lua) с профилем skim)
Через vim-plug (рекомендуется):
Установите skim, затем:```vim
Plug 'skim-rs/skim'
Вот несколько примеров для начала:```bash
sk
vim $(find . -name "*.rs" | sk -m)
Эта последняя команда позволяет выбрать файлы с расширением «.rs» и открывает
ваши выделения в Vim — отличная экономия времени для разработчиков!
## Как интерактивный интерфейс
`skim` может динамически вызывать другие команды. Обычно вы захотите
интегрировать его с [grep](https://www.gnu.org/software/grep/),
[ack](https://github.com/petdance/ack2),
[ag](https://github.com/ggreer/the_silver_searcher) или
[rg](https://github.com/BurntSushi/ripgrep) для поиска содержимого в
каталоге проекта:```sh
# works with grep
sk --ansi -i -c 'grep -rI --color=always --line-number {q} .'
# works with ack
sk --ansi -i -c 'ack --color {q}'
# works with ag
sk --ansi -i -c 'ag --color {q}'
# works with rg
sk --ansi -i -c 'rg --color=always --line-number {q}'
Примечание: В этих примерах
{q}будет буквально подставлено как текущий вводимый запрос (заключённый в одинарные кавычки). Это означает, что данные примеры будут искать точную строку запроса, а не нечётко. Для нечёткого поиска передавайте вывод команды вskбез использования интерактивного режима.

Привязки для Fish, Bash и Zsh доступны в каталоге shell:
completion.{shell} содержит скрипты автодополнения для использования sk в командной строкеkey-bindings.{shell} содержит сочетания клавиш и интеграции с оболочкой:
ctrl-t для выбора файла через skctrl-r для выбора записи из истории через skalt-c для перехода cd в каталог, выбранный через skfish) ** для автодополнения путей к файлам, например ls **<tab> покажет виджет sk для выбора папкиЧтобы включить эти функции, подключите файл key-bindings.{shell} и настройте автодополнение в соответствии с документацией вашей оболочки или см. ниже.
Вы можете сгенерировать автодополнение для вашей предпочтительной оболочки с помощью флага --shell с одной из поддерживаемых оболочек: bash, zsh, fish, powershell или elvish:
source <(sk --shell bash)
source <(sk --shell zsh)
sk --shell fish | source
#### Вариант 2: Сохранение в файл для автоматической загрузки при запуске оболочки```sh
# For bash, add to ~/.bashrc
echo 'source <(sk --shell bash)' >> ~/.bashrc # Or save to ~/.bash_completion
# For zsh, add to ~/.zshrc
sk --shell zsh > ~/.zfunc/_sk # Create ~/.zfunc directory and add to fpath in ~/.zshrc
# For fish, add to ~/.config/fish/completions/
sk --shell fish > ~/.config/fish/completions/sk.fish
Некоторые часто используемые привязки клавиш:
| Клавиша | Действие |
|---|---|
| Enter | Принять (выбрать текущий вариант и выйти) |
| ESC/Ctrl-G | Прервать |
| Ctrl-P/Вверх | Переместить курсор вверх |
| Ctrl-N/Вниз | Переместить курсор вниз |
| TAB | Переключить выбор и переместиться вниз (с -m) |
| Shift-TAB | Переключить выбор и переместиться вверх (с -m) |
Полный список привязок клавиш приведён на странице
руководства (man sk).
skim заимствует синтаксис fzf для сопоставления элементов:
| Токен | Тип сопоставления | Описание |
|---|---|---|
text | нечёткое сопоставление | элементы, соответствующие text |
^music | точное по префиксу | элементы, начинающиеся с music |
.mp3$ | точное по суффиксу | элементы, заканчивающиеся на .mp3 |
'wild | точное (в кавычках) | элементы, содержащие wild |
!fire | обратное точное | элементы, не содержащие fire |
!.mp3$ | обратное точное по суффиксу | элементы, не заканчивающиеся на .mp3 |
skim также поддерживает комбинацию токенов.
Пробел означает И. С термином src main skim будет искать
элементы, соответствующие обоим src и main.
| означает ИЛИ (обратите внимание на пробелы вокруг |). С термином .md$ | .markdown$ skim будет искать элементы, заканчивающиеся либо на .md, либо на
.markdown.
ИЛИ имеет более высокий приоритет. Например, readme .md$ | .markdown$ интерпретируется как
readme И (.md$ ИЛИ .markdown$).
При использовании опции --split-match каждая часть вокруг пробелов или | будет сопоставляться раздельно:
:) отсутствует в запросе, выполняется обычное сопоставлениеrg для сопоставления как по имени файла, так и по содержимому.Если вы предпочитаете использовать регулярные выражения, skim предлагает режим regex:```sh
sk --regex
Вы можете динамически переключиться в режим `regex`, нажав `Ctrl-R` (Rotate Mode).
## exit code
| Exit Code | Значение |
|-----------|-------------------------------------|
| 0 | Завершено нормально |
| 1 | Совпадений не найдено |
| 130 | Прервано с помощью Ctrl-C/Ctrl-G/ESC и т.д. |
# Инструменты, совместимые с `skim`
Эти инструменты совместимы с `skim` или стремятся к этому:
## [fzf-lua neovim plugin](https://github.com/ibhagwan/fzf-lua)
Плагин для [neovim](https://neovim.io), позволяющий использовать fzf и skim для навигации по вашему коду.
Установите его с помощью вашего менеджера пакетов, следуя README. Например, с `lazy.nvim`:```lua
{
"ibhagwan/fzf-lua",
-- enable `sk` support instead of the default `fzf`
opts = {'skim'}
}
Плагин для nushell, обеспечивающий более качественное взаимодействие между skim и nushell.
Следуя инструкциям в README плагина, вы можете установить его с помощью cargo:```nu cargo install nu_plugin_skim plugin add ~/.cargo/bin/nu_plugin_skim
## [sqlite extension](https://github.com/tzachar/sqlite_skim)
Загружаемый модуль `sqlite`, который добавляет функцию `skim_score` в SQL-запросы.
# Настройка
Документация здесь — лишь краткий обзор, полный список опций смотрите в man-странице (`man sk`).
## Раскладка клавиш
Указывайте привязки парами через запятую (без пробелов). Например:```sh
sk --bind 'alt-a:select-all,alt-d:deselect-all'
Кроме того, используйте + для объединения действий, например execute-silent(echo {} | pbcopy)+abort.
Подробности см. в разделе KEY BINDINGS справочной страницы.
Для результатов существует пять ключей сортировки: score, index, begin, end, length. Вы можете
указать, как записи сортируются, с помощью sk --tiebreak score,index,-begin или в любом
другом нужном вам порядке.
Вероятно, у вас есть собственные эстетические предпочтения! К счастью, вы не ограничены внешним видом по умолчанию — Skim поддерживает всестороннюю настройку своей цветовой схемы.```sh --color=[BASE_SCHEME][,COLOR:ANSI]
Skim также учитывает переменную окружения `NO_COLOR`. Установите её в любое значение, и `sk` (а также многие другие терминальные приложения) отключит весь цветной вывод. Подробнее см. на [no-color.org](https://no-color.org/).
### Доступные базовые цветовые схемы
Skim поставляется с несколькими встроенными цветовыми схемами, которые можно использовать в качестве отправной точки:```sh
sk --color=dark # Default dark theme (256 colors)
sk --color=light # Light theme (256 colors)
sk --color=16 # Simple 16-color theme
sk --color=bw # Minimal black & white theme (no colors, just styles)
sk --color=none # Minimal black & white theme (no colors, no styles)
sk --color=molokai # Molokai-inspired theme (256 colors)
Вы можете настроить отдельные элементы интерфейса, указав значения цветов после базовой схемы:```sh sk --color=light,fg:232,bg:255,current_bg:116,info:27
Цвета можно задавать несколькими способами:
- ANSI-цвета (0-255): `sk --color=fg:232,bg:255`
- Шестнадцатеричные значения RGB: `sk --color=fg:#FF0000` (красный текст)
### Доступные параметры настройки цвета
Можно настроить следующие элементы интерфейса:
| Элемент | Описание | Пример |
|---------------------|-------------------------------------------------|----------------------------------|
| `fg` | Цвет обычного текста (передний план) | `--color=fg:232` |
| `bg` | Цвет фона обычного текста | `--color=bg:255` |
| `matched` | Совпавший текст в результатах поиска | `--color=matched:108` |
| `matched_bg` | Фон совпавшего текста | `--color=matched_bg:0` |
| `current` | Цвет текущей строки (передний план) | `--color=current:254` |
| `current_bg` | Цвет фона текущей строки | `--color=current_bg:236` |
| `current_match` | Совпавший текст в текущей строке | `--color=current_match:151` |
| `current_match_bg` | Фон совпавшего текста в текущей строке | `--color=current_match_bg:236` |
| `spinner` | Цвет индикатора выполнения | `--color=spinner:148` |
| `info` | Цвет строки информации | `--color=info:144` |
| `prompt` | Цвет приглашения ввода | `--color=prompt:110` |
| `cursor` | Цвет курсора | `--color=cursor:161` |
| `selected` | Цвет маркера выбранного элемента | `--color=selected:168` |
| `header` | Цвет текста заголовка | `--color=header:109` |
| `border` | Цвет границы для предпросмотра/раскладки | `--color=border:59` |
### Примеры```sh
# Use light theme but change the current line background
sk --color=light,current_bg:24
# Custom theme with multiple colors
sk --color=dark,matched:#00FF00,current:#FFFFFF,current_bg:#000080
# High contrast theme
sk --color=fg:232,bg:255,matched:160,current:255,current_bg:20
Для получения дополнительных сведений обратитесь к man-странице (man sk).
--ansi: для разбора ANSI-кодов цветов (например, \e[32mABC) источника данных--regex: использовать запрос как регулярное выражение для сопоставления с источником данныхВ интерактивном режиме вы можете динамически вызывать команду. Попробуйте:```sh sk --ansi -i -c 'rg --color=always --line-number {q}'
### Как это работает?

- Skim принимает два вида источников: вывод команды или данные из конвейера (piped input)
- Skim имеет два вида подсказок: подсказка запроса для указания шаблона поиска и
подсказка команды для указания «аргументов» команды
- `-c` используется для указания команды, которую нужно выполнить, и по умолчанию принимает значение `SKIM_DEFAULT_COMMAND`
- `-i` указывает Skim открыть подсказку команды при запуске, которая по умолчанию будет показывать `c>`.
Чтобы дополнительно сузить результаты, возвращаемые командой, нажмите
`Ctrl-Q`, чтобы переключиться в интерактивный режим.
## Запуск внешних программ
Вы можете настроить привязки клавиш для запуска внешних процессов, не выходя из Skim (`execute`, `execute-silent`).```sh
# Press F1 to open the file with less without leaving skim
# Press CTRL-Y to copy the line to clipboard and aborts skim (requires pbcopy)
sk --bind 'f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort'
Skim предлагает несколько алгоритмов, полный список см. в справке или man-странице. Среди них:
skim_v2, алгоритм по умолчанию, частично основанный на алгоритме fzffrizbee, использует frizbee, устойчивый к опечаткам алгоритм из плагина blink.cmp для neovim (только x86_64 и aarch64)fzy, основан на алгоритме fzy, расширенном для базовой устойчивости к опечаткамarinae, новейший алгоритм skim, разработанный внутри компании с учётом устойчивости к опечаткам, развивающий все вышеперечисленные подходы, чтобы сделать сопоставление с учётом опечаток более естественным, сохраняя при этом производительность на элемент на высочайшем уровнеЭто отличная функция fzf, которую skim заимствует. Например, мы используем 'ag' для
поиска совпадающих строк, и когда мы сужаем выбор до целевых строк, мы хотим
окончательно решить, какие строки выбрать, проверив контекст вокруг строки.
grep и ag имеют опцию --context, и skim может использовать --context для
улучшенного окна предпросмотра. Например:```sh
sk --ansi -i -c 'ag --color {q}' --preview "preview.sh {}"
(Обратите внимание, что [preview.sh](https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh) — это скрипт для вывода контекста по заданным filename:lines:columns)
Вы получите примерно следующее:

### Как это работает?
Если команда предпросмотра задана через опцию `--preview`, skim заменит
`{}` на текущую подсвеченную строку, заключённую в одинарные кавычки, вызовет
команду для получения вывода и отобразит этот вывод в окне предпросмотра.
Иногда вам не нужна вся строка для вызова команды. В этом случае
вы можете использовать `{}`, `{1..}`, `{..3}` или `{1..5}` для выбора полей.
Синтаксис объяснён в разделе [Fields Support](#filds-support).
Наконец, вы можете настроить положение окна предпросмотра с помощью `--preview-window`:
- `--preview-window up:30%` — разместить окно сверху с высотой
30% от общей высоты skim.
- `--preview-window left:10:wrap` — указать `wrap`, что позволяет окну
предпросмотра переносить вывод команды предпросмотра.
- `--preview-window wrap:hidden` — скрыть окно предпросмотра при запуске; позже
его можно показать с помощью действия `toggle-preview`.
## Fields support
Обычно это нужно понимать только пользователям плагинов.
Например, у вас есть источник данных с форматом:```sh
<filename>:<line number>:<column number>
Однако вы хотите искать <filename> только при вводе запросов. Это
означает, что при вводе 21 вы хотите найти <filename>, содержащий 21,
но не сопоставляя номер строки или номер столбца.
Вы можете использовать sk --delimiter ':' --nth 1 для этого.
Вы также можете использовать --with-nth для изменения порядка полей.
Синтаксис диапазонов
<num> — указывает на num-е поле, начиная с 1.start.. — начиная с start-го поля и до конца...end — начиная с 0-го поля и до end-го поля,
включая end.start..end — начиная с start-го поля и до end-го
поля, включая end.Skim можно использовать как библиотеку в ваших Rust-крейтах.
Сначала добавьте skim в ваш Cargo.toml:```toml
[dependencies]
skim = { version = "", default-features = false, features = [..] }
_Примечание о функциях_:
- функция `cli` требуется для использования skim в качестве интерфейса командной строки; она *не должна* быть нужна при использовании его как библиотеки.
### Базовое использование
Затем попробуйте запустить этот простой пример:```rust
extern crate skim;
use skim::prelude::*;
use std::io::Cursor;
pub fn main() {
let options = SkimOptionsBuilder::default()
.height("50%")
.multi(true)
.build()
.unwrap();
let input = "aaaaa\nbbbb\nccc".to_string();
// `SkimItemReader` is a helper to turn any `BufRead` into a stream of `SkimItem`
// `SkimItem` was implemented for `AsRef<str>` by default
let item_reader = SkimItemReader::default();
let items = item_reader.of_bufread(Cursor::new(input));
// `run_with` would read and show items from the stream
let selected_items = Skim::run_with(&options, Some(items))
.map(|out| out.selected_items)
.unwrap_or_else(|| Vec::new());
for item in selected_items.iter() {
println!("{}", item.output());
}
}
Вы также можете получить детальное использование skim как библиотеки с помощью tokio и асинхронного кода, что позволяет динамически взаимодействовать с
При наличии Option<SkimItemReceiver> skim будет соответствующим образом считывать элементы, выполнять свою
работу и возвращать нам выбор пользователя, включая выбранные элементы, запрос
и т.д. Обратите внимание, что:
SkimItemReceiver — это crossbeam::channel::Receiver<Arc<dyn SkimItem>>Трейт SkimItem предоставляется для настройки того, как строка может отображаться,
сравниваться и просматриваться. По умолчанию он реализован для AsRef<str>
Кроме того, SkimItemReader — это помощник для преобразования BufRead в
SkimItemReceiver (мы можем легко превратить File или String в BufRead),
чтобы вы могли легко работать со строками или файлами.
Дополнительные примеры смотрите в каталоге examples/.
Эти бенчмарки запускают интерактивный интерфейс в сессии tmux и ожидают стабилизации пользовательского интерфейса.

Вы можете сгенерировать графики, используя just bench-plot или запустив рецепт вручную в GNU bash.
Skim вызывает find . для получения списка файлов для фильтрации. Вы можете переопределить
это, задав переменную окружения SKIM_DEFAULT_COMMAND. Например:```sh
$ SKIM_DEFAULT_COMMAND="fd --type f || git ls-tree -r --name-only HEAD || rg --files || find ."
$ sk
Можно добавить это в ваш `.bashrc` или `.zshrc`, если хотите, чтобы оно было по умолчанию.
## Некоторые файлы не отображаются в плагине Vim
Если вы используете плагин Vim и выполняете команду `:SK`, вы можете обнаружить, что некоторые
из ваших файлов не отображаются.
Как описано в [#3](https://github.com/skim-rs/skim/issues/3), в плагине
Vim переменная `SKIM_DEFAULT_COMMAND` по умолчанию устанавливается на команду:```vim
let $SKIM_DEFAULT_COMMAND = "git ls-tree -r --name-only HEAD || rg --files || ag -l -g \"\" || find ."
Это означает, что файлы, не распознанные git, не будут показаны. Вы можете либо переопределить
значение по умолчанию с помощью let $SKIM_DEFAULT_COMMAND = '', либо найти отсутствующие файлы
самостоятельно.
fzf — это консольный нечёткий поисковик, написанный на Go, а skim пытается реализовать новый такой же на Rust!
Этот проект написан с нуля. Некоторые решения по реализации отличаются от fzf. Например:
skim есть интерактивный режим.skim поддерживает предварительный выбор.В более общем смысле, сопровождающие skim позволяют себе некоторую свободу реализации.
Цель — сохранить skim таким же функционально полным, как fzf, но флаги команд могут отличаться.
Создавайте новые issues, если вы столкнулись с какими-либо ошибками или у вас есть какие-либо идеи. Pull request'ы приветствуются.
Включён файл Vagrantfile для запуска виртуальной машины Windows Server 2022 Core без графического интерфейса для тестирования
совместимости с Windows без необходимости в GUI. Для этого требуются VirtualBox
и Vagrant на вашем хосте (vagrant включён в Nix dev
shell через flake.nix).```sh
vagrant up # First boot: downloads the box and provisions (~15–20 min)
ssh -p 2222 vagrant@localhost # Password: vagrant
Внутри виртуальной машины корень проекта смонтирован в `C:\vagrant`:```powershell
cd C:\vagrant
cargo build
cargo test
Последующие загрузки выполняются быстро — подготовка выполняется только один раз:```sh vagrant halt # Stop the VM vagrant up # Resume vagrant destroy # Delete the VM entirely
# Устранение неполадок
Чтобы разобраться в происходящем, вы можете задать переменную окружения `SKIM_LOG` или флаг `--log-level` со значением `debug` или даже `trace`, а также задать переменную окружения `SKIM_LOG_FILE` или флаг `--log-file` с указанием пути. Затем вы можете читать эти журналы во время или после выполнения, чтобы лучше понять, что происходит. Не стесняйтесь добавлять эти журналы в issue, если вам нужна помощь.
## Проблемы с переводами строк в nix, FreeBSD, termux
Если вы столкнулись с проблемами отображения, например:```bash
$ for n in {1..10}; do echo "$n"; done | sk
0/10 0/0.> 10/10 10 9 8 7 6 5 4 3 2> 1
Например
Вам нужно установить TERMINFO или TERMINFO_DIRS на путь к корректной базе данных terminfo
Например, с termux вы можете добавить это в ваш bashrc:``` export TERMINFO=/data/data/com.termux/files/usr/share/terminfo
# Бенчмарки
## Интерактивный бенчмарк (`cli`)
Бенчмарк `cli` сравнивает skim (или любой совместимый бинарный файл) с другими версиями или fzf, запуская интерактивный интерфейс внутри сессии tmux и опрашивая строку состояния до тех пор, пока количество совпадений не стабилизируется. Это ни в коем случае не точное или безошибочное измерение, но оно имеет дополнительное преимущество — сравнение с `fzf`, а также предоставление метрик ресурсов (пиковое значение RSS и CPU).```sh
cargo bench --bench cli -- run # defaults: sk, 1 M items, query "test"
cargo bench --bench cli -- run sk -n 500000 -q foo # bare name resolved via $PATH
cargo bench --bench cli -- run ./old/sk ./new/sk -r 5 # compare two binaries, 5 runs each
cargo bench --bench cli -- run sk -f input.txt -q search # use an existing file
cargo bench --bench cli -- generate -f testdata.txt -n 2000000 # generate input file and exit
cargo bench --bench cli -- run sk --perf # record perf data (auto-named file)
cargo bench --bench cli -- run sk --strace # record strace data (auto-named file)
cargo bench --bench cli -- run sk -p perf.data # record perf data to perf.data
cargo bench --bench cli -- run sk -j # JSON output
cargo bench --bench cli -- run sk -r 3 -- --tiebreak=index # pass extra flags to sk
Имена бинарных файлов перед использованием преобразуются в абсолютные пути через which, поэтому короткие имена вроде sk или fzf работают, если они находятся в $PATH.
Критериальные бенчмарки доступны для более точного измерения производительности skim.
Чтобы запустить их, необходимо сгенерировать входные данные с помощью cargo bench --bench cli -- -g benches/fixtures/10M.txt -n 10000000 && cargo bench --bench cli -- -g benches/fixtures/1M.txt -n 1000000, а затем выполнить cargo bench -j 1.
Они будут выполняться в течение нескольких минут.