lsd — переписанный на Rust вариант ls с иконками, цветами, деревом каталогов и настраиваемым выводом. Он не пытается быть универсальной заменой всех утилит: задача одна — сделать просмотр каталогов быстрым и читаемым. Ниже — установка, настройка, шрифты для иконок и типичные проблемы.
Зачем менять ls
Обычный ls выводит имена в несколько колонок и раскрашивает их по типу файла. Этого достаточно, пока не приходится разбирать большой каталог: права, размеры, даты и владельцы в длинном формате читаются тяжело, а дерево приходится собирать через find. lsd добавляет иконки по типу файла, человекочитаемые размеры, относительные даты и встроенное дерево.
- Иконки для типов файлов и расширений.
- Древовидный вывод с ограничением глубины.
- Гибкая настройка через YAML без пересборки.
- Цветовые темы и подсветка прав.
- Совместимость с ключами
ls.
Есть и ограничения: lsd не показывает статус Git, не выводит расширенные атрибуты. Для поиска по имени и размеру по-прежнему нужны find и fd.
Установка
В свежих Debian и Ubuntu пакет есть в официальном репозитории. Версия может отставать от upstream, но конфигурация и основные ключи совпадают.
sudo apt update
sudo apt install lsd
lsd --version
В Fedora пакет ставится через dnf, в Arch — через pacman. Если в репозитории версии нет или нужна свежая, lsd собирают из исходников: для этого нужен Rust и компонент Cargo.
cargo install lsd
lsd --help | head -n 20
При сборке из исходников бинарник попадает в ~/.cargo/bin. Этот каталог должен быть в PATH, иначе оболочка продолжит запускать старую версию. Проверить, какой файл будет выполнен, можно командой type -a lsd.
Основные ключи
lsd принимает большинство привычных флагов: -l для длинного формата, -a для скрытых файлов, -h для человекочитаемых размеров. Собственные возможности включают дерево, сортировку и управление иконками.
lsd -la
lsd -l --tree --depth 2
lsd -l --date=relative --size=short
lsd --tree --depth 3 --ignore-glob "*node_modules*"
Ключ --depth ограничивает глубину дерева, иначе вывод на большом проекте может занять весь экран. --ignore-glob исключает каталоги вроде node_modules, а шаблон можно расширить символами подстановки. Для длинного формата полезен --total-size, который считает размер каталогов, но на больших деревьях это заметно медленнее обычного вывода.
Если иконки мешают или терминал их не поддерживает, их отключают флагом --icon=never. Цвета отключают через --color=never, а для скриптов и пайпов удобен --classic, который приближает вывод к обычному ls без лишнего оформления.
Алиасы и замена ls
Полностью заменять ls не обязательно: в скриптах лучше оставить системную утилиту, а в интерактивной оболочке — добавить алиасы. Так поведение скриптов не зависит от версии lsd и его конфигурации.
alias ls='lsd'
alias ll='lsd -l'
alias la='lsd -la'
alias lt='lsd --tree --depth 2'
Строки добавляют в ~/.bashrc или ~/.zshrc. Для fish синтаксис другой: там используется alias ls lsd или функция abbr. После правки файл перечитывают командой source ~/.bashrc либо открывают новый терминал.
В скриптах и Makefile лучше вызывать lsd явно, а не через алиас: алиасы не работают в неинтерактивных оболочках, и результат будет отличаться от ожидаемого. Если нужен парсируемый вывод, lsd не лучший выбор — для этого существуют find -print0 и stat.
Конфигурация
Настройки хранятся в ~/.config/lsd/config.yaml. Файл создают вручную: при первом запуске lsd использует значения по умолчанию и не генерирует конфиг. Формат — обычный YAML, поэтому важны отступы и отсутствие табов.
classic: false
icons:
theme: fancy
separator: " "
layout: grid
size: short
date: relative
permission: rwx
total-size: false
sorting:
column: name
order: asc
Параметр layout принимает значения grid, tree и oneline. size: short выводит размеры вида 4.2K, а date: relative — «2 hours ago». Для точных дат вместо relative указывают строку формата, например date: "+%Y-%m-%d %H:%M". Значение permission: rwx показывает права буквами, octal — цифрами.
Проверить, что конфигурация применилась, можно запуском с явным указанием файла. Если YAML содержит ошибку, lsd обычно падает с сообщением о парсинге — в нём указана строка, с которой стоит начать разбор.
lsd --config-file ~/.config/lsd/config.yaml
lsd -l --permission=octal
lsd -l --date="+%Y-%m-%d"
Иконки и шрифты
Иконки рисуются символами из Nerd Font — патченных шрифтов, в которых есть глифы для файлов, языков и устройств. Без такого шрифта вместо иконок видны квадраты или вопросительные знаки. Шрифт ставят в пользовательский каталог и обновляют кэш.
mkdir -p ~/.local/share/fonts
cp JetBrainsMonoNerdFont-Regular.ttf ~/.local/share/fonts/
fc-cache -fv
fc-list | grep -i "nerd"
После установки шрифт выбирают в настройках терминала. В GNOME Terminal, Konsole и Alacritty это делается в профиле; в tmux и SSH-клиентах шрифт должен быть настроен на стороне терминала, а не на сервере. Если иконки появились, но «съехали» по ширине, помогает моноширинный вариант Nerd Font, а не пропорциональный.
Тему иконок можно сменить в конфигурации. Если нужного набора нет, lsd использует встроенный. Отдельный файл icons.yaml позволяет переопределить символ для конкретного расширения, но для большинства задач достаточно стандартной темы.
Диагностика
Самая частая проблема — квадраты вместо иконок, и почти всегда это шрифт. Вторая — «команда не найдена» после установки из Cargo: каталог ~/.cargo/bin не добавлен в PATH. Третья — синтаксическая ошибка в YAML, из-за которой lsd не запускается.
type -a lsd
echo "$PATH" | tr ':' '\n' | grep cargo
lsd --icon=never
lsd --color=never -l
Если вывод отличается от ожидаемого в tmux, проверяют TERM и поддержку 256 цветов. Внутри контейнера или по SSH иконки могут не отображаться из-за шрифта на клиенте, а не из-за настроек сервера.
При обновлении lsd старый конфиг может содержать ключи, которых больше нет. Лишние параметры обычно игнорируются, но если поведение изменилось, конфиг временно переименовывают и сравнивают вывод с настройками по умолчанию.
Итог
lsd — аккуратная замена ls для интерактивной работы: иконки, дерево и YAML-конфигурация без сложной настройки. Ставится он из репозитория или через Cargo, требует Nerd Font для иконок и не мешает скриптам, если не подменять системную утилиту глобально. Начинать стоит с алиасов и минимального конфига, а дерево и подсчёт размеров включать по необходимости.