Есть два каталога, показанные 'ls'. Обычно каталоги в любом месте синие на черном фоне. Но первый из них синий на зеленом и его невозможно прочитать. Почему так? Как сделать его синим на черном или хотя бы что-то светлое на чем-то темном?
Это на Ubuntu 12.04, использую bash в Gnome Terminal. В Konsole синий немного темнее и его можно прочитать, хотя могло бы быть и лучше.
решение1
Помимо раскрашивания файлов в зависимости от их типа (бирюзовый для аудиофайлов, ярко-красный для архивов и сжатых файлов и фиолетовый для изображений и видео), ls
также раскрашивает файлы и каталоги в зависимости от их атрибутов:
- Черный текст на зеленом фоне указывает на то, что каталог доступен для записи другим пользователям, кроме владельца и группы, и для него установлен бит закрепления (
o+w, +t
). - Синий текст на зеленом фоне указывает на то, что каталог доступен для записи другим лицам, кроме владельца и группы, и ненетустановите липкий бит (
o+w, -t
).
Стефано Палаццонад вСпросите Убунтусделал эту очень поучительную картинку с различными цветами атрибутов:
Кактердонкак указано, настройки цвета можно изменить черезdircolors
. Список различных настроек цвета можно получить с помощью dircolors --print-database
.
Каждая строка вывода, например BLK 40;33;01
, имеет вид:
[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
TARGET
указывает цель для правила окраскиTEXT_STYLE
указывает стиль текста:00
= нет01
= жирный шрифт04
= подчеркивание05
= моргать07
= обратный,08
= скрытый
FOREGROUND_COLOR
указывает цвет переднего плана:30
= черный31
= красный32
= зеленый33
= желтый34
= синий,35
= пурпурный36
= голубой37
= белый
BACKGROUND_COLOR
указывает цвета фона:40
= черный41
= красный42
= зеленый43
= желтый44
= синий,45
= пурпурный46
= голубой47
= белый
Поля можно опускать, начиная справа, например, .tar 01;31
это означает жирный шрифт и красный цвет.
XTerm и большинство других современных эмуляторов терминала поддерживают 256 цветов.
Код цвета переднего плана XTerm из 256 цветов имеет следующий вид:
38;5;[FOREGROUND_COLOR]
Цветовой код фона XTerm из 256 цветов имеет вид:
48;5;[BACKGROUND_COLOR]
где и FOREGROUND_COLOR
— BACKGROUND_COLOR
число в диапазоне от 0 до 255. Полный список цветовых кодов для 16- и 256-цветовых режимов показан на снимке экрана ниже:
решение2
Цвета ls
могут отображать разрешения; по умолчанию в некоторых системах каталоги, в которых у всех есть разрешение на запись, отображаются на зеленом фоне:
Вы можете изменить цвета, отредактировав $LS_COLORS
переменную, используя dircolors
(из man ls
):
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. The LS_COLORS environment
variable can change the settings. Use the dircolors command to set it.
Синтаксис здесь, конечно, немного раздражает, но вы можете изменить этот цвет, создав файл с нужными вам цветами и сохранив его как ~/.dircolors
:
dircolors -p > ~/.dircolors
Эта команда выведет значения по умолчанию в ~/.dircolors
. Затем вам нужно будет отредактировать этот файл и изменить эту строку:
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
Например, чтобы сделать черный текст на красном фоне (см.здесьдля списка цветовых кодов):
OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky
Вам не обязательно иметь все значения по умолчанию, вы также можете просто создать файл с одной строкой, переопределив только ту, которую вы хотите изменить. В любом случае, как только вы создали файл, загрузите его с помощью:
eval "$(dircolors ~/.dircolors)";
И вот оно в действии:
Чтобы это происходило автоматически, добавьте eval
указанную выше команду в свой ~/.bashrc
файл.
решение3
tldr; Как это исправить?
Чтобы быстро решить проблему:
LS_COLORS+=':ow=01;33'
- Делает так, чтобы файлы, доступные для записи, отображались желтым цветом на nobg
- Отредактируйте свой профиль оболочки (например
~/.bashrc
,~/.profile
, и т.д.), чтобы сделать его постоянным.
Подробнее:
Заменить 33
на 34
for blue
on nobg
. Еще проще, сделать это nofg
on nobg
:
LS_COLORS+=:ow=
Чтобы сделать изменение постоянным, добавьте его в свой .profile:
echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile
Чтобы просмотреть правила, не связанные с расширением LS_COLORS
:
echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
sed
размещает каждое правило на одной строке и grep
удаляет правила, начинающиеся с*.'.
Чтобы изучить ls
цвета на вашем терминале, рассмотрите возможность использования
C="$LS_COLORS"
function sc () {
echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
ls /mnt # Or the path to your example directory.
}
Затем
LS_COLORS="$C:ow=38;5;250;48;5;025";t
Как указано в другом ответе (Томаса Наймана), 38;5;
это префикс для foreground x-term 256-colors и 48;5;
для background x-term 256-colors. Однако 256-colors поддерживается не всеми терминалами.
Также см-Что означают разные цвета в ls?-на AskUbuntu.
решение4
Вот три шага, которые я использовал для изменения цветов:
Сначала скопируйте цвета по умолчанию в файл.
dircolors -p > ~/.dircolors
Затем измените этот файл. Внутри вы можете найти некоторые значения цветов, а вот еще:
Code Color
0 Default Colour
1 Bold
4 Underlined
5 Flashing Text
7 Reverse Field
31 Red
32 Green
33 Orange
34 Blue
35 Purple
36 Cyan
37 Grey
40 Black Background
41 Red Background
42 Green Background
43 Orange Background
44 Blue Background
45 Purple Background
46 Cyan Background
47 Grey Background
90 Dark Grey
91 Light Red
92 Light Green
93 Yellow
94 Light Blue
95 Light Purple
96 Turquoise
100 Dark Grey Background
101 Light Red Background
102 Light Green Background
103 Yellow Background
104 Light Blue Background
105 Light Purple Background
106 Turquoise Background
(источник)
И наконец, добавьте в свой файл следующую строку, ~/.bashrc
чтобы цвета автоматически загружались при открытии терминала:
eval 'dircolors ~/.dircolors' > /dev/null
Для ~/.zshrc
:
if [[ -f ~/.dircolors ]] ; then
eval $(dircolors -b ~/.dircolors)
elif [[ -f /etc/DIR_COLORS ]] ; then
eval $(dircolors -b /etc/DIR_COLORS)
fi