Цвета терминала Linux
Одно из главных преимуществ Linux заключается в том, что при желании в нём можно настроить всё, что угодно. В этом и выражается преимущество проективных систем, над процедурными. Фактически, это конструктор, состоящий из отдельных блоков, каждый из которых можно настроить по своему желанию.
Особенно интересно, если не просто копируешь чужой «рецепт», а пытаешься разобраться, что и как устроено. И даже решая несерьезную задачу, узнаешь что-то новое.
Раскрашиваем цвета вывода ls
Как-то захотелось мне настроить цвета терминала linux в выводе команды ls. Ну не нравился блекло-фиолетовый цвет для каталогов в Linux Mint. Начал разбираться.
Из документации к ls, выяснил, что установка цветов для вывода осуществляется при помощи утилиты dircolors, которая либо устанавливает параметры цвета из своей собственной базы, либо берет их из файла ~/.dircolors. Такого файла в моем домашнем каталоге не было. Также упоминалось, что инициализация использования цветов происходит через ~/.bashrc, файл с настройками командной оболочки, а сами параметры определяются через переменную LC_COLORS.
Действительно, в .bashrc обнаружился скрипт следующего содержания:
Его суть сводится к проверке на наличие утилиты dircolors в системе, присваивания значения переменной и, при удачном выполнении, использовании параметра —color=auto при каждом вызове ls.
Если запустить утилиту dircolors, она выводит значение переменной LC_COLOR.
Также возможен вывод значения переменной LC_COLORS в структурированном виде, указанием ключа:
Поскольку вывод получается длинный, приводить его не буду.
Если перенаправить вывод dircolors -p > ~/.dircolors, то будет создан структурированный файл, из которого и будут браться настройки цветов. Редактируя данный файл и устанавливаются настройки цвета для вывода ls.
В созданном файле .dircolors есть подсказка:
Устанавливая последовательность через точку с запятой и получаем нужный нам цвет в консоли linux, согласно перечисленным. Цвета терминала linux от 30 до 37 для цвета шрифта, а с 40 до 47 для фона. К примеру:
DIR 01;34 подразумевает, что имена директорий будут выделяться жирным шрифтом и синим цветом.
Но таким способом получается всего восемь цветов, а современные эмуляторы терминала способны выводить как минимум 256! Выяснилось, что существуют и другие способы установки цвета. К примеру, значение EXEC 38;5;208;1 — даёт оранжевый толстый шрифт у исполняемых файлов.
Чтобы не перебирать цвета linux вручную, есть уже готовая таблица цветов:
Подставляя в значение цвета 38;5;x — где x цвет из таблицы, получаем необходимый результат. Получается что-то вроде этого:
Но как это работает? Дело в том, что установка цвета вывода информации в эмуляторе терминала осуществляется при помощи ANSI escape-кодов. Это определенная последовательность символов, которая не выводится на экран, однако влияет на вывод. Называется она так, поскольку начинается с \033[ — кода «Esc». Поскольку терминалов и эмуляторов терминалов существует множество, эти управляющие коды стандартизированы. Управлением цветом через последовательность от 30 до 37 — это стандарт ECMA-48. Информация о нем содержится в разделе console_codes. А управление через 38;5;* — определено стандартом T.416. Более подробная информация есть, конечно же, в Википедии.
Раскрашиваем и изменяем строку приглашения:
Разобравшись, как устанавливать цвета linux через esc-коды, не составит труда переделать и раскрасить строку приглашения. За ее вывод отвечает переменная PS1, которая определена в файле ~/.bashrc
В Linux Mint скрипт ее инициализации имеет следующий вид:
То-есть сперва определяется, запустил ли скрипт root или обычный пользователь. Поскольку в подавляющем большинстве случаев имеет место именно второй вариант, то и редактировать нужно строку, следующую после первого ‘else’. Формат строки расшифрован в документации по баш, в разделе «Promting». Из него следует, что esc-последовательность должна начинаться с «\[» и заканчиваться «\]». Таким образом:
- [\033[01;32m\] — устанавливает зеленый цвет;
- \u — выводит имя пользователя;
- \h — выводит имя хоста;
- [\033[00m\] — очищает установленные атрибуты;
- [\033[01;34m\] — устанавливает синий цвет;
- \w — выводит имя рабочей директории;
- Привет! — пример того, что может быть выведен любой производный текст.
Что ещё можно вывести в строке приглашения:
- \d — дату, в формате «Wed Dec 28»;
- \A — время в 24-часовом формате;
- \! — номер текущей команды в истории;
- \n — перенос вывода на другую строку;
Введем что нибудь поинтереснее:
И строка приглашения примет вид:
Так, не понял, а откуда взялась ёлка-то?
Ну ладно, на самом деле, если в конец .bashrc вставить echo -e «С Новым годом», то поздравление будет выводиться при каждом запуске терминала перед приглашением ввода. Соответственно, вывод можно раскрашивать каким угодно способом. А там уж и ёлку нарисовать не сложно.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Раскраска вывода команд в консоли
При выполнении команд в консоли мы чаще всего получаем в результате одноцветный текст, который бывает затруднительно прочитать. Для того, чтобы облегчить чтение результата в консоли, шрифт можно раскрасить. Это, к тому же, придаст оригинальности вашей системе.
Для того, чтобы раскрашивать вывод команд в консоли (подсвечивать результат), можно воспользоваться утилитой Generic Colouriser (grc). Для установки утилиты (в Ubuntu) выполните в командной строке:
Данная утилита использует файлы конфигурации, в которых прописаны регулярные выражения (Regular Expression), содержащие правила раскрашивания. Вместе с утилитой устанавливаются несколько файлов конфигурации для некоторых Linux команд (располагаются в директории /usr/share/grc). Информацию по составлению своих собственных файлов вы можете прочитать в README файле.
Теперь нам нужно прописать алиасы тем командам, вывод которых мы хотим раскрашивать. Фактически для этих команд мы будем вызывать утилиту grc с указанием того, какую команду нам нужно раскрасить. Алиасы прописываются в файле ~/.bashrc. Откроем файл .bashrc, для этого выполним в консоли команду:
В конец файла добавим следующие строки:
if [ -f /usr/bin/grc ]; then alias cvs="grc --colour=auto cvs" alias diff="grc --colour=auto diff" alias esperanto="grc --colour=auto esperanto" alias gcc="grc --colour=auto gcc" alias irclog="grc --colour=auto irclog" alias ldap="grc --colour=auto ldap" alias log="grc --colour=auto log" alias netstat="grc --colour=auto netstat" alias ping="grc --colour=auto ping" alias proftpd="grc --colour=auto proftpd" alias traceroute="grc --colour=auto traceroute" alias wdiff="grc --colour=auto wdiff" fi
Тем самым мы прописали алиасы для команд, вывод которых будет раскрашиваться. Теперь выйдите и войдите в систему, чтобы применить данные настройки. Выполните для примера команду ping и вы должны получить красивый результат: