Что означают разные цвета в лс?

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

Что означают эти цвета, и есть ли руководство по всем цветам?

5 ответов

Решение
  • Синий: каталог
  • Зеленый: исполняемый или распознанный файл данных
  • Небесно-голубой: Символическая ссылка
  • Желтый с черным фоном: устройство
  • Розовый: файл графического изображения
  • Красный: архивный файл
  • Красный с черным фоном: Неработающая ссылка

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

  • Чтобы выключить цвет, вы должны закомментировать следующие строки в .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'
    #    #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

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

альтернативный текст


  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, зоопарк, cpio, 7z, рз.

  3. JPG, JPEG, GIF, BMP, PBM, PGM, PPM, TGA, XBM, XPM, TIF, TIFF, PNG, SVG, SVGZ, Mng, PCX, MOV, MPG, MPEG, M2V, MKV, ОГМ, MP4, M4V, mp4v, vob, qt, nuv, wmv, asf, rm, rmvb, flc, avi, fli, flv, gl, dl, xcf, xwd, yuv, cgm, emf, axv, тревожность, 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;31mHello World\33[m"

Печать "Hello World" ярко-красным.

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

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


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

  • Неокрашенный (белый): текст файла или файла без имени (например, разрешения на вывод ls -l)
  • Жирный синий: каталог
  • Жирный голубой: символическая ссылка
  • Жирный зеленый: исполняемый файл
  • Жирный красный: архив
  • Жирный пурпурный: файл изображения, видео, графика и т. Д. Или дверь или розетка
  • Cyan: аудиофайл
  • Желтый с черным фоном: труба (AKA FIFO)
  • Жирный желтый с черным фоном: блочное устройство или символьное устройство
  • Жирный красный с черным фоном: сиротская ссылка или отсутствующий файл
  • Неокрашен красным фоном: файл set-user-ID
  • Черный с желтым фоном: файл set-group-ID
  • Черный с красным фоном: файл с возможностью
  • Белый с синим фоном: липкий каталог
  • Синий с зеленым фоном: другой каталог для записи
  • Черный с зеленым фоном: липкий и прочий для записи каталог

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

#!/bin/bash
# For LS_COLORS, print type and description in the relevant color.

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

    # Add descriptions for named types.
    case "$type" in
    bd) type+=" (block device)" ;;
    ca) type+=" (file with capability)" ;;
    cd) type+=" (character device)" ;;
    di) type+=" (directory)" ;;
    do) type+=" (door)" ;;
    ex) type+=" (executable file)" ;;
    fi) type+=" (regular file)" ;;
    ln) type+=" (symbolic link)" ;;
    mh) type+=" (multi-hardlink)" ;;
    mi) type+=" (missing file)" ;;
    no) type+=" (normal non-filename text)" ;;
    or) type+=" (orphan symlink)" ;;
    ow) type+=" (other-writable directory)" ;;
    pi) type+=" (named pipe, AKA FIFO)" ;;
    rs) type+=" (reset to no color)" ;;
    sg) type+=" (set-group-ID)" ;;
    so) type+=" (socket)" ;;
    st) type+=" (sticky directory)" ;;
    su) type+=" (set-user-ID)" ;;
    tw) type+=" (sticky and other-writable directory)" ;;
    esac

    # Separate each color with a newline.
    if [[ $color_prev ]] && [[ $color != $color_prev ]]; then
        echo
    fi

    printf "\e[%sm%s\e[m " "$color" "$type"

    # For next loop
    color_prev="$color"
done
echo

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

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

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

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

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

NORMAL 00 # глобальное значение по умолчанию, хотя все должно быть чем-то. ФАЙЛ 00 # обычный файл DIR 01;34 # директория LINK 01;36 # символическая ссылка. (Если вы установите значение 'target' вместо числового значения #, цвет будет таким же, как для указанного файла.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # драйвер устройства блока CHR 40;33;01 # драйвер устройства символа ORPHAN 40;31;01 # символическая ссылка на несуществующий файл или нестабильный файл SETUID 37;41 # файл, который установлен (u+s)
SETGID 30;43 # файл, который является setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # каталог, который является липким и доступным для записи (+t,o+w)
OTHER_WRITABLE 34;42 # каталог, который является другим записываемым (o+w) и не прилипает STICKY 37;44 # dir с установленным битом закрепления (+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=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Цветовые коды текста: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Коды цвета фона: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

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

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

Это установит *.ogg а также .mp3 в bold magenta, И если вы положите его в свой .bashrc файл станет постоянным.

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

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

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

Альтернатива: подобрать очень похожие 256 цветов в солнечном проекте Seebi.

Возьмите этот скрипт для проверки цвета и запустите его с помощью команды 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 вещи. Просто бросьте цифры в строку и наслаждайтесь простотой.

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

Другие вопросы по тегам