Вопрос или проблема
Что означают разные цвета в команде 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
Кроме того, файлы окрашиваются по атрибутам:
-
aac, au, flac, mid, midi, mka, mp3, mpc, ogg, ra, wav, axa, oga, spx, xspf.
-
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.
-
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. Просто бросьте числа в строку и наслаждайтесь простотой.
Большинство других ответов были отличными в объяснении вещей, но я хотел бы поделиться коротким скриптом, который я написал 😛
запустите это, чтобы напечатать все распознанные расширения файлов и цвет. цвет будет точно окрашен в соответствии с соответствием 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
.