Найти в Дзене

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

Исходный сайт представленного материала: r4ven.me Говорят, если долго читать белый текст на черном фоне, то начинаешь слышать, как шепчет терминал🙃. В этой заметке поговорим, как улучшить восприятие текста из “черного окошка” путем подсветки синтаксиса с помощью утилит командной строки bat и exa. Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐. Приступаем😎. bat — это усовершенствованная версия команды cat☝️. Она используется для вывода содержимого файлов, но с дополнительными функциями📋: exa — современная альтернатива команде ls☝️, которая предлагает улучшенный и более читаемый вывод списка файлов и папок. Коротко, что умеет📋: Далее я просто продемонстрирую, как это все выглядит уже c настроенными алиасами (alias, псевдоним) и функциями командной оболочки, а после расскажу, как подобное настроить у себя🧑‍💻. Все действия из статьи выполн
Оглавление
bat, exa – подсветка синтаксиса стандартного вывода в терминале Linux (cat, less, tail и ls)
bat, exa – подсветка синтаксиса стандартного вывода в терминале Linux (cat, less, tail и ls)
Исходный сайт представленного материала: r4ven.me

Приветствую!

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

Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐.

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

-2

Кто такие bat и exa

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

  • подсветка синтаксиса для более чем 50 языков;
  • нумерация строк;
  • поддержка стилей, например, подчеркивание изменений в git;
  • интуитивный вывод с использованием pager (например, less), если файл слишком большой для экрана;
  • с помощью командных конструкций может выступать в качестве альтернативы для less, tail, man и др.

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

  • цветовая подсветка файлов, типов и прав доступа;
  • удобный формат для отображения древовидной структуры директорий (--tree);
  • поддержка git-информации, отображая статус файлов;
  • более подробное отображение времени изменения, разрешений и владельцев файлов.

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

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

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

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

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

man bash

с bat
с bat
без bat
без bat

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

tar --help

с bat
с bat
без bat
без bat

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

help gzip

с bat
с bat
без bat
без bat

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

-9

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

less ~/.zshrc

с bat
с bat
без bat
без bat

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

-12

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

cat ~/.bashrc

с bat
с bat
без bat
без bat

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

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

tailf /var/log/apt/history.log

c bat
c bat
без bat
без bat

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

-17

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

batdiff

-18

Как-то так🙂.

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

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

ls

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

ls -l

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

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

ls -la

с exa
с exa
без exa
без exa

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

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

ls -lbHigUmuSa --sort=modified --time-style=long-iso
# или короткий alias
lmm

-23
-24

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

ls -l --git --sort=modified
# или короткий alias
lg

-25

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

ls --tree
# или короткий alias
lt

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

Еще пример:

lt .config/nvim

lt .config/tmux/plugins/nord-tmux

-27

Круть😌.

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

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

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

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

sudo apt update

apt list bat exa eza

-28

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

sudo apt install -y bat eza
#или
sudo apt install -y bat exa

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

Проверяем exa:

file /usr/bin/exa

ls -l /usr/bin/exa

-30

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

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

Проверяем bat:

command -v bat || command -v batcat

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

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

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

exa --version

bat --version

-32

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

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

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

Обратите вниманием, что для выполнения команд потребуются права sudo. Либо установите шрифты только для текущего пользователя в директории ~/.local/share/fonts.

# создаем директорию шрифта
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

В команде curl используется механизм подстановки командной строки. Т.е. основной команде на скачивание: curl -fsSLO передается аргумент, который является результатом выполнения другой команды внутри конструкции $(command), выполняющейся предварительно. В итоге основная команда получит прямой URL на zip файл последнего релиза шрифта Hack из GitHub. Команда универсальна.
-33

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

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

-34

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

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

nvim ~/.zshrc

И добавляем где-нибудь в конце следующий код (ссылка на GitHub).

-35
-36

Понравился мой конфиг Neovim? Можете с легкостью создать аналогичный по статье: Neovim – Установка и настройка редактора кода с элементами IDE всего в несколько команд.

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

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

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

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

batcat --list-themes
# или
bat --list-themes

-37

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

export BAT_THEME="Nord"

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

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

source ~/.zshrc

-38

Ну вот и все😌.

Заключение

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

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

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

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

Всех благ!

Используемые источники