Что обозначают разные цвета в ls?

Вопрос или проблема

Что означают разные цвета в команде ls в Ubuntu? Например, когда я ввожу команду ls в одной из моих папок, один из файлов отображается светло-зеленым, а другой (который является папкой) — синим с зеленым выделением.

Что означают эти цвета и есть ли какой-либо справочник по всем цветам?

  • Синий: Директория
  • Зеленый: Исполняемый файл или распознанный файл данных
  • Циан (голубой): Символическая ссылка
  • Желтый с черным фоном: Устройство
  • Магента (розовый): Файл графического изображения
  • Красный: Архивный файл
  • Красный с черным фоном: Плохая ссылка

Для вашего сведения:

  • Чтобы отключить цвет, вам нужно закомментировать следующие строки в .bashrc.

    # включить поддержку цветов в ls и также добавить удобные псевдонимы
    #if [ -x /usr/bin/dircolors ]; then
    #    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    #    alias ls="ls --color=auto"
    #    #alias dir="dir --color=auto"
    #    #alias vdir="vdir --color=auto"
    #
    #    alias grep='grep --color=auto'
    #    alias fgrep='fgrep --color=auto'
    #    alias egrep='egrep --color=auto'
    #fi
    
  • Также, если вы хотите увидеть значения цветов для вашего собственного bash, скопируйте/вставьте следующие коды в ваш терминал.

    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
    {      
      IFS=:     
      for i in $LS_COLORS     
      do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
      done       
    } 
    

Вывод:
вывод терминала

Примечание:

  • Для получения дополнительной информации введите man dir_colors в терминале.

Вы можете узнать, какие цвета использует ls, взглянув на переменную $LS_COLORS:

  • Бирюзовый: аудиофайлы1
  • Ярко-красный: архивы и сжатые файлы2
  • Фиолетовый: изображения и видео3

Кроме того, файлы окрашиваются по атрибутам:

alt text


  1. aac, au, flac, mid, midi, mka, mp3, mpc, ogg, ra, wav, axa, oga, spx, xspf.

  2. tar, tgz, arj, taz, lzh, lzma, tlz, txz, zip, z, Z, dz, gz, lz, xz, bz2, bz, tbz, tbz2, tz, deb, rpm, jar, rar, ace, zoo, cpio, 7z, rz.

  3. jpg, jpeg, gif, bmp, pbm, pgm, ppm, tga, xbm, xpm, tif, tiff, png, svg, svgz, mng, pcx, mov, mpg, mpeg, m2v, mkv, ogm, mp4, m4v, mp4v, vob, qt, nuv, wmv, asf, rm, rmvb, flc, avi, fli, flv, gl, dl, xcf, xwd, yuv, cgm, emf, axv, anx, ogv, ogx.


Вся эта информация содержится в выводе dircolors --print-database, но ее форматирование довольно неудобочитаемо.

Вот техническое объяснение того, что происходит:

Пример:

CHR 40;33;01

Код цвета состоит из трех частей:

  • Первая часть перед точкой с запятой представляет стиль текста.

    • 00=нет, 01=жирный, 04=подчеркнутый, 05=мигание, 07=обратный, 08=скрытый.
  • Вторая и третья части – это цвет и цвет фона:

    • 30=черный, 31=красный, 32=зеленый, 33=желтый, 34=синий, 35=маджента, 36=циан, 37=белый.

