Color output in console (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Color output in console
. Дата последней синхронизации: 17 сентября 2021. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Emacs#Custom colors and theme
nano (Русский)#Подсветка синтаксиса
Эта страница описывает настройку вывода цветного текста в различных консольных программах.
Как это работает
Управляющие последовательности
С помощью
управляющих последовательностей ANSI
(ANSI escape sequences)  можно передать дополнительную информацию в вывод терминала, в том числе цвет. С годами диапазон цветов терминала значительно расширился: от изначальных восьми цветов до полного 24-битного True Color.
Базовое кодирование цвета даёт 8 цветов обычной яркости и 8 ярких вариантов этих цветов. Современные эмуляторы терминала, в том числе сама Linux-консоль, дают возможность указать конкретные RGB-значения, которые будут использоваться для отображения этих цветом. Этот режим поддерживается почти всеми эмуляторами терминала.
С появлением 256-цветных дисплеев появились последовательности для 256 цветов. Это 16 основных цветов, 216 цветов RGB (размещенных в кубе 6x6x6) и 24 оттенка серого. За исключением первых 16 цветов, схема обычно не настраивается, поскольку она имеет чёткое сопоставление с RGB. Этот режим поддерживается большинством эмуляторов терминала. (Меньшая часть эмуляторов использует аналогичную, но несовместимую кодировку только с 88 цветами. Вы вряд ли будете использовать их на практике, но они появятся в базе данных terminfo.)
Не так широко поддерживается True Color режим, дающий 16.7 миллионов (2
24
) цветов RGB (значение каждого канала в диапазоне от 0 до 255).
Termcap и terminfo
Termcap и terminfo, являющиеся частью
ncurses
, — это базы данных, дающие информацию о том, какие последовательности поддерживаются терминалом (который обычно прописан в переменной окружения
TERM
). Можно использовать команды
tput(1)
и
infocmp(1)
для чтения этих данных в командной строке.
Приложения
diff
С версии 3.4 у diffutils есть опция
--color
(
GNU mailing list
).
$ alias diff='diff --color=auto'
grep
Опция
--color=auto
включает выделение цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.
Цветной вывод в
grep
также удобен при работе с
regexp
.
Можно использовать
alias
, чтобы прописать постоянное использование этой опции:
alias grep='grep --color=auto'
Переменная
GREP_COLORS
позволяет определить цвета и настроить разные части выделения. Чтобы изменить цвета, найдите нужные
управляющие последовательности ANSI
и используйте их. Подробнее смотрите
grep(1)
.
Опция
-n
включает вывод номеров строк файла.
ip
Команда
ip(8)
из пакета
iproute2
имеет опцию
-c
для включения цвета. Значение
auto
этого параметра включит вывод цвета только в терминале.
alias ip='ip -color=auto'
less
Переменные окружения
Можно попросить less использовать цвета для обозначения жирного текста и других эффектов форматирования.
Добавьте эту строку в настройках вашей командной оболочки:
export LESS='-R --use-color -Dd+r$Du+b'
Она задаст красный цвет для жирного и синий для подчёркивания.
Подробнее об опции
--use-color
можно почитать в
less(1)
или
[1]
.
Чтение из stdin
Примечание
Рекомендуется включить цветной вывод через
переменные окружения
в вашем
~/.bashrc
или
~/.zshrc
; примеры ниже основаны на
export LESS=R
Когда вы выполняете команду и направляете её
стандартный вывод
(
stdout
) в
less
для постраничного просмотра (например,
pacman -Qe | less
), вы можете заметить, что цвет пропадает. Обычно это из-за того, что программа пытается определить, является ли
stdout
интерактивным терминалом, и если да, то печатает цветой текст, а если нет, то не цветной. Это правильное поведение, когда вы хотите перенаправить
stdout
в файл, например
pacman -Qe > pkglst-backup.txt
, но не очень хорошо не в случае с
less
.
Некоторые программы имеют опцию для отключения определения интерактивного tty:
# dmesg --color=always | less
Если у программы нет подобной опции, можно заставить программу считать
stdout
интерактивным терминалом с помощью следующих утилит:
ColorThis
— запускает программу в (группе) pty, поддерживает перенаправление stdin.
https://github.com/Sasasu/ColorThis
||
colorthis-git
AUR
stdoutisatty
— перехватывает обращение к функции
isatty
.
https://github.com/lilydjwg/stdoutisatty
. ||
stdoutisatty-git
AUR
Пример:
stdoutisatty
программа
| less
unbuffer
— tclsh-скрипт, который поставляется с expect, запускает программу в pty.
unbuffer(1)
||
expect
Пример:
unbuffer
программа
| less
В качестве альтернативы можно использовать модуль
zpty
из
zsh
:
[2]
~/.zshrc
zmodload zsh/zpty

pty() {
	zpty pty-${UID} ${1+$@}
	if [[ ! -t 1 ]];then
		setopt local_traps
		trap '' INT
	fi
	zpty -r pty-${UID}
	zpty -d pty-${UID}
}

ptyless() {
	pty $@ | less
}
Использование:
$ ptyless
программа
Для перенаправления в какой-нибудь другой просмотрщик (в данном примере less):
$ pty
программа
| less
ls
Опция
--color=auto
включает подсвечивание цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.
alias ls='ls --color=auto'
Переменная
LS_COLORS
позволяет определить цвета и настроить разные части выделения. Используйте
dircolors(1)
для установки.
Примечание
Использование
--color
может привести к заметному замедлению
ls
при запуске в каталоге с очень большим числом записей. Стандартные настройки заставляют
ls
делать
stat(1)
для каждого файла. Однако, если вы хотите раскраску типа файла, но можете прожить без других опций (например, executable, orphan, sticky, other-writable, capability), можно использовать
dircolors
для установки переменной окружения
LS_COLORS
примерно так:
eval $(dircolors -p | perl -pe 's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
Подробнее смотрите
ls(1)
.
man
There is a real color facility in
grotty(1)
, but it is strongly discouraged for man pages. Here we fake a colored
man
by hacking two main pagers,
less
and
most
: we replace the sequences for bold, standout, and underline with spiced ones that contain color.
Текст man-страниц может отображаться в разных цветах, что упрощает их чтение. Есть два основных метода, позволяющих раскрасить страницы — с помощью утилит
less
и
most
.
С помощью less (рекомендуется)
Преимущество этого способа в том, что less имеет более богатый набор возможностей, чем most, а также используется по умолчанию для отображения man-страниц.
Смотрите
#less
для более детального описания.
export MANPAGER="less -R --use-color -Dd+r -Du+b"
Для
Fish
настройки будут выглядеть как-то так:
~/.config/fish/config.fish
set -xU MANPAGER 'less -R --use-color -Dd+r -Du+b'
Не забудьте перезагрузить настройки вашей командной оболочки, чтобы изменения вступили в силу.
С помощью most (не рекомендуется)
Утилита most выполняет ту же задачу, что
less
и
more
, но имеет меньший набор возможностей. Настройка цветов для most проще, однако требуется дополнительная настройка для того, чтобы most работал наподобие less.
Установите
пакет
most
.
В файле
/etc/man_db.conf
раскомментируйте параметр
pager
и установите ему значение
most -s
:
DEFINE     pager     most -s
Откройте любую man-страницу для проверки.
Настройка цветов осуществляется в пользовательском файле
~/.mostrc
(нужно создать, если он отсутствует), либо в системном файле
/etc/most.conf
. Пример конфигурации:
% Color settings
color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black
Полный список сочетаний клавиш можно посмотреть в
/usr/share/doc/most/most-fun.txt
. Чтобы получить базовую
less
/
vim
-подобную конфигурацию, можно скопировать
/usr/share/doc/most/lesskeys.rc
в
~/.mostrc
. Этот файл не включает в себя 'g' или 'G', так что нужно добавить следующие строки в
~/.mostrc
:
setkey bob "g"
setkey eob "G"
setkey page_down "d"
setkey page_up "u"
Также можно задать сочетание клавиш для
goto_line
, если вам не нравится стандартное 'J'.
Другой пример, показывающий, как настроить сочетания клавиш, подобно
less
(переход к строке назначен на клавишу
J
):
% less-like keybindings
unsetkey "^K"
unsetkey "g"
unsetkey "G"
unsetkey ":"

setkey next_file ":n"
setkey find_file ":e"
setkey next_file ":p"
setkey toggle_options ":o"
setkey toggle_case ":c"
setkey delete_file ":d"
setkey exit ":q"

setkey bob "g"
setkey eob "G"
setkey down "e"
setkey down "E"
setkey down "j"
setkey down "^N"
setkey up "y"
setkey up "^Y"
setkey up "k"
setkey up "^P"
setkey up "^K"
setkey page_down "f"
setkey page_down "^F"
setkey page_up "b"
setkey page_up "^B"
setkey other_window "z"
setkey other_window "w"
setkey search_backward "?"
setkey bob "p"
setkey goto_mark "'"
setkey find_file "E"
setkey edit "v"
Цветные страницы в xterm или rxvt-unicode
Быстрый способ раскрасить цвета man-страниц, которые просматриваются через
xterm
/
uxterm
или
rxvt-unicode
, заключается в редактировании файла
~/.Xresources
.
В подразделах представлена конфигурация для xterm и rxvt-unicode.
xterm
*VT100.colorBDMode:     true
*VT100.colorBD:         red
*VT100.colorULMode:     true
*VT100.colorUL:         cyan
Эти настройки заменяют начертания текста цветами. Добавьте также:
*VT100.veryBoldColors: 6
если вы хотите видеть цвета и начертания одновременно. Смотрите также
xterm(1)
для описания ресурса терминала
veryBoldColors
.
rxvt-unicode
Конфигурация:
URxvt.colorIT:      #87af5f
URxvt.colorBD:      #d7d7d7
URxvt.colorUL:      #87afd7
После внесения изменений в файл, выполните:
$ xrdb -load ~/.Xresources
Запустите
xterm
/
uxterm
или
rxvt-unicode
и вы должны увидеть цветные man-страницы. Эти настройки добавляют цвета для слов, написанных
полужирным
и
подчеркнутым
шрифтом в
xterm/uxterm
, и цвета для слов в
полужирном
,
подчеркнутом
, и
наклонном
начертаниях в
rxvt-unicode
. Вы можете также совмещать эти атрибуты в различные комбинации. Смотрите
sources
.
pacman
Pacman
также имеет опцию для вывода цвета. Раскомментируйте строку
Color
в файле
/etc/pacman.conf
.
Обёртки
Универсальные обёртки
(многие давно не обновлялись, но всё ещё работают)
Они поставляются с предварительно настроенными пресетами. Пресеты можно менять, можно создавать новые.
Важно
Обёртки добавляют управляющие последовательности в вывод оборачиваемых команд. Некоторые скрипты и програмы, использующие вывод стандартных утилит, могут сломаться от этого.
rainbow
— раскрашивает вывод команд или STDIN по паттернам.
Пресеты: df, diff, env, host, ifconfig, java-stack-trace, jboss, jonas, md5sum, mvn2, mvn3, ping, tomcat, top, traceroute.
https://github.com/nicoulaj/rainbow
||
rainbow
AUR
grc
— ещё один раскрашиватель для украшения ваших лог-файлов или вывода команд.
Пресеты: cat, cvs, df, digg, gcc, g++, ls, ifconfig, make, mount, mtr, netstat, ping, ps, tail, traceroute, wdiff, blkid, du, dnf, docker, docker-machine, env, id, ip, iostat, last, lsattr, lsblk, lspci, lsmod, lsof, getfacl, getsebool, ulimit, uptime, nmap, fdisk, findmnt, free, semanage, sar, ss, sysctl, systemctl, stat, showmount, tune2fs and tcpdump.
https://github.com/garabik/grc
||
grc
cope
— раскрашивающая обёртка для консольных программ.
Пресеты: acpi, arp, cc, df, dprofpp, fdisk, free, g++, gcc, id, ifconfig, ls, lspci, lsusb, make, md5sum, mpc, netstat, nm, nmap, nocope, ping, pmap, ps, readelf, route, screen, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shasum, socklist, stat, strace, tcpdump, tracepath, traceroute, w, wget, who, xrandr.
https://github.com/yogan/cope
||
cope-git
AUR
cw
— ненавязчивая обёртка для популярных unix-команд. Оборачивает
file
, что может вызывать проблемы.
Пресеты: arp, arping, auth.log@, blockdev, cal, cksum, clock, configure, cpuinfo@, crontab@, cw-pipe, cw-test.cgi, date, df, diff, dig, dmesg, du, env, figlet, file, find, finger, free, fstab@, fuser, g++, gcc, group@, groups, hdparm, hexdump, host, hosts@, id, ifconfig, inittab@, iptables, last, lastlog, lsattr, lsmod, lsof, ltrace-color, make, md5sum, meminfo@, messages@, mount, mpg123, netstat, nfsstat, nmap, nslookup, objdump, passwd@, ping, pmap, pmap_dump, praliases, profile@, protocols@, ps, pstree, quota, quotastats, resolv.conf@, route, routel, sdiff, services@, showmount, smbstatus, stat, strace-color, sysctl, syslog, tar, tcpdump, tracepath, traceroute, umount, uname, uptime, users, vmstat, w, wc, whereis, who, xferlog.
https://cwrapper.sourceforge.net/
||
cw
AUR
ccze
— быстрая раскраска журнала, написан на C, предназначен для замены colorize
https://github.com/cornet/ccze/
||
ccze
AUR
Библиотеки для раскраски вывода
libtextstyle
— библиотека на C для стилизации текстового вывода в терминалах
https://www.gnu.org/software/gettext/libtextstyle/manual/index.html
||
gettext
ruby-rainbow
— расширение для Ruby-класса String, добавляющее поддержку ANSI-цветов
https://rubygems.org/gems/rainbow/
||
ruby-rainbow
python-blessings
— тонкая обёртка для раскраски, стилизации и позиционирования
https://github.com/erikrose/blessings
||
python-blessings
AUR
lolcat
— программа на Ruby, которая делает текст цветным как радуга
https://github.com/busyloop/lolcat/
||
lolcat
Для отдельных приложений
Компиляторы
colorgcc
— обёртка на Perl, раскрашивающая предупреждения и ошибки, соответствующие формату вывода gcc
https://github.com/colorgcc/colorgcc
||
colorgcc
diff
Diff имеет встроенную поддержку цветов, что разумно использовать. Но эти обёртки тоже можно использовать:
colordiff
— Perl-скрипт для подсветки
diff
.
https://www.colordiff.org/
||
colordiff
cwdiff
— обёртка над
(w)diff
с поддержкой каталогов.
https://github.com/junghans/cwdiff
||
cwdiff
AUR
git-delta
— постраничный просмотрщик с подсветкой синтаксиса для git и diff.
https://github.com/dandavison/delta
||
git-delta
cat
bat
— клон cat с подсветкой синтаксиса и интеграцией с git.
https://github.com/sharkdp/bat
||
bat
less
source-highlight
В
less
можно добавить подсветку синтаксиса.
Установите
пакет
source-highlight
и добавьте в настройки вашей командной оболочки:
~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
export LESS='-R '
lesspipe
Активным пользователям командной строки может быть интересен
lesspipe
.
С помощью него можно просматривать список файлов в архиве:
$ less
архив
.tar.gz
==> use tar_file:contained_file to view a file in the archive
-rw-------
пользователь
/
группа
695 2008-01-04 19:24
архив
/
содержимое1
-rw-------
пользователь
/
группа
43 2007-11-07 11:17
архив
/
содержимое2
архив
.tar.gz (END)
lesspipe
также добавляет к
less
возможность взаимодействия с файлами отличными от архивов, предоставляя альтернативу для конкретной команды, ассоциированной с этим типом файлов (вроде просмотра HTML через
python-html2text
).
Перелогиньтесь после установки
lesspipe
для его активации, или выполните
source /etc/profile.d/lesspipe.sh
.
Make
colormake
— простая обёртка над make, делающая его вывод более читабельным.
https://github.com/pagekite/Colormake/
||
colormake
AUR
Ping
prettyping
— добавляет некоторые крутые возможности для мониторинга пинга. Обёртка над стандартным ping, делающая вывод более красивым, цветным, компактным и лёгким для чтения.
https://denilson.sa.nom.br/prettyping/
||
prettyping
Командные оболочки
bash
Смотрите
Bash (Русский)/Prompt customization (Русский)#Цвета
.
Fish
Смотрите
Fish (Русский)#Веб-интерфейс
.
xonsh
Смотрите
Customizing the Prompt
.
zsh
Смотрите
Zsh (Русский)#Цвета
.
Эмуляторы терминала
Виртуальная консоль
Если виртуальная консоль Linux работает через фреймбуффер, её цвета можно изменить. Это делается путём записи управляющей последовательности
\\e]PXRRGGBB
, где
X
это 16-ричный индекс цвета 0-F и
RRGGBB
это стандартный 16-ричный код RGB.
Например, для переиспользования существующих цветов из
~/.Xresources
добавьте в настройках своей командной оболочки:
if [ "$TERM" = "linux" ]; then
    _SEDCMD='s/.*\*color\([0-9]\{1,\}\).*#\([0-9a-fA-F]\{6\}\).*/\1 \2/p'
    for i in $(sed -n "$_SEDCMD" $HOME/.Xresources | awk '$1 < 16 {printf "\\e]P%X%s", $1, $2}'); do
        echo -en "$i"
    done
    clear
fi
Окно входа
Это пример цветного экрана входа в
/etc/issue
. Сделайте резервную копию исходного файла
mv /etc/issue /etc/issue.bak
как root и создайте новый
/etc/issue
:
\e[H\e[2J
                                                             \e[1;30m| \e[34m\r \s
      \e[36;1m/\\\\                        \e[37m||      \e[36m| =                 \e[30m|
     \e[36m/  \\\\                       \e[37m||      \e[36m|                   \e[30m| \e[32m\t
    \e[1;36m/ \e[0;36m.. \e[1m\\\\   \e[37m//==\\\\\\ ||/= /==\\\\ ||/=\\\\  \e[36m| | |/\\\\ |  | \\\\ /  \e[30m| \e[32m\d
   \e[0;36m/ .  . \\\\ \e[37m||    || ||  ||     ||  ||  \e[36m| | |  | |  |   X   \e[1;30m|
  \e[0;36m/  .  .  \\\\ \e[37m\\\\\\==/| ||   \\\\==/ ||  ||  \e[36m| | |  |\  \\/|  / \\\\ \e[1;30m| \e[31m\U
 \e[0;36m/ ..    .. \\\\   \e[0;37mA simple, lightweight linux distribution.   \e[1;30m|
\e[0;36m/_'        `_\\\\                                              \e[1;30m| \e[35m\l \e[0mon \e[1;33m\n
\e[0m
Смотрите также:
https://bbs.archlinux.org/viewtopic.php?pid=386429#p386429
https://www.linuxfromscratch.org/blfs/view/svn/postlfs/logon.html
X
Многие
Xorg
-терминалы, в том числе
xterm
and
urxvt
, поддерживают как минимум 16 цветов. Они могут быть изменены через
X resources
или через настройки, специфичные для терминала. Например:
~/.Xresources
! Black + DarkGrey
*color0:  #000000
*color8:  #555753
! DarkRed + Red
*color1:  #ff6565
*color9:  #ff8d8d
! DarkGreen + Green
*color2:  #93d44f
*color10: #c8e7a8
! DarkYellow + Yellow
*color3:  #eab93d
*color11: #ffc123
! DarkBlue + Blue
*color4:  #204a87
*color12: #3465a4
! DarkMagenta + Magenta
*color5:  #ce5c00
*color13: #f57900
!DarkCyan + Cyan (both not tango)
*color6:  #89b6e2
*color14: #46a4ff
! LightGrey + White
*color7:  #cccccc
*color15: #ffffff
Важно
Ресурсы цветов, такие как
foreground
и
background
, могут быть прочитаны другими приложениями (такими как
emacs
). Это можно обойти, указав имя класса, например
XTerm.foreground
.
Смотрите также:
#Цветные страницы в xterm или rxvt-unicode
о том, как автоматически раскрашивать жирный и подчёркнутый текст.
Color Themes
- обширный список цветовых тем терминала от Phraktured.
Xcolors by dkeg
(смотрите файлы
theme/dkeg -
тема
в репозитории)
base16 color schemes
Отображение 256-цветной палитры
Печатает 256 цветов на экран.
$ (x=`tput op` y=`printf %76s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done)
Отображение управляющих последовательностей tput
Замените
tput op
на желаемую команду.
$ ( strace -s5000 -e write tput op 2>&2 2>&1 ) | tee -a /dev/stderr | grep -o '"[^"]*"'
033[\033[1;34m"\33[39;49m"\033[00m
Просмотр числа поддерживаемых цветов
Эта команда выведет вам список всех терминалов, известных базе terminfo, и число поддерживаемых ими цветов. Возможные значения: 8, 15, 16, 52, 64, 88 и 256.
$ for T in `find /usr/share/terminfo -type f -printf '%f '`;do echo "$T `tput -T $T colors`";done|sort -nk2
Eterm-88color 88
rxvt-88color 88
xterm+88color 88
xterm-88color 88
Eterm-256color 256
gnome-256color 256
konsole-256color 256
putty-256color 256
rxvt-256color 256
screen-256color 256
screen-256color-bce 256
screen-256color-bce-s 256
screen-256color-s 256
xterm+256color 256
xterm-256color 256
Просмотр возможностей терминала
Эта команда покажет возможности вашего текущего терминала.
$ infocmp -1 | tr -d '\0\t,' | cut -f1 -d'=' | grep -v "$TERM" | sort | column -c80
acsc		ed		kcuu1		kich1		rmso
am		el		kDC		kLFT		rmul
bce		el1		kdch1		km		rs1
bel		enacs		kel		kmous		rs2
blink		eo		kend		knp		s0ds
bold		flash		kEND		kNXT		s1ds
btns#5		fsl		kent		kpp		s2ds
bw		home		kf1		kPRV		s3ds
ccc		hpa		kf10		kRIT		sc
civis		hs		kf11		kslt		setab
clear		ht		kf12		lines#24	setaf
cnorm		hts		kf13		lm#0		setb
colors#0x100	ich		kf14		mc0		setf
cols#80		ich1		kf15		mc4		sgr
cr		il		kf16		mc5		sgr0
csr		il1		kf17		mc5i		sitm
cub		ind		kf18		mir		smacs
cub1		indn		kf19		msgr		smam
cud		initc		kf2		ncv#0		smcup
cud1		is1		kf20		npc		smir
cuf		is2		kf3		op		smkx
cuf1		it#8		kf4		pairs#0x7fff	smso
cup		ka1		kf5		rc		smul
cuu		ka3		kf6		rev		tbc
cuu1		kb2		kf7		ri		tsl
cvvis		kbs		kf8		rin		u6
dch		kc1		kf9		ritm		u7
dch1		kc3		kfnd		rmacs		u8
dl		kcbt		kFND		rmam		u9
dl1		kcub1		kHOM		rmcup		vpa
dsl		kcud1		khome		rmir		xenl
ech		kcuf1		kIC		rmkx		xon
Скрипты, выводящие схему цветов
На странице
[3]
есть скрипты, которые отобразят вашу текущую схему цветов.
Поддержка True Color
Некоторые терминалы поддерживают все 16 миллионов цветов (RGB, 8 бит на канал): xterm, console, st и т.д. Соответствующие значения TERM
xterm-direct
,
konsole-direct
,
st-direct
и.т.д понимает ncurses с версии 6.1
[4]
. Подробнее об эмуляторах терминала и приложениях, поддерживающих True Color, смотрите
[5]
.
Имейте в виду, что ядро Linux поддерживает управляющие последовательности SGR для True Color, но использовать это бессмысленно, потому что драйвер отобразит 24-битные цвета на 256-цветную палитру (смотрите функции
rgb_foreground
,
rgb_background
). Поэтому в terminfo нет записи
linux-direct
.
Смотрите также
клон lolcat на x64 ассемблере