Что вызывает этот зеленый фон в выводе ls?

141

screencap вывода ls на машине linux

Есть две директории, показанные 'ls'. Обычно каталоги в любом месте синего цвета на черном фоне. Но первый синий на зеленом и его невозможно прочитать. Почему это? Как сделать его синим на черном или хотя бы чем-то светлым на чем-то темном?

Это на Ubuntu 12.04, использующей bash в Gnome Terminal. В Konsole синий цвет немного темнее, и его можно прочитать, хотя может быть и лучше.

DarenW
источник

Ответы:

162

Помимо раскраски файлов по их типу (бирюзовый для аудиофайлов, ярко-красный для архивов и сжатых файлов и пурпурный для изображений и видео), а lsтакже раскраски файлов и каталогов на основе их атрибутов:

  • Черный текст с зеленым фоном означает, что каталог доступен для записи другим пользователям, кроме владельца и группы, и имеет установленный бит закрепления ( o+w, +t).
  • Синий текст с зеленым фоном указывает на то, что каталог доступен для записи другим пользователям, кроме владельца и группы, и не имеет установленного фиксированного бита ( o+w, -t).

Стефано Палаццо из Ask Ubuntu сделал очень поучительную картину различных цветов атрибутов:

Что означают разные цвета в терминале

Как отметил Тердон , настройки цвета можно изменить с помощью 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 цветовых режимов показан на скриншоте ниже:

16 и 256 цветовых режимов цветовых кодов

Томас Найман
источник
5
Коды BACKGROUND_COLOR не совпадают с кодами FOREGROUND_COLOR; Фоновые коды 40-47
Райан В. Бисселл
38;5;запускает xterm 256- цветной код цвета переднего плана. 48;5;запускает xterm 256-цветной код цвета фона. Cyan в моих выводах dircolors 38;5;51 нет, 36 хотя результат тот же.
стевеслива
1
@stevesliva: Спасибо за ваш комментарий. Я отредактировал ответ, чтобы правильно указать коды цветов фона и описал 256-цветовые коды переднего плана и цвета фона.
Томас Найман
55

Цвета 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файл.

Тердон
источник
8
Цвета по умолчанию часто указывают на то, что оригинальный автор ненавидит нас и наши глаза, хотя ...
kurtm
1
Благодарю. Почему вы иногда пишете ~ / .dirname, иногда ~ / dircolors, а иногда ~ / .dircolors? они должны быть одинаковыми?
Тим
Благодарю. Почему eval "$(dircolors ~/dircolors)";вместо более прямого пути, например dircolors ~/dircolors?
Тим
@Tim, потому что dircolors печатает только настройки, вам нужно оценить их, чтобы они могли быть прочитаны.
Terdon
кому их читать?
Тим
11

Хотя все технические ответы верны, я бы посчитал это неформальным предупреждением о том, что вы немного отказались от прав на щедрое копирование или копирование крест-накрест ... (чаще всего мы все делаем, чтобы все сначала работало, да ?)

Как сделать его синим на черном, ...?

Хорошее «озеленение», чтобы вернуться к правам, которые вы, скорее всего, хотите, это утверждение:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/

Лучше всего понять, что он делает, если вы понимаете назначение прописных букв + X «специальное выполнение», т.е. смотрите Википедию

Это действительно полезно, когда используется с «+» и обычно в сочетании с опцией -R для предоставления группе или другому доступу к большому дереву каталогов без установки разрешения на выполнение для обычных файлов (таких как текстовые файлы), что обычно происходит, если вы только что использовали "chmod -R a + rx ...

Фрэнк Нок
источник
8

У меня был тот же вопрос, ответ Тердона хорош, но я думаю, что есть путаница между dirname и dircolors?

В любом случае, после некоторых дальнейших исследований я смогла изменить цвет, поэтому я поделюсь своим решением здесь. Это может быть полезно для кого-то когда-нибудь!

Итак, 3 простых шага:

Во-первых, как сказал тердон, скопируйте цвета по умолчанию в файл

dircolors -p > ~/.dircolors

Затем измените этот файл. Вы можете найти некоторые значения для цветов внутри, но я нашел больше здесь :)

И наконец, добавьте следующую строку в ваш ~/.bashrcфайл, чтобы цвета автоматически загружались при открытии терминала:

eval 'dircolors ~/.dircolors' > /dev/null

Вуаля :)

KevinG
источник
1
потому что ~/.zshrcя должен был пойти с if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Извините, разрыв строки ужасен
Эрик Д. Джонсон
2

Чтобы быстро решить проблему, (сделайте другие записи для файлов желтыми на nobg):

LS_COLORS+=':ow=01;33'

Заменить 33на 34для синего цвета на nobg. Еще проще сделать nofg на 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;это префикс для 256-цветов переднего плана и 256-цветов 48;5;фона. 256 цветов не поддерживаются всеми терминалами.

Также смотрите - Что означают разные цвета в ls? - на AskUbuntu.

loxaxs
источник
1

Ну, это означает, что эта папка имеет разрешения, если вы запустите это:

сhmod og-w AU_LI

это удалит bgcolor :)

Городецкий Димитрий
источник
0

Чтобы это исправить, попробуйте параметр ow над LS_COLORS

Например:

~LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33'
~ls -l

введите описание изображения здесь

Теперь вы добавляете опцию ow

~export LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0'
~ls -l

введите описание изображения здесь

PYK
источник
0

Вы можете изменить оттенок зеленого в Putty, чтобы сделать текст читабельным.

Откройте Putty и перейдите в Window \ Colors, выберите «ANSI Green», установите его на темно-зеленый (R: 0 G: 70 B: 0).

Эрхан аланкус
источник