Как изменить цвет для каталогов с ls в консоли?

166

На моей консоли цвет каталогов такой синий, что его трудно прочитать на темном фоне.

Как я могу изменить определения цвета для ls?

rubo77
источник

Ответы:

250

Чтобы изменить цвета каталога, откройте ~/.bashrcфайл в редакторе.

nano ~/.bashrc

и сделайте следующую запись в конце файла:

LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS

Некоторые хорошие варианты цвета (в данном случае 0;35это фиолетовый):

Blue = 34
Green = 32
Light Green = 1;32
Cyan = 36
Red = 31
Purple = 35
Brown = 33
Yellow = 1;33
Bold White = 1;37
Light Grey = 0;37
Black = 30
Dark Grey= 1;30

Первое число - это стиль (1 = полужирный), затем точка с запятой, а затем фактическое число цвета, возможные стили (эффекты):

0   = default colour
1   = bold
4   = underlined
5   = flashing text (disabled on some terminals)
7   = reverse field (exchange foreground and background color)
8   = concealed (invisible)

Возможные фоны:

40  = black background
41  = red background
42  = green background
43  = orange background
44  = blue background
45  = purple background
46  = cyan background
47  = grey background
100 = dark grey background
101 = light red background
102 = light green background
103 = yellow background
104 = light blue background
105 = light purple background
106 = turquoise background
107 = white background

Все возможные цвета:

31  = red
32  = green
33  = orange
34  = blue
35  = purple
36  = cyan
37  = grey
90  = dark grey
91  = light red
92  = light green
93  = yellow
94  = light blue
95  = light purple
96  = turquoise
97  = white

Их даже можно объединить, чтобы такой параметр, как:

di=1;4;31;42

в вашей переменной LS_COLORS каталоги будут выделены жирным подчеркнутым красным текстом с зеленым фоном!

Чтобы проверить все эти цвета и стили в вашем терминале, вы можете использовать один из:

for i in 00{2..8} {0{3,4,9},10}{0..7}
do echo -e "$i \e[0;${i}mSubdermatoglyphic text\e[00m  \e[1;${i}mSubdermatoglyphic text\e[00m"
done

for i in 00{2..8} {0{3,4,9},10}{0..7}
do for j in 0 1
   do echo -e "$j;$i \e[$j;${i}mSubdermatoglyphic text\e[00m"
   done
done

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

bd = (BLOCK, BLK)   Block device (buffered) special file
cd = (CHAR, CHR)    Character device (unbuffered) special file
di = (DIR)  Directory
do = (DOOR) [Door][1]
ex = (EXEC) Executable file (ie. has 'x' set in permissions)
fi = (FILE) Normal file
ln = (SYMLINK, LINK, LNK)   Symbolic link. If you set this to ‘target’ instead of a numerical value, the color is as for the file pointed to.
mi = (MISSING)  Non-existent file pointed to by a symbolic link (visible when you type ls -l)
no = (NORMAL, NORM) Normal (non-filename) text. Global default, although everything should be something
or = (ORPHAN)   Symbolic link pointing to an orphaned non-existent file
ow = (OTHER_WRITABLE)   Directory that is other-writable (o+w) and not sticky
pi = (FIFO, PIPE)   Named pipe (fifo file)
sg = (SETGID)   File that is setgid (g+s)
so = (SOCK) Socket file
st = (STICKY)   Directory with the sticky bit set (+t) and not other-writable
su = (SETUID)   File that is setuid (u+s)
tw = (STICKY_OTHER_WRITABLE)    Directory that is sticky and other-writable (+t,o+w)
*.extension =   Every file using this extension e.g. *.rpm = files with the ending .rpm

Более полный список доступен в Bigsoft - Настройка LS_COLORS .

В некоторых дистрибутивах вам также может потребоваться изменить цвет фона для ow«( OTHER_WRITABLE), который по умолчанию не читается», например, на не выделенный жирным синим текст на зеленом фоне.

Вы можете использовать, например, LS_COLORS="$LS_COLORS:di=1;33"в конце вашего .bashrcфайла, чтобы получить хороший читаемый жирный оранжевый текст на черном фоне.