Каждая часть может быть опущена, начиная с левой стороны. То есть “01” означает жирный, “01;31” означает жирный и красный. И вы можете заставить свой терминал печатать цветным, экранируя инструкцию с помощью \33[ и завершая ее m. 33 или 1B в шестнадцатеричном представлении — это ASCII знак “ESCAPE” (специальный символ в ASCII символах). Пример:

"\33[1;31mПривет, мир\33[m"

Выводит “Привет, мир” ярко-красным цветом.

Команда ls с аргументом --color=auto (в Ubuntu ls является псевдонимом для ls --color=auto) проходит через все имена файлов и сначала пытается сопоставить разные типы, такие как исполняемый, трубопровод и так далее. Затем она пытается сопоставить регулярные выражения, такие как *.wav, и выводит полученное имя файла, заключенное в эти меняющие цвет команды для bash.

[Это расширяет ответ Karthick87.]

Полный список с настройками по умолчанию

  • Без цвета (белый):
    • файл
    • некодированный текст (например, разрешения в выводе ls -l)
    • многожесткий файл
  • Жирный синий: директория
  • Жирный циан: символическая ссылка
  • Жирный зеленый: исполняемый файл
  • Жирный красный: архивный файл
  • Жирный магента:
    • файл изображения, видео, графика и т.д.
    • дверь
    • сокет
  • Циан: аудиофайл
  • Желтый с черным фоном: трубопровод (известен как FIFO)
  • Жирный желтый с черным фоном:
    • блочное устройство
    • символическое устройство
  • Жирный красный с черным фоном:
    • сирота символической ссылки
    • пропавший файл
  • Без цвета с красным фоном: файл с установленным UID
  • Черный с желтым фоном: файл с установленным GID
  • Черный с красным фоном: файл с возможностями
  • Белый с синим фоном: жесткая директория
  • Синий с зеленым фоном: директория с разрешением на запись другим пользователям
  • Черный с зеленым фоном: жесткая и директория с разрешениями на запись другим пользователям

Обратите внимание, что жирный красный выглядит оранжевым, черный выглядит темно-серым, циан выглядит синим/зелёным, а жирный магента выглядит фиолетовым/розовым/лавандовым.

Скрипт для отображения цветов

#!/bin/bash
# Для каждого элемента в LS_COLORS вывести тип и описание, если доступно,
# в соответствующем цвете.
# Если два соседних цвета одинаковые, оставьте их на одной строке.

declare -A descriptions=(
    [bd]="блочное устройство"
    [ca]="файл с возможностями"
    [cd]="символическое устройство"
    [di]="директория"
    [do]="дверь"
    [ex]="исполняемый файл"
    [fi]="обычный файл"
    [ln]="символическая ссылка"
    [mh]="многожесткий"
    [mi]="пропавший файл"
    [no]="нормальный текст без имени файла"
    [or]="сирота символической ссылки"
    [ow]="директория с разрешением на запись другим пользователям"
    [pi]="именованный трубопровод, известный как FIFO"
    [rs]="сбросить до без цвета"
    [sg]="установленный GID"
    [so]="сокет"
    [st]="жесткая директория"
    [su]="установленный UID"
    [tw]="жесткая и директория с разрешением на запись другим пользователям"
)

IFS=:
for ls_color in $LS_COLORS; do
    color="${ls_color#*=}"
    type="${ls_color%=*}"

    # Добавить описание для именованных типов.
    desc="${descriptions[$type]}"

    # Разделить каждый цвет новой строкой.
    if [[ $color_prev ]] && [[ $color != "$color_prev" ]]; then
        echo
    fi

    printf "\e[%sm%s%s\e[m " "$color" "$type" "${desc:+ ($desc)}"

    # Для следующего цикла
    color_prev="$color"
done
echo

Вывод с настройками по умолчанию:

скриншот терминала - по умолчанию

Вывод с моей настройкой (пользовательские dircolors и пользовательская тема терминала Solarized):

скриншот терминала - пользовательский

Я получил описания из dircolors -p и man dir_colors, и заполнил пробелы своими собственными исследованиями.

Цвета и описания одинаковы с версии 14.04 по 17.10.

Если вы введете dircolors (echo $LS_COLORS также работает) из командной строки, вы получите список кодов и цветов для множества типов файлов в одной строке. dircolors --print-database показывает их по одной строке. Вот короткий список (я попытался включить в него самые важные). Внизу есть объяснение того, что означают различные коды в конце каждой строки:

NORMAL 00 # глобальный параметр по умолчанию, хотя все должно быть чем-то.
FILE 00 # обычный файл
DIR 01;34 # директория
LINK 01;36 # символическая ссылка. (Если вы установите это как 'target' вместо
 # численного значения, цвет будет как у файла, на который указывает.)
FIFO 40;33 # трубопровод
SOCK 01;35 # сокет
DOOR 01;35 # дверь
BLK 40;33;01 # блочный драйвер устройства
CHR 40;33;01 # символьный драйвер устройства
ORPHAN 40;31;01 # символическая ссылка на несуществующий файл или файл, который нельзя считать
SETUID 37;41 # файл, для которого установлен uid (u+s)
SETGID 30;43 # файл, для которого установлен gid (g+s)
STICKY_OTHER_WRITABLE 30;42 # директория, которая жесткая и разрешена для записи другим (+t,o+w)
OTHER_WRITABLE 34;42 # директория, которая разрешена для записи другим (o+w) и не жесткая
STICKY 37;44 # директория с установленным жестким битом (+t) и не для записи другим
# архивы или сжатие (ярко-красный)
.tar 01;31
.tgz 01;31
# форматы изображений
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
# аудиоформаты
.aac 00;36
.flac 00;36
.ogg 00;36
  • Коды атрибутов: 00=нет 01=жирный 04=подчеркнутый 05=мигание 07=обратный 08=скрытый
  • Коды цветов текста: 30=черный 31=красный 32=зеленый 33=желтый 34=синий 35=маджента 36=циан 37=белый
  • Коды цветов фона: 40=черный 41=красный 42=зеленый 43=желтый 44=синий 45=маджента 46=циан 47=белый

Если вы хотите поэкспериментировать с этим, вот пример, как установить цвет для файла:

export LS_COLORS=$LS_COLORS:"*.ogg=01;35":"*.mp3=01;35"  

Это установит *.ogg и .mp3 на жирный маджента. И если вы поместите это в ваш файл .bashrc, это станет постоянным.

Ни один из ответов здесь не включает параметры 256 цветов в последних версиях Ubuntu. У меня есть проблемы с восприятием цветов (некоторые цвета затрудняют различение рядом друг с другом), поэтому стандартная синяя директория на черном фоне для меня действительно тяжела для прочтения. Следующее — это мои исследования, чтобы это изменить.

Введите dircolors -p |less, чтобы увидеть ваш текущий цветовой код.

Стандартный .bashrc уже должен быть настроен не только для того, чтобы использовать системный цветовой код, но также один в ~/.dircolors, поэтому сделайте вывод dircolors в .dircolors, чтобы вы могли начать с этого с помощью этой команды:
dircolors -p > ~/.dircolors

Альтернатива: возьмите очень похожий 256 цвет dircolors из проекта seebi.

Скачайте этот скрипт colortest и выполните его с командой colortest -w, чтобы вы могли увидеть все цвета одновременно. Выберите цвет. Мне нравится оранжевый #208. Я хочу, чтобы это был цвет текста, поэтому, используя эту информацию о расширенных цветовых кодах, я могу применить это.

Итак, у вас есть цвет, что дальше. Сначала нам нужно создать строку.

Первое число будет кодом атрибута, скорее всего 00, но если вы хотите, чтобы оно мигало, выберите 05:

Выберите код атрибута: 00=нет 01=жирный 04=подчеркнутый 05=мигание 07=обратный 08=скрытый

Затем прикрепите ;38;5; к этому коду атрибута, чтобы указать цвет вашего текста, чтобы получить 00;38;5; и затем добавьте свой цвет. Я выбрал 208, поэтому у меня получается 00;38;5;208.

Если вы хотите также установить фон, выберите другой цвет (допустим, 56) с помощью скрипта colortest и добавьте ;48;5; для фона и 56 для цвета, чтобы получить общую строку 00;38;5;208;48;5;56.

Теперь у вас это есть, что с этим делать?

vim ~/.dircolors и найдите раздел, который вы хотите изменить (для меня это DIR) на строку, которую мы определили выше “00;38;5;208”.

Это не применится сразу, вам нужно будет загрузить конфигурацию. Используйте dircolors ~/.dircolors, чтобы получить код для установки вашей переменной LS_COLORS. Вы можете просто вставить это в вашу сессию терминала или закрыть терминал и открыть его снова. Вы также можете перенаправить это в файл и запустить его как оболочку.

Вы можете проделать ту же процедуру с 16 цветами. Вам не нужны специальные ;38;5 или ;48;5. Просто бросьте числа в строку и наслаждайтесь простотой.

Спасибо Дэну и seebi за их заметки и код по этому поводу.

Большинство других ответов были отличными в объяснении вещей, но я хотел бы поделиться коротким скриптом, который я написал 😛

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

dircolors | tr ':' '\n' | awk -F= '{print "\033[" $2 "m" $1 "\033[0m"}'

Ответ или решение

Команда ls в операционной системе Ubuntu позволяет просматривать содержимое каталогов, а также использовать различные цветовые схемы для облегчения визуального восприятия типов файлов. Разнообразные цвета в выводе ls имеют специфические значения, что позволяет пользователю быстро идентифицировать, какие файлы и каталоги находятся в заданной директории.

Значение цветов при использовании ls

Вот общее руководство по цветам, которые могут быть использованы в выводе команды ls:

  • Синий: Каталог (директория).
  • Зеленый: Исполняемый файл (файл, который можно выполнить).
  • Циан (голубой): Символическая ссылка (symlink).
  • Желтый с черным фоном: Устройство (device).
  • Магента (пурпурный): Графический файл (изображение или видео).
  • Красный: Архивный файл (например, .zip, .tar).
  • Красный с черным фоном: Неисправимая ссылка (broken link).

Кроме того, существуют и другие цвета, которые указывают на различные типы файлов, например:

  • Туркуазный: Аудиофайлы (например, .mp3).
  • Ярко-красный: Сжатые файлы.
  • Пурпурный: Изображения и видео.

В выводе также можно отметить, что файлы могут окрашиваться в зависимости от их атрибутов, например, файл с установленным bit set-user-ID будет отображаться с красным фоном.

Установка цветовой схемы

Для управления цветами, используемыми в команде ls, существует переменная окружения $LS_COLORS. Команда dircolors может использоваться для управления этими цветами. Вы можете вывести текущую схему с помощью команд:

dircolors -p
echo $LS_COLORS

Если вы хотите изменить цвета, вы можете создать файл конфигурации .dircolors и настроить его в соответствии с вашими предпочтениями. После этого используйте команду:

dircolors ~/.dircolors

Чтобы перезапустить изменения, необходимо либо перезапустить терминал, либо выполнить команду в текущем сеансе.

Дополнительная информация

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

# enable color support of ls and also add handy aliases
#if [ -x /usr/bin/dircolors ]; then
#    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
#    alias ls="ls --color=auto"
#fi

Заключение

Понимание цветового кода, используемого в команде ls, помогает эффективно работать с файлами и каталогами в Linux-системах. Изучение значений цветовой схемы может значительно упростить управление файлами и повысить продуктивность пользователей.

Для дальнейшего изучения можно обратиться к справочному руководству по команде, написав в терминале:

man dir_colors

Этим вы получите исчерпывающую информацию о настройках цветового отображения и возможностях, которые предоставляет команда ls.

Оцените материал
Добавить комментарий

Капча загружается...