
Я понимаю, ls
что используется dircolors
для отображения цветного вывода. dircolors
Имеет базу данных цветов по умолчанию, связанную с расширениями файлов, которую можно распечатать с помощью команды
dircolors --print-database
Из man dir_colors
того, что я прочитал, общесистемная база данных должна находиться в /etc/DIR_COLORS
. Но этот файл не существует в моей системе (Debian). Как мне изменить общесистемные настройки цвета для dircolors
? Откуда команда dircolors --print-database
берет настройки, если файла не существует.
Я знаю, что у пользователя может быть свой файл ~/.dircolors
с настройками, но мне это не подходит, так как мне нужно изменить настройки для всех.
Второй вопрос, можно ли использовать 8-битные цвета для dircolors. Мой терминал xterm-256color
.
решение1
ls
берет настройки цвета из переменной окружения LS_COLORS
. dircolors
— это просто удобный способ сгенерировать эту переменную окружения. Чтобы эта переменная окружения вступила в силу на уровне всей системы, поместите ее в файл запуска вашей оболочки.
Для bash
, вы бы ввели это /etc/profile
:
# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.
eval "$(dircolors /etc/DIR_COLORS)"
Для zsh
, вы либо вставите его /etc/zshrc
, либо организуете zsh
чтение /etc/profile
при запуске. Ваш дистрибутив, возможно, zsh
уже сделал это. Я просто поднимаю этот вопрос, чтобы указать, что настройка dircolors
для всех зависит от используемой оболочки.
Что касается источника dircolors
получения настроек, то если вы не указываете файл, то он просто использует некоторые встроенные значения по умолчанию.
Вы можете использовать xterm
256 кодов цветового перехода в вашем файле dircolors, но имейте в виду, что они будут работать только для xterm
совместимых терминалов. Например, они не будут работать в текстовой консоли Linux.
Формат для 256 кодов перехода цвета предназначен 38;5;colorN
для цветов переднего плана и 48;5;colorN
для цветов фона. Например:
.mp3 38;5;160 # Set fg color to color 160
.flac 48;5;240 # Set bg color to color 240
.ogg 38;5;160;48;5;240 # Set fg color 160 *and* bg color 240.
.wav 01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!
решение2
КОРОТКИЙ ОТВЕТ
dircolors
(сокращение от Directory Colors) нельзя использовать для глобального изменения цветов. Для этого вам, вероятно, придется настроить цветовую палитру в эмуляторе терминала.
Например, dircolors
не используется для настройки цветов, запрошенных grep
, vi
, tmux
или man
.
dircolors
используется для настройки цветов, которые используют команды ls
иtree
запросбыть отображеннымпри отображении имен ваших файлов.
Я подчеркиваюзапрос на отображение, поскольку цвета, запрашиваемые командой, — это только те, которые отправляются на ваш эмулятор терминала. Затем ваш эмулятор терминала может выбрать отображение цветов, отличных от запрошенных. То, что запрашивается, и то, что в конечном итоге выводится на экран вашего терминала, который вы увидите, может быть двумя разными наборами цветов.
ОБЗОР ПРОЦЕССА ЦВЕТА
1) Любая текстовая программа или встроенная оболочка, может по своей конструкции, выход ANSI (Американский национальный институт стандартов)запрос цветаEscape-коды. Здесь я подчеркиваю, что это только запросы к терминалу, который принимает окончательное решение о том, как их отображать. Система цветовых кодов ANSI — очень старая система, впервые появившаяся на автономных аппаратных терминалах.
Запрос с цветным текстом выглядит примерно так:
<requested-color><text-to-be-displayed-in-that-color><next-requested-color><next-text...
Часть 'requested-color' не отображается. Вместо этого она используется эмулятором терминала, чтобы заставить экран отображать 'text-to-be-displayed-in-that-color' в запрошенном цвете.
Программы могут вызывать [ncurses][1]
для вывода кодов ANSI на эмулятор терминала. По сути, у вас есть 8 стандартных цветов и 8 более смелых/ярких цветов, которые можно запросить. (ncurses — это сокращение от New Curses, где «curses» — это игра слов от Cursor Optimization, или программной библиотеки для эффективного текстового вывода на экран терминала.)
Многие общие текстовые команды можно настроить для вывода цветовых кодов ANSI.запросчтобы их вывод был раскрашен терминалом. Примеры: ls
, tree
, vim
, grep
, tmux
, и man
.
Эти выходные цветовые коды (управляющие коды с префиксом escape) требуют, чтобы дисплей изменился на заданную цветовую комбинацию (передний план, фон и атрибуты) перед выводом следующего текста. Опять же, эти управляющие коды фактически не определяют цвета, которые вы видите. Вместо этого они указывают конкретные варианты палитры.
Раньше была стандартная палитра цветов. Если вы запросили зеленый, то вы увидите зеленый.
Но эмулятор терминала, например GNOME Terminal
, может изменить это поведение. Например, если программа запрашиваетзеленый, с помощью зеленого управляющего кода ANSI вы можете решить, что это должно быть отображено ввишнево-красныйна вашем экране. Важно помнить, что это означает следующее:всезапрошенный зеленый цвет в каждой терминальной программе будет преобразован в красный. Другими словами, вы не можете просто настроить выходные цвета одной конкретной программы, вот grep
так.
2A) Команды каталогов, такие как ls
и , tree
являются несколько особенными, в том, что они могут быть настроены пользователем для раскрашивания имен файлов по типу имени файла в соответствии с вашими требованиями. Это отличается от man
, например, который использует фиксированный набор альтернативных цветов в дополнение к черному и белому.
Например, папки можно отображать темно-синим цветом, а ссылки — светло-голубым.
Вы можете запросить цвет для указанных форматов терминала (например, ansi или putty), а также по базовому типу файла (например, папка, блок или липкий) и/или по соответствующему расширению имени файла (например, *.sh или *.png). Это делается путем изменения выходных цветовых кодов ANSI по типу имени файла с использованием настроек, заданных переменной среды LS_COLORS. Ниже описано, как это сделать.
2Б)Существуют также специальные цветовые схемы вvim
используя например :colorscheme default
. (Тема для другого дня.)
3)Ваш терминал (Терминал GNOME в моем случае) затем интерпретирует все коды ANSI для генерации фактических цветов дисплея, которые вы видите.
ГЛОБАЛЬНАЯ НАСТРОЙКА ЦВЕТОВ В ВАШЕМ ЭМУЛЯТОРЕ ТЕРМИНАЛА
Если вы измените настройки цвета в GNOME Terminal
(или, возможно, в любом эмуляторе терминала, который поддерживает эту функцию), это повлияет на наблюдаемые цвета всех текстовых программ, которые выводят цветовые коды ANSI. Эти изменения цвета будут одновременно изменены во всех открытых окнах терминала (при условии, что вы используете один и тот же эмулятор терминала для всех окон).
Если вы используете два разных эмулятора терминала (например, GNOME Terminal
и XTerm
), то каждый из них может по-разному настраивать цвета конечного вывода.
С помощью настроек терминала GNOME вы можете точно настроить общесистемную «цветовую палитру» (т. е. набор из 16 цветов, доступных текстовым приложениям) на свой собственный набор цветов.
GNOME Terminal
Помощь говорит:
Традиционно эмуляторы терминала предлагали палитру из 16 цветов, это то, что вы можете изменить здесь. Терминал поддерживает расширенный набор из 256 цветов, но дополнительные 240 цветов не могут быть отредактированы здесь. Терминал даже предлагает прямой доступ к более чем 16 миллионам цветов, это называется режимом «true color».
Если изменения, внесенные вами в палитру, не дают эффекта, вероятно, содержимое, которое вы видите, состоит из цветов расширенной палитры или настоящих цветов, а не из 16 базовых цветов.
ИСПОЛЬЗОВАНИЕ DIRCOLORS
Вот как это работает:
a) Run $ dircolors -p >/etc/DIR_COLORS # to produce DIR_COLORS template file
b) Hand edit /etc/DIR_COLORS to adjust ANSI color codes that will be output
for various things to display. For example, any filenames like *.png can
request a particular ANSI color combination. (ANSI color codes are escape
prefixes.)
c) Run dircolors again, this time in both
/etc/profile (for logins) and
/etc/bash.bashrc (for terminal windows)
to read DIR_COLORS and create and export the LS_COLORS
environment variable, like this:
$ eval "$(dircolors -b /etc/DIR_COLORS)"
Я вызываю его dircolors
в самом начале /etc/profile
, где я использую его для настройки и экспорта LC_COLORS
.
# === Create DEFAULT LS_COLORS ENVIRONMENT VARIABLE ===========================
# /etc/DIR_COLORS is a data file from: $ dircolors -p > /etc/DIR_COLORS
eval "$(dircolors -b /etc/DIR_COLORS)" # This reads /etc/DIR_COLORS
# and then runs these two commands:
#
# $ LS_COLORS=... # <-- where this value is created from /etc/DIR_COLORS
# $ export LS_COLORS
Для справки, как я включаю цвета в различных командах в /etc/profile (который считывается при каждом входе в систему, (включая $ bash --login
)), описано ниже, в самом низу этого ответа.
Обратите внимание, что есть некоторые папки и файлы обратного видео, которые отображаются странно ls
(например, файлы резервных копий DOS). Никакие манипуляции с Терминалом GNOME (ниже) не влияют на эти цвета. Но вы можете отредактировать DIR_COLORS, используемый dircolors
(см. примечания выше), чтобы настроить LS_COLORS.
СОВЕТЫ ПО НАСТРОЙКЕ ЦВЕТОВ ВАШЕЙ СИСТЕМЫ
В меню терминала GNOME выберите Edit
| Preferences
. В левой панели выберите профиль, который вы хотите настроить, а в правой панели выберите вкладку Colors
.
!! ПРЕЖДЕ ЧЕМ ПРОДОЛЖИТЬ, Я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ВАМ СДЕЛАТЬ РЕЗЕРВНУЮ КОПИЮ ВАШИХ СУЩЕСТВУЮЩИХ НАСТРОЕК. Скриншот будет неплох. Смотрите мой скриншот ниже.
TL;DR- Если вы не хотите устанавливать этот флажок:
чтобы использовать самые основные настройки по умолчанию, но вместо этого вы хотите черный рабочий фон с цветными bash
, vim
, grep
, ls
, ... приложениями, то попробуйте настроить цвета следующим образом:
Сначала я нашел этот диалог цветов немного запутанным, но он становится логичным, как только вы в нем разберетесь. Самая большая проблема в том, что все мои текстовые приложения используют одну и ту же цветовую палитру, но используют ее несколько по-разному, особенно ls
.
Вот точные цвета, которые я использую:
black aqua green orange light yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #F4FF92 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
ПОНИМАНИЕ ДИАЛОГА «НАСТРОЙКИ - ПРОФИЛЬ» ТЕРМИНАЛА GNOME
Верхняя и нижняя секции ( Text and Background Color
и Palette
), похоже, работают почти полностью независимо, за исключением того, что Palette
выборки являются слоем поверх (т.е. дополнительно изменяют) верхних настроек в Text and Background Color
. (Кроме того, даже если Use colors from system theme
отмечено , Show bold text in bright colors
в нижней части все еще имеет значение, по крайней мере для ls
.)
Для начала давайте поиграемся с Text and Background Color
настройками.
Они определяют цвета по умолчанию для основных, неспециальных Text
и Background
цветов. Вы также можете выбрать необязательные модификаторы для Bold
или Highlight
текста, и для фиксированного цвета курсора, если вы этого хотите, например, ярко-оранжевый, который может сделать некоторых людей счастливыми.
Флажок Use colors from system theme
, похоже, решает, хотите ли вы наследовать настройки цвета или определить их самостоятельно. Когда вы снимаете флажок, вы можете выбрать встроенную или пользовательскую схему из выпадающего списка.
Выбранные вами цвета будут помещены в образцы Text
и Background
ниже, за исключением Custom
.
Обратите внимание, что ваш выбор здесь не влияет на три других флажка, расположенных ниже.
Также обратите внимание, что если вы сначала нажмете на образец Text
или Background
, вы увидите окно выбора цвета, и как только вы сделаете Select
в нем выбор, оно установит выпадающее Built-in schemes
меню на «Пользовательский».
Если вы отметите Bold color
и установите цвет, то текст, который программой указан как жирный, получит переопределение этого цвета.
Если вы отметите этот флажок Cursor color
, то сможете выбрать фиксированные цвета для курсора. (Обратите внимание, вам придется навести курсор на текст, чтобы увидеть его изменение.) Если этот флажок не установлен, курсор будет меняться в зависимости от цвета текста, над которым он находится.
Если вы отметите этот флажок Highlight color
, вы увидите эффект этих двух образцов, например, в vim, когда вы перетаскиваете мышь, чтобы скопировать текст.
Теперь пришло время повозиться с Palette
настройками.
Подобно вышеприведенному, раскрывающийся список помещает набор цветов в образцы под ним. Вы заметите, что есть две строки по 8. Эти образцы переопределяют 8 цветов ANSI переднего плана и 8 цветов фона, установленных terminfo.
Важно отметить, что вы можете настроить эти образцы на тонкие цветовые вариации.
Кроме того, изменения, которые вы здесь вносите, влияют на все или почти все ваши текстовые программы, в которых включена поддержка цвета. Так что будьте осторожны. (Я не могу вам сказать, как это сделать, потому что я пока не знаю. Сделайте как минимум снимок экрана.)
Хотя я и не знаю, для чего используются все эти образцы, некоторые эксперименты привели меня к следующему выводу.
Прежде чем начать тестирование, откройте несколько вещей из GNOME Terminal
: vim
сеанс редактирования кода bash
, и еще один из c
, ls
вашего домашнего каталога, tree
запуск и tmux
сеанс. По мере того, как вы меняете что-то ниже, вы сможете лучше видеть, что меняется.
Попробуйте сначала внести небольшие изменения. И обязательно нажмите и снимите флажок внизу (подробнее об этом ниже).
Осторожность:Если вы установите и затем вручную настроите 16 цветовых образцов, как я предлагаю, будьте осторожны, потому что если вы снова выберете что-то другое в , это сотрет ваши предыдущие настройки, и если вы снова захотите, Palette
вам придется начинать все заново, что является головной болью. (Кажется, нет способа сохранить ваши пользовательские настройки цветов, кроме как с помощью снимка экрана или путем их записи по одному.)Custom
Built-in schemes:
Palette
Custom
Built-in schemes:
Custom
-- Color palette:
настройки
tmux status text status-backgr
tmux vi literals flow (orange) comments&fcns $names var names ?
vi C - literals types flow (brown) comments&fcns macros - ?
vi Bash - literals - flow (brown) comments&fcns Environ var names ? flow: brown (can't change with gnome)
Bash - user@dir $
Bash ls - Reverse-backg Reverse-foregr
gcc
black aqua green orange dark yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #C6CF76 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
tmux ? ? ?
tmux vi ? ? ?
vi C ? ? ?
vi Bash ? ? ?
Bash ? root@dir # ? ?
Bash ls ? x.sh ? directories media files links ?
gcc ? errors ? ?
Наконец, внизу есть Show bold text in bright colors
флажок. Справка GNOME говорит:
Яркие цвета для жирного текста
Традиционно терминалы не разделяли жирный шрифт и интенсивные цвета, часто оба они были включены вместе. Недавние улучшения, такие как введение поддержки истинного цвета и определенных цветовых схем (например, Solarized) сделали желательным разделение двух концепций, то есть сделать яркость независимой от веса шрифта.
...
Disable Show bold text in bright colors for the new default behavior, the complete separation of color intensity and font weight;
или включите эту опцию для улучшения обратной совместимости.
Если отмечено, то берется то, что отображалось в верхних строках, и вместо этого отображаются цвета нижней строки. Если вы отметите это, вы заметите, что некоторые имена из ls
немного изменят цвета. Я думаю, это связано с последовательностями цветов ISO 6429 № 1, «для более ярких цветов» в $ man dir_colors
. Похоже, что это влияет в основном на ls
, а не на vim
.
КАК ВЫГЛЯДЯТ ЦВЕТА ИЗ ВСТРОЕННЫХ СХЕМ
Когда built-in schemes
были испытаны с помощью утилиты проверки цвета, описанной здесьЯ вижу следующие результаты (советую скомпилировать и связать с этим $ gcc -Wall -lcurses color-demo.C
):
Обратите вниманиеShow bold text in bright colors
Флажок отмечен. Если флажок не отмечен, цвета высокой и низкой интенсивности одинаковы.
Linux console
(судя по всему, это оригинальный набор цветов CGI):
xterm
:
rxvt
(не по порядку, поскольку этот вариант ближе к предыдущим):
Tango
(не по порядку, поскольку это ближе к Solarized ниже):
Solarized
:
КАК НАСТРОИТЬ КОМАНДЫ ДЛЯ ОТОБРАЖЕНИЯ В ЦВЕТЕ?
В вашем /etc/.bashrc.shared
(называется ~/.bashrc
и /root/.bashrc
), или если у вас этого нет в вашем ~/.bashrc
и /root/.bashrc
:
# === ADD COLOR UNLESS DUMB TERMINAL ========================================
if [ "$TERM" != "dumb" ]; then
# ENVIRONMENT:
# You can turn off these colorizing aliases in the interactive environment by invoking
# shell with TERM="dumb bash".
# Assume LS_COLORS is already set by dircolors in /etc/profile. It can be adjusted later.
# Using color to distinguish file types is disabled both by default and with --color=never.
# With --color=auto, ls emits color codes only when standard output is connected to a terminal.
export COLOR_MODE='--color=auto'
# The use of alias limits color effects to the interactive command usage.
# It has advantage over exporting environment variable "export COLOR_MODE='--color=auto'"
# since color can be seen under pager programs such as less(1). If you wish to suppress
# color when piping to other programs, use "--color=auto" instead in the above example
# for "~/.bashrc".
# !! NOTE - alias is very picky about extra spaces around = sign
# --- grep
# Surround the matched (non-empty) strings, matching lines, context lines, file names,
# line numbers, byte offsets, and separators (for fields and groups of context lines)
# with escape sequences to display them in color on the terminal.
# The colors are defined by the environment variable GREP_COLORS, (plural).
# See grep man page for GREP_COLORS instructions.
alias grep=' grep ${COLOR_MODE}'
alias egrep='egrep ${COLOR_MODE}'
alias fgrep='fgrep ${COLOR_MODE}'
alias zgrep='zgrep ${COLOR_MODE}'
# --- ls ------------------------
alias ls='ls ${COLOR_MODE}'
# These next two use the ls alias above, i.e. the first one below is really 'ls ${LS_OPTS} -l'
alias ll='ls -l' # -l = long
alias l='ls -lA' # -A = amost all (.*, but not . nor ..)
# --- tree ----------------------
alias tree='tree -C' # -C adds color to tree
# --- less ----------------------
alias less='less -R' # Output raw control chars for ANSI colors
# --- man -----------------------
# ref: http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/
# NOTE these seem to use TERMCAP which is obsolite.
# ANSI "color" escape sequences are sequences of the form: ESC [ ... m
export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode
export LESS_TERMCAP_md=$(printf '\e[01;38;5;75m') # enter double-bright mode
export LESS_TERMCAP_me=$(printf '\e[0m') # turn off all appearance modes (mb, md, so, us)
export LESS_TERMCAP_so=$(printf '\e[01;33m') # enter standout mode
export LESS_TERMCAP_se=$(printf '\e[0m') # leave standout mode
export LESS_TERMCAP_us=$(printf '\e[04;38;5;200m') # enter underline mode
export LESS_TERMCAP_ue=$(printf '\e[0m') # leave underline mode
fi
решение3
Откуда команда
dircolors --print-database
берет настройки, если файла нет.
В соответствии сруководство, он использует предварительно скомпилированную базу данных при отсутствии файла.
Если указан файл, dircolors считывает его, чтобы определить, какие цвета использовать для каких типов файлов и расширений. В противном случае используется предварительно скомпилированная база данных. Для получения подробной информации о формате этих файлов запустите '
dircolors --print-database
'.
Чтобы изменить настройки для всех, вы можете создать /etc/dircolors
файл и добавить в него следующее /etc/bashrc
:
d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"
решение4
Linux устанавливает цвета фона консоли с помощью dircolors:
Ваш файл dircolors управляет цветами слов, которые появляются через ls на консоли. Найдите этот .dircolors
файл для вашего дистрибутива, ссылка для помощи:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html
У меня в Fedora 17 файл dircolors выглядит так:/etc/DIR_COLORS
Скопируйте /etc/DIR_COLORS
в свой /home/el/.dircolors
каталог. Создайте его, если он не существует.
Отредактируйте /home/el/.dircolors, найдите текст «dir».
Изменить это:
DIR 01;34 # directory
К этому:
DIR 01;36 # directory
Сохраните, закройте и перезапустите оболочку. Каталоги меняются от темно-синего на черном (нечитаемые) до ярко-бирюзового на черном (читаемые).