
Если вы часто пользуетесь командами ls и grep (да и сложно представить работу в терминале без них), есть две замены, которые я делаю практически на каждой своей машине, — это переход с grep на ripgrep и с ls на lsd. Обе утилиты устанавливаются через Homebrew, работают сразу из коробки и делают привычные рутинные действия в разы приятнее и нагляднее.
rg— сверхбыстрый grep на Rust, который по умолчанию учитывает.gitignore, ищет рекурсивно и подсвечивает найденное цветом.lsd— современныйlsс иконками, цветовой индикацией, размером файлов в понятном формате и встроенной поддержкой отображения дерева каталогов (--tree).
При этом ничего не ломается: классические системные grep и ls всегда остаются доступны через \grep и \ls (или command grep), если вдруг потребуется их оригинальное поведение без алиасов.
ripgrep — замена grep#
ripgrep — это утилита поиска текста, написанная на Rust. Она в разы быстрее стандартного GNU/BSD grep, по умолчанию рекурсивно просматривает все файлы в каталоге, автоматически пропускает всё, что указано в .gitignore, и скрытые директории. Основные флаги совместимы с классическими: -n, -i, -C, -l, -F.
Установка#
brew install ripgrepАлиас в .zshrc#
alias grep='rg'Примеры использования#
Поиск по всей папке проекта:
$ rg "pattern" ./project/
./src/main.rs:42: let pattern = "hello";
./docs/readme.md:17:Смотрите раздел «pattern matching»
./tests/test_utils.rs:8:assert!(matches!(result, Pattern::Found))С номерами строк (-n):
$ rg -n "TODO" ./src/
./src/handler.rs:15:// TODO: handle timeout
./src/handler.rs:47:// TODO: refactor this
./src/config.rs:3:// TODO: read from envС выводом контекста вокруг строки (-C 2 — по 2 строки до и после совпадения):
$ rg -C 2 "panic!" ./src/
./src/main.rs-10-fn run() {
./src/main.rs-11- let opts = parse_args();
./src/main.rs:12: if opts.verbose { panic!("verbose not implemented"); }
./src/main.rs-13- start_server(opts);
./src/main.rs-14-}Только имена файлов с совпадениями (-l):
$ rg -l "TODO" ./src/
./src/handler.rs
./src/config.rsФильтрация через конвейер (pipe):
cat server.log | grep "ERROR"Когда на вход поступает поток (pipe), rg автоматически считывает стандартный ввод (stdin), точно так же, как классический grep.
По умолчанию rg не заходит в служебные папки вроде .git, node_modules и файлы из .gitignore, поэтому поиск происходит моментально. Если вам нужно принудительно искать везде:
rg -u(или--no-ignore) — не учитывать.gitignore.rg -uu— не учитывать.gitignoreи искать в скрытых файлах (dotfiles).
lsd — замена ls#
lsd (LSDeluxe) — это ls следующего поколения, где из коробки включено всё то, что в обычном ls приходится вызывать длинными флагами: аккуратная подсветка типов файлов и прав доступа, человекочитаемые размеры (KB, MB), иконки и древовидная структура.
Установка#
brew install lsdСовет по иконкам: чтобы иконки отображались корректно (без квадратиков и знаков вопроса), в настройках вашего терминала (iTerm2, Ghostty, Alacritty или стандартный Терминал) должен быть выбран любой шрифт с глифами Nerd Fonts. Например,
brew install --cask font-jetbrains-mono-nerd-font.
Примеры использования#
Базовый компактный вывод:
$ lsd
build/ src/ tests/ Cargo.toml README.mdПодробный длинный формат (-l):
$ lsd -l
drwxr-xr-x tatarinovms staff 128 B Sun 27 Sep 12:59 build/
drwxr-xr-x tatarinovms staff 256 B Sun 27 Sep 12:59 src/
drwxr-xr-x tatarinovms staff 96 B Sun 27 Sep 12:59 tests/
-rw-r--r-- tatarinovms staff 4.2 KB Sun 27 Sep 12:59 Cargo.toml
-rw-r--r-- tatarinovms staff 1.1 KB Sun 27 Sep 12:59 README.mdДерево каталогов (--tree):
$ lsd --tree
.
├── build/
│ ├── output.bin
│ └── cache/
├── src/
│ ├── main.rs
│ └── lib.rs
├── tests/
│ └── test_main.rs
├── Cargo.toml
└── README.mdПринудительное отображение иконок:
$ lsd --icon always
📁 build/ 📁 src/ 📁 tests/ 📄 Cargo.toml 📋 README.mdНастройка алиасов в .zshrc#
Чтобы сделать поведение естественным, пропишите алиасы в свой ~/.zshrc:
# ripgrep вместо grep
alias grep='rg'
# lsd вместо ls + удобные сокращения
alias ls='lsd'
alias l='lsd -l'
alias la='lsd -a'
alias lla='lsd -la'
alias lt='lsd --tree'Примените изменения в текущей сессии:
source ~/.zshrcТеперь ls и grep работают через современные быстрые утилиты. Если однажды понадобится запустить оригинальные системные утилиты macOS (например, для проверки строгого POSIX-поведения), достаточно поставить перед командой обратный слэш (\grep, \ls) или префикс command (command ls).
Ссылки#
- Репозиторий ripgrep на GitHub
- Репозиторий lsd на GitHub
- Пост Brew — хватит для всего
rg --help/lsd --help— полная справка по доступным опциям прямо в терминале