После того, как вы измените свой файл .bashrc, чтобы изменения вступили в силу, вам придется перезапустить вашу оболочку или запустить source ~/.bashrc.

Примечание. Можно добавить несколько команд , например, через двоеточие.

LS_COLORS=$LS_COLORS:'di=1;33:ln=36' ; export LS_COLORS; ls

Источник:

rubo77
источник
3
Это работает хорошо, спасибо. Я лично нашел, что лучше установить, LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSкоторый показывает каталоги жирным белым цветом на синем фоне.
Исапир
2
Это не похоже на работу для меня. Похоже, что где-то есть другой конфигурационный файл, который перезаписывает .bashrc- некоторые цвета работают, другие выглядят по-другому. Папки, например, зеленые, а не синие, но файлы выглядят правильно. Что бы это могло быть?
Nearoo
1
проверьте, используете ли вы bash или sh, а также проверьте файл .profile в вашем домашнем каталоге. и глобальный/etc/bash.bashrc
rubo77
5
Вы, вероятно, хотите изменить другие записываемые и липкие другие записываемые каталоги. Попробуйте что-нибудь более похожееLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Чарльз Л.
2
это сработало для ls, но как мне изменить цвет dir, в котором я нахожусь, до # в приглашении cmd?
Гайя
31

Очень простой. Добавьте эти три строки в ~ / .bashrc

$ vi ~/.bashrc
export LS_OPTIONS='--color=auto'
eval "$(dircolors -b)"
alias ls='ls $LS_OPTIONS'

Если вы хотите применить изменения в запущенном сеансе bash, запустите:

source ~/.bashrc
Абдель Хегази
источник
4
Это единственное, что сработало для меня.
solalito
Это сработало для меня, но мне нужно запускать source ~/.bashrcкаждый раз, когда я вхожу. Есть ли способ это исправить?
Мигель
@Miguel: что вы получаете, когда вы печатаете из командной echo $SHELLстроки? Бьюсь об заклад, это не так /bin/bash. Вы можете найти свой активный .profileили .loginи добавить source $HOME/.bashrcв конце. Удачи.
Оболочка
4

LS_COLORS

Это коллекция расширений: цветовые сопоставления, подходящие для использования в качестве переменной среды LS COLORS.

rubo77
источник
1
интересно, но я не могу сделать эту работу в кш.
Герман Зубной рот
4

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

Вы можете создать файл .dircolor в вашем домашнем каталоге следующим образом:

dircolors -p > ~/.dircolors

Затем в вашем файле ~ / .bashrc добавьте строки

eval "`dircolors -b ~/.dircolors`"
alias ls='ls --color=auto'

Это создаст переменную $ LS_COLORS для bash. Флаг -c будет установлен, если для csh. Он также помечает команду ls для отображения в цвете.

Отредактируйте значение атрибута DIR, как указано выше, в цвете файла ~ / .dircolor, чтобы изменить цвет каталога (или любого другого включенного типа файла для других цветов). Вы также можете изменить цвета определенных файлов или определить свои собственные.

smilingfrog
источник
2

--color=autoОпция не работает для меня , используя iTerm2 на моем Mac. -GВариант работает , хотя. Я поместил следующий псевдоним в мои, ~/.profileи теперь каталоги окрашены и имеют /добавленный конец:

alias ls='ls -F -G'
Джон Славик
источник
Это потому, что это
утилиты
0

Это мой подход к команде ls с часто используемыми параметрами:

добавьте следующие строки в файл с именем ~ / .alias

alias ll='ls -lhF --color=auto'
alias llt='ls -lht --color=auto'
alias lla='ls -alF --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias ls="ls --color=auto"

добавьте следующие строки в ~ / .bashrc

if [ -f ~/.alias ]; then
    . ~/.alias
fi
Джонатан Л
источник
4
вам нужно только добавить --color=autoк lsпсевдониму - другие псевдонимы с наследованием настройки
Стюарт Кардалл