Что является причиной появления зеленого фона в выводе ls?

Что является причиной появления зеленого фона в выводе ls?

Скриншот вывода ls на Linux-машине

Есть два каталога, показанные '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_COLORBACKGROUND_COLORчисло в диапазоне от 0 до 255. Полный список цветовых кодов для 16- и 256-цветовых режимов показан на снимке экрана ниже:

Цветовые коды 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на 34for blueon nobg. Еще проще, сделать это nofgon 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

Связанный контент