bat, exa — подсветка синтаксиса стандартного вывода в терминале Linux (cat, less, tail и ls)
Приветствую!

Говорят, если долго читать белый текст на черном фоне, то начинаешь слышать, как шепчет терминал 🙃. В этой заметке поговорим, как улучшить восприятие текста из «черного окошка» путем подсветки синтаксиса с помощью утилит командной строки bat и exa.

Приступаем😎.

Кто такие bat и exa

bat — это усовершенствованная версия команды cat ☝️. Она используется для вывода содержимого файлов, но с дополнительными функциями📋:

exa — современная альтернатива команде ls ☝️, которая предлагает улучшенный и более читаемый вывод списка файлов и папок. Коротко, что умеет📋:

Демонстрация работы утилит

Далее я просто продемонстрирую, как это все выглядит уже c настроенными алиасами (alias, псевдоним) и функциями командной оболочки, а после расскажу, как подобное настроить у себя🧑💻.

Все действия из статьи выполнялись в среде дистрибутива Linux Mint 22 Cinnamon 🍃(Ubuntu 24). Но все аналогичным образом будет работать и в других, популярных дистрибутивах Linux👌.

Утилита bat, как замена man, cat, less, tail -f и git diff

Начнем с чтения man страниц:

BASH
man bash
Нажмите, чтобы развернуть и увидеть больше

с bat

без bat

Глобальный alias для командной оболочки ZSH: --help, который подсвечивает справку по выбранной команде:

BASH
tar --help
Нажмите, чтобы развернуть и увидеть больше

с bat

без bat

Аналогично, только в виде отдельной функции, которая работает и для других оболочек, в т.ч. BASH:

BASH
help gzip
Нажмите, чтобы развернуть и увидеть больше

с bat

без bat

Пока скучновато.

Идем дальше, альтернатива less:

BASH
less ~/.zshrc
Нажмите, чтобы развернуть и увидеть больше

с bat

без bat

Уже интереснее!

Приближаемся к основной цели bat — как альтернатива cat:

BASH
cat ~/.bashrc
Нажмите, чтобы развернуть и увидеть больше

с bat

без bat

Видим, что это по сути подсветка синтаксиса, как в редакторе кода, например Vim 📝.

С помощью специальной функции tailf, можно читать лог файлы в реальном времени, аналогично команде tail -f, только с большим удобством восприятия:

BASH
tailf /var/log/apt/history.log
Нажмите, чтобы развернуть и увидеть больше

c bat

без bat

Круто? Как по мне очень👍!

Таким же образом, можно настроить просмотр git diff. Вот пример функции batdiff:

BASH
batdiff
Нажмите, чтобы развернуть и увидеть больше

Как-то так🙂.

Утилита exa, как замена ls

Одной из самых популярных утилит при работе в командной строке Linux является — ls. Хоть она и имеет поддержку цветов из коробки, команда exa выводит просмотр содержимого директорий на другой уровень🆙. Вот примеры:

BASH
ls
Нажмите, чтобы развернуть и увидеть больше

вверху exa, внизу ls

BASH
ls -l
Нажмите, чтобы развернуть и увидеть больше

вверху exa, внизу ls

Как видно, exa даже поддерживает отрисовку иконок в соответствии с форматом файла😱:

BASH
ls -la
Нажмите, чтобы развернуть и увидеть больше

с exa

без exa

По моему это тоже круто. Читается легче и глаза радуются👀.

По мимо стандартных ключей ls, exa поддерживает расширенные. Вот пример колдовского заклинания🧙♂️:

BASH
ls -lbHigUmuSa --sort=modified --time-style=long-iso
# или короткий alias
lmm
Нажмите, чтобы развернуть и увидеть больше

Конечно же есть поддержка флагов git 🫡!

BASH
ls -l --git --sort=modified
# или короткий alias
lg
Нажмите, чтобы развернуть и увидеть больше

