Що спричиняє цей зелений фон у вихідному лс?


141

скріншот виводу ls на машині Linux

Є два каталоги, показані "ls". Зазвичай каталоги в будь-якому місці сині на чорному тлі. Але перший - синій на зеленому кольорі і неможливо прочитати. Чому це? Як зробити його синім на чорному чи хоча б щось світле на чомусь темному?

Це на Ubuntu 12.04, використовуючи bash у терміналі Gnome. У Консолі синій трохи темніше, і його можна читати, хоча це може бути набагато кращим.

Відповіді:


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;запускає кольоровий код кольору 256 xterm. Циан у моїх дикольорах 38;5;51 не 36 є результатом, хоча результат той самий.
stevesliva

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?
Тім

@ Тим, що в кольорах двокольорових кольорів друкуються лише налаштування, вам потрібно їх оцінити, щоб їх можна було прочитати.
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

Вуаля :)


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;це префікс для x-term 256-кольорів переднього плану та 48;5;для x-term 256-кольорів фону. 256-кольорові кольори підтримуються не всіма терміналами.

Також дивіться -Що означають різні кольори у ls? - на AskUbuntu.



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

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


0

Ви можете змінити зелений тон у Putty, щоб зробити текст читабельним.

Відкрийте Шпаклівку і перейдіть до Вікна \ Кольори, виберіть "ANSI Green", встановіть його на більш темний зелений (R: 0 G: 70 B: 0).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.