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

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

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

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

Помимо раскраски файлов на основе их типа (бирюза для аудиофайлов, ярко-красная для архивов и сжатых файлов и фиолетовая для изображений и видео), 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 = blink
    • 07 = обратный,
    • 08 = скрытый
  • FOREGROUND_COLOR указывает цвет переднего плана:

    • 30 = черный
    • 31 = красный
    • 32 = зеленый
    • 33 = желтый
    • 34 = синий,
    • 35 = пурпурный
    • 36 = голубой
    • 37 = белый
  • BACKGROUND_COLOR указывает цвета фона, цветовые коды такие же, как и для переднего плана

Поля могут быть опущены справа, поэтому, например, .tar 01;31 означает полужирный и красный.

Цвета 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 цветами и сохранив его как ~/.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 .

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

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

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

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

 dircolors -p > ~/.dircolors 

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

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

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

Voilà 🙂

В то время как все технические ответы верны, я бы счел это немного неофициальным предупреждением, что вы немного распустили права на щедро или копируете criss + cross … (чаще всего мы все делаем, чтобы вещи сначала работали, а ?)

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

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

 chmod -R ax,ow,+X thatGreenFolderWithSubfolders/ 

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

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