Говорят, если долго читать белый текст на черном фоне, то начинаешь слышать, как шепчет терминал🙃. В этой заметке поговорим, как улучшить восприятие текста из “черного окошка” путем подсветки синтаксиса с помощью утилит командной строкиbat и exa.
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐.
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
Глобальный alias для командной оболочки ZSH: --help, который подсвечивает справку по выбранной команде:
tar --help
с bat
без bat
Аналогично, только в виде отдельной функции, которая работает и для других оболочек, в т.ч. BASH:
Приближаемся к основной цели bat – как альтернатива cat:
cat ~/.bashrc
с bat
без bat
Видим, что это по сути подсветка синтаксиса, как в редакторе кода, например Vim📝.
С помощью специальной функции tailf, можно читать лог файлы в реальном времени, аналогично команде tail -f, только с большим удобством восприятия:
tailf /var/log/apt/history.log
c bat
без bat
Круто? Как по мне очень👍!
Таким же образом, можно настроить просмотр git diff. Вот пример функции batdiff:
batdiff
Как-то так🙂.
Утилита exa, как замена ls
Одной из самых популярных утилит при работе в командной строке Linux является – ls. Хоть она и имеет поддержку цветов из коробки, команда exa выводит просмотр содержимого директорий на другой уровень🆙. Вот примеры:
ls
вверху exa, внизу ls
ls -l
вверху exa, внизу ls
Как видно, exa даже поддерживает отрисовку иконок в соответствии с форматом файла😱:
ls -la
с exa
без exa
По моему это тоже круто. Читается легче и глаза радуются👀.
По мимо стандартных ключей ls, exa поддерживает расширенные. Вот пример колдовского заклинания🧙♂️:
ls -lbHigUmuSa --sort=modified --time-style=long-iso
# или короткий alias
lmm
Конечно же есть поддержка флагов git🫡!
ls -l --git --sort=modified
# или короткий alias
lg
И под конец килерфича🤯 – вывод содержимого в виде древовидной структуры:
ls --tree
# или короткий alias
lt
Глубину вывода можно регулировать☝️.
Еще пример:
lt .config/nvim
lt .config/tmux/plugins/nord-tmux
Круть😌.
Установка bat и exa
И так, если вас заинтересовал данный функционал, настроить его у себя очень просто🤷♂️. Все сводится к установке двух утилит из стандартных репозиториев и добавлению нескольких блоков кода в файл загрузки окружения, например.bashrc или.zshrc (протестировал и там и там👌).
Конечно же без нюансов никуда, и их есть два: один с exa, второй с bat.
Первый: в новых дистрибутивах пакет утилиты exa называется eza (форк exa🤔). Чтобы определить, какой из этих пакетов есть в репозиториях вашего дистрибутива выполните (для deb систем):
sudo apt update
apt list bat exa eza
В Linux Mint 22 (Ubuntu 24) этот пакет называется eza. А вот в Debian 12 – пока еще exa. В зависимости от вывода команды выше выполняем установку:
sudo apt install -y bat eza
#или
sudo apt install -y bat exa
Для лучшей совместимости будем использовать имя exa.
Проверяем exa:
file /usr/bin/exa
ls -l /usr/bin/exa
Видим, что exa – это символьная ссылка на eza. Linux и Open Source в своем типичном представлении, что сказать…🫠
Теперь второй нюанс c утилитой bat. Дело в том, что в Debian/Ubuntu существует другой исполняемый файл с таким именем, поэтому в этих дистрибутивах исполняемый файл называется batcat, когда в остальных просто bat🗿.
Проверяем bat:
command -v bat || command -v batcat
command – это встроенная в оболочку команда запуска программ без использования переменных и алиасов текущего сеанса, флаг -v – выводит подробности о вызываемой команде.
Тут видно, что в Linux Mint исполняемый файл называется batcat.
Вот такие версии утилит доступны в репозиториях на момент написания статьи:
exa --version
bat --version
Установка powerline шрифта
Если вы хотите использовать отрисовку иконок в вашем терминале, как на скриншотах с exa – вам необходимо использовать специальный мноноширный иконочный powerline шрифт🤯, например, из проекта Nerd fonts. В ином случае, просто пропустите этот шаг, а в конфиге ниже уберите параметр --icons у команд с exa.
Мои читатели знают, что я предпочитаю шрифт Hack☝️. Вот простой пример, как его можно установить:
Обратите вниманием, что для выполнения команд потребуются права sudo. Либо установите шрифты только для текущего пользователя в директории ~/.local/share/fonts.
В команде curl используется механизм подстановки командной строки. Т.е. основной команде на скачивание: curl -fsSLO передается аргумент, который является результатом выполнения другой команды внутри конструкции $(command), выполняющейся предварительно. В итоге основная команда получит прямой URL на zip файл последнего релиза шрифта Hack из GitHub. Команда универсальна.
После установки шрифта, активируйте его в настройках вашего терминала🛠.
В Gnome-terminal это делается так:
Создание alias и функций для .bashrc и .zshrc
Теперь необходимо добавить нужный функционал в файл окружения оболочки🐚. В моем примере используется ZSH:
nvim ~/.zshrc
И добавляем где-нибудь в конце следующий код:
# Определение переменной с именем утилиты: 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 из коробки поддерживает большое количество цветовых тем. В моей конфигурации используется тема Nord❄️. Для просмотра доступных тем выполните:
batcat --list-themes
# или
bat --list-themes
При необходимости замените:
export BAT_THEME="Nord"
На свою выбранную тему в вашем файле ~/.zshrc.
Чтобы применить внесенные изменения выполняем:
source ~/.zshrc
Ну вот и все😌.
Заключение
Сегодня наша копилка инструментов Linux администратора пополнилась двумя замечательными инструментами: bat и exa, которые легко настроить и которые есть в стандартных репозиториях почти во всех популярных дистрибутивах Linux🔥.
Данные утилиты, в сочетании с другими полезными инструментами, такими как:
превращают работу с командной строкой Linux в довольно приятный процесс😌.
Спасибо, что читаете 😊. Обязательно подписывайтесь на наш телеграм канал: @r4ven_me, чтобы не пропустить публикации новых материалов на сайте. А если остались вопросы – приглашаю вас в Вороний чат. У нас там дружелюбное микросообщество 🚶♀️🐧🚶🐧🚶♂️🐧.
Когда вы первый раз заходите с помощью соцсетей, мы получаем публичную информацию из вашей учетной записи, предоставляемой провайдером услуги соцсети в рамках ваших настроек конфиденциальности. Мы также автоматически получаем ваш e-mail адрес для создания вашей учетной записи на нашем веб сайте. Когда она будет создана, вы будете авторизованы под этой учетной записью.
Не согласенСогласен
Я разрешаю создать мне учетную запись
Когда вы первый раз заходите с помощью соцсетей, мы получаем публичную информацию из вашей учетной записи, предоставляемой провайдером услуги соцсети в рамках ваших настроек конфиденциальности. Мы также автоматически получаем ваш e-mail адрес для создания вашей учетной записи на нашем веб сайте. Когда она будет создана, вы будете авторизованы под этой учетной записью.
Не согласенСогласен
Пожалуйста, войдите, чтобы прокомментировать
0 комментариев
Старые
НовыеПопулярные
Межтекстовые Отзывы
Посмотреть все комментарии
Эй, обратите внимание, что "Вороний блог" использует куки. Если Вы продолжите использовать данный сайт, это будет считаться что Вас это устраивает ;)Ok