Цвета терминала 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-кодов. Это определенная последовательность символов, которая не выводится на экран, однако влияет на вывод. Называется она так, поскольку начинается с 33[ — кода «Esc». Поскольку терминалов и эмуляторов терминалов существует множество, эти управляющие коды стандартизированы. Управлением цветом через последовательность от 30 до 37 — это стандарт ECMA-48. Информация о нем содержится в разделе console_codes. А управление через 38;5;* — определено стандартом T.416. Более подробная информация есть, конечно же, в Википедии.
Раскрашиваем и изменяем строку приглашения:
Разобравшись, как устанавливать цвета linux через esc-коды, не составит труда переделать и раскрасить строку приглашения. За ее вывод отвечает переменная PS1, которая определена в файле
В Linux Mint скрипт ее инициализации имеет следующий вид:
То-есть сперва определяется, запустил ли скрипт root или обычный пользователь. Поскольку в подавляющем большинстве случаев имеет место именно второй вариант, то и редактировать нужно строку, следующую после первого ‘else’. Формат строки расшифрован в документации по баш, в разделе «Promting». Из него следует, что esc-последовательность должна начинаться с «[» и заканчиваться «]». Таким образом:
- [33[01;32m] — устанавливает зеленый цвет;
- u — выводит имя пользователя;
- h — выводит имя хоста;
- [33[00m] — очищает установленные атрибуты;
- [33[01;34m] — устанавливает синий цвет;
- w — выводит имя рабочей директории;
- Привет! — пример того, что может быть выведен любой производный текст.
Что ещё можно вывести в строке приглашения:
- d — дату, в формате «Wed Dec 28»;
- A — время в 24-часовом формате;
- ! — номер текущей команды в истории;
- n — перенос вывода на другую строку;
Введем что нибудь поинтереснее:
И строка приглашения примет вид:
Так, не понял, а откуда взялась ёлка-то?
Ну ладно, на самом деле, если в конец .bashrc вставить echo -e «С Новым годом», то поздравление будет выводиться при каждом запуске терминала перед приглашением ввода. Соответственно, вывод можно раскрашивать каким угодно способом. А там уж и ёлку нарисовать не сложно.
Источник
Что означают разные цвета в лс?
Что ls означают разные цвета в команде Ubuntu ? Например, когда я набираю ls команду в одной из моих папок, я получаю один из файлов светло-зеленого цвета, а другой (который является папкой) — синего цвета с зеленой подсветкой.
Что означают эти цвета, и есть ли руководство по всем цветам?
- Синий : каталог
- Зеленый : исполняемый или распознанный файл данных
- Небесно-голубой : Символическая ссылка
- Желтый с черным фоном : устройство
- Розовый : файл графического изображения
- Красный : архивный файл
- Красный с черным фоном : Неработающая ссылка
Довожу до вашего сведения:
Чтобы выключить цвет, вы должны закомментировать следующие строки в .bashrc .
Также, если вы хотите увидеть свои собственные значения цвета bash, скопируйте / вставьте следующие коды в свой терминал.
Выход:
Примечание:
- Для получения дополнительной информации введите man dir_colors в терминале.
Вы можете узнать, какие цвета ls использует, посмотрев на $LS_COLORS переменную:
- Бирюзовый: аудио файлы 1
- Ярко-красный: архивы и сжатые файлы 2
- Фиолетовый: картинки и видео 3
Кроме того, файлы раскрашены по атрибутам:
aac, au, flac, mid, midi, mka, mp3, mpc, ogg, ra, wav, axa, oga, spx, xspf.
tar, tgz, arj, taz, lzh, lzma, tlz, txz, zip, z, Z, dz, gz, lz, xz, bz2, bz, tbz, tbz2, tz, deb, rpm, jar, rar, ace, зоопарк, cpio, 7z, рз.
JPG, JPEG, GIF, BMP, PBM, PGM, PPM, TGA, XBM, XPM, TIF, TIFF, PNG, SVG, SVGZ, Mng, PCX, MOV, MPG, MPEG, M2V, MKV, ОГМ, MP4, M4V, mp4v, vob, qt, nuv, wmv, asf, rm, rmvb, flc, avi, fli, flv, gl, dl, xcf, xwd, yuv, cgm, emf, axv, тревожность, ogv, ogx.
Вся эта информация содержится в выходных данных dircolors —print-database , но ее форматирование довольно нечитаемо.
Вот техническое объяснение того, что происходит:
Цветовой код состоит из трех частей:
Первая часть перед точкой с запятой представляет стиль текста.
- 00 = нет, 01 = жирный, 04 = подчеркивание, 05 = мигание, 07 = обратный, 08 = скрытый.
Вторая и третья часть — это цвет и цвет фона:
- 30 = черный, 31 = красный, 32 = зеленый, 33 = желтый, 34 = синий, 35 = пурпурный, 36 = голубой, 37 = белый.
Каждая часть может быть опущена, при условии, что начинается слева. то есть «01» означает жирный, «01; 31» означает жирный и красный. И вы бы заставили свой терминал печатать в цвете, выполнив инструкцию \33[ и завершив ее символом m . 33 или 1B в шестнадцатеричном формате, это знак ASCII «ESCAPE» (специальный символ в наборе символов ASCII). Пример:
Печать «Hello World» ярко-красным.
Команда ls с аргументом —color=auto (в Ubuntu ls это псевдоним для ls —color=auto ) проходит по всем именам файлов и пытается сначала сопоставить разные типы, такие как Executable, Pipe и так далее. Затем он пытается сопоставить регулярные выражения, такие как * .wav, и печатает полученное имя файла, заключенное в эти инструкции по изменению цвета для bash.
Если вы наберете dircolors ( echo $LS_COLORS также работает) из командной строки, вы получите список кодов и цветов для большого количества типов файлов в 1 строке. dircolors —print-database показывает им по 1 строке за раз. Вот краткий список (я постарался указать самые важные). Внизу есть объяснение того, что представляют собой разные коды в конце каждой строки:
- Коды атрибутов: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
- Цветовые коды текста: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
- Коды цвета фона: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
Если вы хотите поэкспериментировать с этим, вот пример того, как установить цвет для файла:
Это позволит установить *.ogg и .mp3 в bold magenta . И если вы положите его в свой .bashrc файл, он станет постоянным.
С настройкой по умолчанию
- Неокрашенный (белый) : текст файла или файла без имени (например, права на вывод ls -l )
- Жирный синий : каталог
- Жирный голубой : символическая ссылка
- Жирный зеленый : исполняемый файл
- Жирный красный : архив
- Жирный пурпурный : файл изображения, видео, графика и т. Д. Или дверь или розетка
- Cyan : аудиофайл
- Желтый с черным фоном : труба (AKA FIFO)
- Жирный желтый с черным фоном : блочное устройство или символьное устройство
- Жирный красный с черным фоном : сиротская ссылка или отсутствующий файл
- Неокрашен красным фоном : файл set-user-ID
- Черный с желтым фоном : файл set-group-ID
- Черный с красным фоном : файл с возможностью
- Белый с синим фоном : липкий каталог
- Синий с зеленым фоном : другой каталог для записи
- Черный с зеленым фоном : липкий и прочий для записи каталог
Скрипт для отображения цветов
Выход с настройкой по умолчанию:
Вывод с моей настройкой (пользовательские dircolors и пользовательская тема терминала Solarized):
Я получил описания от dircolors -p и man dir_colors и заполнил пробелы своими собственными исследованиями.
Цвета и описания одинаковы с 14.04 по 17.10.
Ни один из ответов здесь не включает 256 вариантов цвета в последних версиях Ubuntu. Я испытываю недостаток цвета (некоторые цвета создают мне проблемы рядом друг с другом), поэтому синий каталог по умолчанию на черном цвете мне очень трудно читать. Далее следует мое исследование, чтобы изменить это.
Введите, dircolors -p |less чтобы увидеть ваш текущий цветовой код.
Файл .bashrc по умолчанию уже должен быть настроен не только на использование системного кода цвета, но и кода в
/ .dircolors, поэтому выведите вывод dircolors в .dircolor, чтобы вы могли начать с него с помощью этой команды. dircolors -p >
Альтернатива: подобрать очень похожие 256 цветов в солнечном проекте Seebi .
Возьмите этот скрипт для проверки цвета и запустите его с помощью команды, colortest -w чтобы вы могли видеть все цвета одновременно. Выберите цвет. Мне нравится апельсин # 208. Я хочу, чтобы это был цвет текста, поэтому, используя эту информацию о расширенных цветовых кодах, я могу применить это.
Итак, у вас есть цвет, что теперь? Сначала мы должны создать строку.
Первым числом будет код атрибута, скорее всего 00, но если вы хотите, чтобы он мигал, перейдите с 05:
Выберите код атрибута: 00 = нет 01 = полужирный 04 = подчеркивание 05 = мигание 07 = обратный 08 = скрытый
Затем выберите добавление ;38;5; к этому коду атрибута, чтобы указать цвет текста, чтобы получить 00; 38; 5; а затем добавить свой цвет. Я выбрал 208, поэтому я получаю 00;38;5;208 .
Если вы хотите также наложить на него фон, выберите другой цвет (скажем, 56) с помощью скрипта colortest и добавьте ;48;5; для фона и 56 для цвета, чтобы получить общую строку 00;38;5;208;48;5;56 .
Так что теперь у вас есть, что вы делаете с этим?
/.dircolors и найдите раздел, который вы хотите изменить (для меня это DIR) на строку, которую мы определили выше «00; 38; 5; 208».
Это не будет применяться немедленно, вам нужно загрузить конфигурацию. Используйте dircolors
/.dircolors для получения кода, чтобы установить переменную LS_COLORS. Вы можете просто вставить это в сеанс терминала или закрыть свой терминал и снова открыть его. Вы также можете передать это в файл и запустить его как скрипт оболочки.
Вы можете сделать эту же процедуру с 16 цветами. Вам не нужны специальные; 38; 5 или; 48; 5 вещи. Просто бросьте цифры в строку и наслаждайтесь простотой.
Спасибо Дэну и Сиби за их заметки и код по этому вопросу.
Источник