И под конец килерфича🤯 — вывод содержимого в виде древовидной структуры:

BASH
ls --tree
# или короткий alias
lt
Нажмите, чтобы развернуть и увидеть больше

Глубину вывода можно регулировать☝️.

Еще пример:

BASH
lt .config/nvim

lt .config/tmux/plugins/nord-tmux
Нажмите, чтобы развернуть и увидеть больше

Круть😌.

Установка bat и exa

И так, если вас заинтересовал данный функционал, настроить его у себя очень просто🤷♂️. Все сводится к установке двух утилит из стандартных репозиториев и добавлению нескольких блоков кода в файл загрузки окружения, например.bashrc или.zshrc (протестировал и там и там👌).

Конечно же без нюансов никуда, и их есть два: один с exa, второй с bat.

Первый: в новых дистрибутивах пакет утилиты exa называется eza (форк exa🤔). Чтобы определить, какой из этих пакетов есть в репозиториях вашего дистрибутива выполните (для deb систем):

BASH
sudo apt update

apt list bat exa eza
Нажмите, чтобы развернуть и увидеть больше

В Linux Mint 22 (Ubuntu 24) этот пакет называется eza. А вот в Debian 12 — пока еще exa. В зависимости от вывода команды выше выполняем установку:

BASH
sudo apt install -y bat eza
#или
sudo apt install -y bat exa
Нажмите, чтобы развернуть и увидеть больше

Для лучшей совместимости будем использовать имя exa.

Проверяем exa:

BASH
file /usr/bin/exa

ls -l /usr/bin/exa
Нажмите, чтобы развернуть и увидеть больше

Видим, что exa — это символьная ссылка на eza. Linux и Open Source в своем типичном представлении, что сказать…🫠

Теперь второй нюанс c утилитой bat. Дело в том, что в Debian/Ubuntu существует другой исполняемый файл с таким именем, поэтому в этих дистрибутивах исполняемый файл называется batcat, когда в остальных просто bat 🗿.

Проверяем bat:

BASH
command -v bat || command -v batcat
Нажмите, чтобы развернуть и увидеть больше

command — это встроенная в оболочку команда запуска программ без использования переменных и алиасов текущего сеанса, флаг -v — выводит подробности о вызываемой команде.

Тут видно, что в Linux Mint исполняемый файл называется batcat.

Вот такие версии утилит доступны в репозиториях на момент написания статьи:

BASH
exa --version

bat --version
Нажмите, чтобы развернуть и увидеть больше

Установка powerline шрифта

Если вы хотите использовать отрисовку иконок в вашем терминале, как на скриншотах с exa — вам необходимо использовать специальный мноноширный иконочный powerline шрифт 🤯, например, из проекта Nerd fonts. В ином случае, просто пропустите этот шаг, а в конфиге ниже уберите параметр --icons у команд с exa.

Мои читатели знают, что я предпочитаю шрифт Hack ☝️. Вот простой пример, как его можно установить:

BASH
# создаем директорию шрифта
sudo mkdir /usr/share/fonts/Hack

# скачиваем архив со шрифтами
curl -fsSLO \
    $(curl -s https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest \
    | grep browser_download_url \
    | grep 'Hack.zip' \
    | cut -d  '"' -f 4)

# распаковываем архив, коприруем шрифты в систем
sudo unzip ./Hack.zip -d /usr/share/fonts/Hack/ && rm -f ./Hack.zip
Нажмите, чтобы развернуть и увидеть больше

После установки шрифта, активируйте его в настройках вашего терминала🛠.

В Gnome-terminal это делается так:

Создание alias и функций для.bashrc и.zshrc

Теперь необходимо добавить нужный функционал в файл окружения оболочки🐚. В моем примере используется ZSH:

BASH
nvim ~/.zshrc
Нажмите, чтобы развернуть и увидеть больше

И добавляем где-нибудь в конце следующий код:

BASH
# Определение переменной с именем утилиты: bat или batcat
if [[ -e $(which batcat) ]]; then
    export bat="batcat"
    alias bat="batcat"
elif [[ -e $(which bat) ]]; then
    export bat="bat"
fi

# Конфигурация утилиты bat
if [[ -n $bat ]]; then
    export COLORTERM="truecolor"
    export BAT_THEME="Nord"  # Цветовая тема
    export MANPAGER="sh -c 'col -bx | $bat --language=man --style=plain'"  # Команда для просмотра man-страниц
    export MANROFFOPT="-c"  # Отключение перенос строк в man
    alias cat="$bat --style=plain --paging=never"
    alias less="$bat --paging=always"
    if [[ $SHELL == *zsh ]]; then # глобальный алиас --help если оболочка zsh
        alias -g -- --help='--help 2>&1 | $bat --language=help --style=plain'
    fi
    # Функции help имитирует ключ --help только с bat, пример: help ls
    help() { "$@" --help 2>&1 | $bat --language=help --style=plain; }
    # Функция tailf - аналог tail -f только с bat
    tailf() { tail -f "$@" | $bat --paging=never --language=log; }
    # Функция для просмотра изменений git diff с помощью bat
    batdiff() { git diff --name-only --relative --diff-filter=d | xargs $bat --diff; }
fi

# Настройка exa как замены ls
if [[ -e $(which exa) ]]; then
    if [[ -n "$DISPLAY" || $(tty) == /dev/pts* ]]; then # отображать иконки если псевдотерминал
        alias ls="exa --group --header --icons"
    else
        alias ls="exa --group --header"
    fi
    alias ll="ls --long"
    alias l="ls --long --all --header"
    alias lm="ls --long --all --sort=modified"
    alias lmm="ls -lbHigUmuSa --sort=modified --time-style=long-iso"
    alias lt="ls --tree"
    alias lr="ls --recurse"
    alias lg="ls --long --git --sort=modified"
fi
Нажмите, чтобы развернуть и увидеть больше

Сохраняем файл и закрываем редактор.

Код выше запускается, только если в системе установлены нужные утилиты. В случае exa, также проверяется текущий сеанс оболочки: является ли он графических или псевдотерминальным. Это сделано, чтобы не отрисовывать иконки в консольном сеансе (tty). Также добавлены комментарии на русском.

Больше примеров по использованию bat и exa смотрите тут и тут.

bat из коробки поддерживает большое количество цветовых тем. В моей конфигурации используется ❄️. Для просмотра доступных тем выполните:

BASH
batcat --list-themes
# или
bat --list-themes
Нажмите, чтобы развернуть и увидеть больше

При необходимости замените:

BASH
export BAT_THEME="Nord"
Нажмите, чтобы развернуть и увидеть больше

На свою выбранную тему в вашем файле ~/.zshrc.

Чтобы применить внесенные изменения выполняем:

BASH
source ~/.zshrc
Нажмите, чтобы развернуть и увидеть больше

Ну вот и все😌.

Заключение

Сегодня наша копилка инструментов Linux администратора пополнилась двумя замечательными инструментами: bat и exa, которые легко настроить и которые есть в стандартных репозиториях почти во всех популярных дистрибутивах Linux🔥.

Данные утилиты, в сочетании с другими полезными инструментами, такими как:

превращают работу с командной строкой Linux в довольно приятный процесс😌.

Спасибо, что читаете 😊. Обязательно подписывайтесь на наш телеграм канал: @r4ven_me, чтобы не пропустить публикации новых материалов на сайте. А если остались вопросы – приглашаю вас в Вороний чат. У нас там дружелюбное микросообщество 🚶♀️🐧🚶🐧🚶♂️🐧.

Всех благ!

Используемые материалы

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/dots/bat-exa-podsvetka-sintaksisa-standartnogo-vyvoda-v-terminale-linux-cat-less-tail-i-ls/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша