FIGlet — создаём красивые ASCII-баннеры в Linux и персонализируем терминал
Будем честны: большинство консольных скриптов выглядят примерно одинаково. Открываешь очередной backup.sh, а там бесконечная простыня из echo "Start...", echo "Done...", echo "Error...". Работает? Да. Красиво? Ну... скажем так, никто не открывает терминал ради эстетического удовольствия.
Но иногда хочется, чтобы консоль выглядела чуть более живой. Особенно если речь идёт о домашнем сервере, VPS или HomeLab, где в терминале проходит добрая половина рабочего дня. И вот здесь на сцену выходит FIGlet — небольшая утилита, способная превратить обычный текст в красивые ASCII-баннеры буквально одной командой.
Несмотря на внешнюю простоту, FIGlet используется далеко не только "для красоты". Его можно встретить в приветственных баннерах серверов, установщиках Linux, bash-скриптах, DevOps-пайплайнах, CTF-задачах и различных консольных инструментах.
В этой статье разберём утилиту практически полностью: научимся работать со шрифтами, правильно настраивать ширину вывода, центрировать текст, использовать менее известные параметры, а в конце создадим красивый информационный баннер, который будет автоматически отображаться после входа в систему.
Инфо
Все команды в статье ориентированы на Debian 13 и другие Debian-подобные дистрибутивы (Ubuntu, Linux Mint и т.д.). В большинстве случаев они без изменений подойдут и для других современных Linux-систем.
Что такое FIGlet и зачем он нужен
FIGlet — это классическая Unix-утилита, появившаяся ещё в начале 90-х годов. Она берёт обычный текст и преобразует его в большие ASCII-символы, используя специальные файлы шрифтов.
Например, команда
figlet Linuxможет вывести что-то вроде:
_ _
| | (_)
| | _ _ __ _ ___ __
| | | | '_ \| | | \ \/ /
| |____| | | | | |_| |> <
|______|_|_| |_|\__,_/_/\_\На первый взгляд кажется, что утилита умеет только это. На практике возможностей значительно больше.
FIGlet позволяет:
- использовать десятки различных шрифтов;
- автоматически подстраиваться под ширину терминала;
- центрировать текст;
- изменять способы соединения символов;
- использовать собственные шрифты;
- работать в скриптах;
- создавать красивые MOTD и login-баннеры.
Правда жизни: большинство администраторов ставят FIGlet один раз "поиграться", а потом неожиданно обнаруживают его в каждом втором bash-скрипте.
🚀 Установка
В Debian установка занимает буквально несколько секунд.
sudo apt update
sudo apt install figletПроверяем работу:
figlet HelloЕсли всё прошло успешно, терминал сразу выведет большой ASCII-текст.
Проверить установленную версию можно командой:
figlet -vПервое знакомство
Самый простой вариант использования:
figlet "HomeLab"Текст можно передавать несколькими способами.
Через аргумент:
figlet "Backup completed"Через стандартный ввод:
echo "Backup completed" | figletИли даже так:
cat message.txt | figletЭто особенно удобно внутри shell-скриптов.
Например:
#!/bin/bash
figlet "Backup"
echo "Начинаем резервное копирование..."Получается значительно нагляднее обычного набора echo.
🎨 Работа со шрифтами
Именно шрифты делают FIGlet интересным.
Каждый стиль представляет собой обычный файл с расширением .flf, внутри которого описано, как должна выглядеть каждая буква.
Например:
- standard
- slant
- small
- banner
- big
- doom
- script
- shadow
- digital
- mini
Даже стандартной установки Debian обычно хватает на несколько десятков различных вариантов.
Где лежат шрифты
По умолчанию:
/usr/share/figletПосмотреть содержимое можно командой:
ls /usr/share/figletИли найти абсолютно все установленные шрифты:
find /usr/share -name "*.flf"Как посмотреть список шрифтов
Если установлен пакет со вспомогательной утилитой:
showfigfontsОна последовательно покажет все доступные шрифты вместе с примером.
Если такой команды нет — ничего страшного. Достаточно посмотреть содержимое каталога /usr/share/figlet.
Совет
Не стоит бездумно использовать экзотические шрифты. Для большинства задач лучше всего подходят standard, slant, small и doom — они остаются читаемыми даже в небольшом терминале.
Выбор шрифта
Используется параметр:
-fНапример:
figlet -f slant Debianили
figlet -f doom SERVERили
figlet -f banner BackupПоэкспериментируйте с несколькими вариантами — разница между ними иногда весьма существенная.
Узнаём каталог шрифтов автоматически
Мало кто знает, что FIGlet умеет сообщать собственные служебные параметры.
Например:
figlet -I2Выведет путь к каталогу со шрифтами.
Это удобно, если вы работаете на разных системах и не хотите гадать, где именно установлены файлы.
Использование собственного каталога
Допустим, вы скачали дополнительные шрифты.
Создадим каталог:
mkdir ~/figlet-fontsСкопируем туда .flf файлы.
Теперь можно использовать их:
figlet -d ~/figlet-fonts -f myfont "HomeLab"Это позволяет хранить собственную коллекцию, не изменяя системные каталоги.
📏 Настройка ширины вывода
Очень полезная возможность, которую многие игнорируют.
По умолчанию FIGlet использует стандартную ширину.
Однако её можно изменить.
Например:
figlet -w 120 Linuxили
figlet -w 40 LinuxЕсли ширина слишком маленькая, текст переносится и может выглядеть странно.
Именно поэтому иногда кажется, что "FIGlet сломался".
На самом деле виновата слишком узкая консоль.
Примечание
Если вы используете FIGlet в shell-скриптах, никогда не задавайте фиксированную ширину без необходимости. На разных терминалах результат может отличаться.
Автоматическая ширина терминала
Гораздо интереснее использовать параметр:
-tОн автоматически определяет текущую ширину окна терминала.
figlet -t HomeLabИменно этот режим лучше использовать в login-баннерах.
Он корректно работает практически при любом размере окна.
↔️ Выравнивание текста
По умолчанию FIGlet выводит текст с выравниванием по левому краю. Но это далеко не единственный вариант.
Поддерживаются три режима:
| Параметр | Описание |
|---|---|
-l | Выравнивание по левому краю (по умолчанию) |
-c | Центрирование |
-r | Выравнивание по правому краю |
Самый популярный вариант — центрирование.
figlet -c "HomeLab"Если же добавить автоматическое определение ширины терминала, получится универсальное решение:
figlet -c -t "Debian Server"Именно такую комбинацию (-c -t) я рекомендую использовать практически во всех приветственных баннерах. Независимо от размера терминала текст всегда будет смотреться аккуратно.
Совет
На широких мониторах (34" и более) центрирование делает баннер визуально гораздо привлекательнее. Проверено на собственном опыте.
🔤 Как FIGlet соединяет символы
Это одна из самых недооценённых возможностей утилиты.
Если внимательно посмотреть на разные шрифты, можно заметить, что иногда буквы стоят вплотную друг к другу, а иногда между ними появляются дополнительные пробелы.
За это отвечает механизм Smushing.
Проще говоря, FIGlet умеет "склеивать" соседние символы по определённым правилам, чтобы надпись занимала меньше места.
Именно поэтому один и тот же текст в разных режимах может выглядеть совершенно по-разному.
Режим Smushing (-s)
По умолчанию большинство современных шрифтов используют именно его.
Никаких дополнительных параметров обычно не требуется.
Получается компактный и красивый текст.
Явное включение режима объединения символов.
figlet -s "Linux"В большинстве случаев это режим по умолчанию.
Kerning (-k)
Если хочется оставить между буквами небольшие промежутки, используется режим Kerning.
figlet -k "Linux"Он отключает "слипание" символов и делает текст более читаемым.
Особенно это заметно на длинных словах.
Full Width (-W)
Максимальная ширина символов.
figlet -W "Linux"Все буквы будут занимать своё полное пространство.
Получается менее компактно, зато некоторые декоративные шрифты начинают выглядеть гораздо красивее.
Инфо
Если вы не занимаетесь созданием собственных шрифтов FIGlet, то менять эти параметры приходится крайне редко. Но понимать, почему один и тот же текст выглядит по-разному в разных шрифтах, всё же полезно.
📄 Работа с многострочным текстом
FIGlet умеет преобразовывать не только одну строку.
Например:
echo -e "Backup\nCompleted" | figletКаждая строка будет обработана отдельно.
Для длинных текстов существует режим Paragraph Mode.
figlet -pОн позволяет корректнее обрабатывать многострочный ввод.
Хотя на практике этот режим используется довольно редко.
⚙️ Полезные служебные параметры
FIGlet умеет выводить собственную информацию.
Например:
Узнать версию:
figlet -I1Каталог шрифтов:
figlet -I2Шрифт по умолчанию:
figlet -I3Ширину вывода:
figlet -I4Поддерживаемые форматы:
figlet -I5На первый взгляд выглядит не слишком полезно.
Но если вы пишете переносимые shell-скрипты или автоматизацию, подобные команды позволяют адаптировать сценарий под конкретную систему.
🎨 Цветной вывод
Сам FIGlet умеет работать только с обычным текстом.
Но никто не запрещает передать его вывод другой программе.
Самый известный вариант — lolcat.
Устанавливаем:
sudo apt install lolcatИспользование:
figlet Debian | lolcatПолучается яркий радужный баннер.
Другой вариант — использовать обычные ANSI Escape-последовательности.
Например:
printf "\e[32m"
figlet "Backup"
printf "\e[0m"Такой способ не требует установки дополнительных пакетов и работает практически в любом современном терминале.
Совет
Если баннер отображается после каждого входа на сервер, не злоупотребляйте кислотными цветами. Через неделю они начинают раздражать сильнее, чем сообщения apt о необходимости перезагрузки.
🖥️ Использование FIGlet в shell-скриптах
Именно здесь утилита раскрывается лучше всего.
Допустим, есть простой сценарий резервного копирования.
Вместо десятка обычных echo можно сделать начало более наглядным.
#!/bin/bash
clear
figlet -c -t "Backup"
echo
echo "Начинаем резервное копирование..."
echoИли, например, красиво оформлять сообщения об ошибках.
if ! rsync -a /data /backup
then
figlet "ERROR"
exit 1
fiНа больших автоматизированных сценариях такие баннеры помогают значительно быстрее ориентироваться в выводе.
На мой взгляд, лучше всего FIGlet смотрится именно там, где пользователь открывает терминал регулярно. Тогда баннер становится частью интерфейса, а не просто красивой игрушкой.
🎁 Бонус: создаём красивый баннер терминала с FIGlet
Вот мы и добрались до самой практичной части статьи.
Большинство руководств заканчиваются на командах figlet Hello и figlet -f slant Linux. Но, если честно, после пары минут экспериментов возникает закономерный вопрос:
И что теперь с этим делать?
А теперь — использовать по назначению.
Мы создадим аккуратный приветственный баннер, который будет автоматически отображаться после входа в систему и сразу показывать основную информацию о сервере.
Например, результат будет выглядеть примерно так:
____ __ _
/ __ \___ / /_ (_)___ _____
/ / / / _ \/ __ \/ / __ `/ __ \
/ /_/ / __/ /_/ / / /_/ / / / /
/_____/\___/_.___/_/\__,_/_/ /_/
System Information
================================================
Hostname Debian
OS Debian GNU/Linux 13 (trixie)
Kernel 7.0.2-4-pve
Uptime 2 days, 21 hours, 3 minutes
CPU Load 0.59 1.21 1.13
Memory 27Mi / 1,0Gi
Disk (/) 14G free (6%)
Updates System is up to date
IP Address 192.168.1.32
Date 01.07.2026 21:15
===============================================Получается значительно полезнее стандартного приглашения оболочки.
Что будем использовать
Весь баннер строится средствами Bash и стандартных утилит Debian.
Дополнительно понадобится только сам FIGlet.
Никаких Python-скриптов, сторонних библиотек или тяжёлых зависимостей.
Это означает, что баннер без проблем будет работать практически на любом сервере Debian.
Создаём каталог
Я предпочитаю хранить подобные вещи отдельно.
Создадим каталог:
mkdir -p ~/.local/binЕсли он ещё не добавлен в переменную PATH, можно запускать скрипт по полному пути.
Создаём скрипт
Создадим файл:
nano ~/.local/bin/login-bannerВставляем следующий код.
#!/usr/bin/env bash
# Показывать баннер только в интерактивном терминале
[[ -t 1 ]] || exit 0
# ------------------------------------------------------------
# Системная информация
# ------------------------------------------------------------
HOSTNAME=$(hostname)
OS=$(
. /etc/os-release
echo "$PRETTY_NAME"
)
KERNEL=$(uname -r)
UPTIME=$(uptime -p | sed 's/^up //')
LOAD=$(cut -d' ' -f1-3 /proc/loadavg)
MEMORY=$(free -h | awk '/^Mem:/ {print $3 " / " $2}')
DISK=$(df -BG / | awk 'NR==2 {printf "%s free (%s)", $4, $5}')
IP=$(hostname -I | awk '{print $1}')
DATE=$(date '+%d.%m.%Y %H:%M')
UPDATES=$(apt list --upgradable 2>/dev/null | grep -c '/')
TERM_WIDTH=$(tput cols)
if [ "$UPDATES" -eq 0 ]; then
UPDATE_TEXT="Up to date"
else
UPDATE_TEXT="$UPDATES package(s) available"
fi
LINE=$(printf '%*s' "$TERM_WIDTH" '' | tr ' ' '=')
# ------------------------------------------------------------
# Баннер
# ------------------------------------------------------------
echo
figlet -c -t -k -f slant "$HOSTNAME"
echo "System Information"
echo "$LINE"
printf "%-12s %s\n" "Hostname" "$HOSTNAME"
printf "%-12s %s\n" "OS" "$OS"
printf "%-12s %s\n" "Kernel" "$KERNEL"
printf "%-12s %s\n" "Uptime" "$UPTIME"
printf "%-12s %s\n" "CPU Load" "$LOAD"
printf "%-12s %s\n" "Memory" "$MEMORY"
printf "%-12s %s\n" "Disk (/)" "$DISK"
printf "%-12s %s\n" "Updates" "$UPDATE_TEXT"
printf "%-12s %s\n" "IP Address" "$IP"
printf "%-12s %s\n" "Date" "$DATE"
echo "$LINE"
echoСохраняем файл и делаем его исполняемым.
chmod +x ~/.local/bin/login-bannerПроверяем работу.
~/.local/bin/login-bannerЕсли всё сделано правильно, вы увидите красивый баннер с информацией о системе.
Совет
Не удивляйтесь, если количество доступных обновлений изменится сразу после выполнения apt update. Скрипт показывает именно те пакеты, которые готовы к установке на данный момент.
Разбираем скрипт
На первый взгляд кажется, что скрипт довольно большой. На самом деле он состоит из трёх логических частей: получение информации о системе, её форматирование и красивый вывод в терминал.
Разберём наиболее интересные моменты.
Проверка интерактивной оболочки
Самая важная строка находится в самом начале:
[[ -t 1 ]] || exit 0Она проверяет, подключён ли стандартный вывод к терминалу.
Если скрипт запускается во время обычного входа по SSH, условие выполняется и баннер отображается. Если же соединение используется для работы scp, rsync, Git или других инструментов автоматизации, скрипт сразу завершится и не испортит их вывод.
Примечание
Не убирайте эту проверку. Именно из-за подобных баннеров без проверки интерактивности чаще всего перестают корректно работать scp, rsync и другие утилиты, использующие SSH.
Получение информации о системе
Практически каждая переменная отвечает всего за один параметр.
Имя компьютера:
HOSTNAME=$(hostname)Версия операционной системы:
OS=$(
. /etc/os-release
echo "$PRETTY_NAME"
)Вместо сложных конструкций мы просто читаем файл /etc/os-release, который присутствует практически во всех современных Linux-дистрибутивах.
Версия ядра:
KERNEL=$(uname -r)Время работы системы:
UPTIME=$(uptime -p | sed 's/^up //')Ключ -p (pretty) делает вывод значительно более читаемым, а небольшая обработка через sed убирает лишнее слово up.
Средняя загрузка системы:
LOAD=$(cut -d' ' -f1-3 /proc/loadavg)Здесь отображаются три значения Load Average за последнюю 1, 5 и 15 минут.
Использование памяти
MEMORY=$(free -h | awk '/^Mem:/ {print $3 " / " $2}')Команда выводит только две самые полезные величины:
- сколько памяти используется сейчас;
- общий объём установленной оперативной памяти.
Например:
2.1G / 8.0GСвободное место на диске
DISK=$(df -BG / | awk 'NR==2 {printf "%s free (%s)", $4, $5}')Почему используется именно -BG, а не привычный -h?
Всё просто. Ключ -h автоматически переключается между мегабайтами, гигабайтами и терабайтами. Из-за этого формат вывода постоянно меняется.
Параметр -BG всегда показывает размер в гигабайтах, поэтому баннер выглядит аккуратнее и значения не «прыгают».
Например:
78G free (41%)Подсчёт доступных обновлений
Количество доступных обновлений определяется командой:
UPDATES=$(apt list --upgradable 2>/dev/null | grep -c '/')Мы подсчитываем только строки с именами пакетов, игнорируя служебный вывод APT.
После этого формируется человекочитаемое сообщение:
if [ "$UPDATES" -eq 0 ]; then
UPDATE_TEXT="Up to date"
else
UPDATE_TEXT="$UPDATES package(s) available"
fiВ результате пользователь сразу видит состояние системы:
Updates Up to dateили
Updates 6 package(s) availableДинамическая рамка
Вместо фиксированной строки из символов = рамка строится автоматически по ширине текущего терминала.
TERM_WIDTH=$(tput cols)
LINE=$(printf '%*s' "$TERM_WIDTH" '' | tr ' ' '=')Благодаря этому баннер одинаково хорошо выглядит как в небольшом окне терминала, так и на широком мониторе.
Вывод информации
Для отображения используется команда printf.
printf "%-12s %s\n" "Hostname" "$HOSTNAME"В отличие от обычного echo, она позволяет красиво выровнять все столбцы по одной ширине.
Именно поэтому весь информационный блок выглядит аккуратно независимо от длины значений.
Автоматический запуск после входа
Теперь сделаем так, чтобы баннер отображался автоматически.
Самый простой вариант — добавить одну строку в конец файла ~/.bashrc.
nano ~/.bashrcДобавляем:
~/.local/bin/login-bannerПосле следующего входа баннер будет отображаться автоматически.
Для всех пользователей системы
Если сервером пользуются несколько человек, удобнее использовать каталог
/etc/profile.d/Создаём файл:
sudo nano /etc/profile.d/login-banner.shСодержимое:
#!/bin/bash
/home/USER/.local/bin/login-bannerНе забудьте заменить USER на имя своего пользователя.
После этого:
sudo chmod +x /etc/profile.d/login-banner.shТеперь баннер будет запускаться автоматически при входе любого пользователя, если используется оболочка Bash.
Предупреждение
Не добавляйте баннер без проверки на интерактивную оболочку. Иначе можно неожиданно сломать работу scp, rsync, некоторых систем автоматизации и других программ, использующих SSH без открытия полноценного терминала.
Именно поэтому в начале нашего скрипта присутствует проверка:
[[ -t 1 ]] || exit 0Она гарантирует, что баннер будет отображаться только в интерактивных терминалах.
Идеи для дальнейшей кастомизации
Наш баннер уже получился достаточно информативным, но никто не запрещает добавить ещё больше полезных сведений.
Например:
- 🌡️ температуру процессора через
lm-sensors; - 🐳 количество запущенных Docker-контейнеров;
- ☸️ текущий Kubernetes Context;
- 💽 состояние RAID-массива;
- 🔋 информацию об ИБП;
- 🌐 внешний IP-адрес;
- ☁️ текущую погоду (например, через
wttr.in); - 📊 количество активных SSH-подключений;
- 🔥 последние записи из журнала
systemd, если при загрузке возникли ошибки.
Совет
Главное — соблюдать меру. Баннер должен помогать, а не превращаться в стену текста, которую хочется прокрутить как можно быстрее.
Заключение
FIGlet — отличный пример классической Unix-утилиты. Она делает всего одну вещь, но делает её действительно хорошо.
Да, без неё вполне можно жить. Но стоит один раз оформить приветственный баннер, добавить аккуратные заголовки в свои shell-скрипты или красиво оформить вывод резервного копирования — и возвращаться к бесконечным echo "Start..." уже совсем не хочется.
Кроме того, FIGlet отлично показывает одну из главных идей Unix: даже небольшая утилита, умеющая делать одну простую задачу, может стать частью чего-то гораздо большего.
Пускай ваши скрипты будут понятными, серверы — стабильными, а аптайм заканчивается только тогда, когда этого действительно хотите вы. 😉