Як змінити колір каталогів з ls в консолі?


165

На моїй консолі колір для каталогів такий синій, що важко читати на темному тлі.

Як я можу змінити визначення кольорів ls?

Відповіді:


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

Джерело:


3
Це добре працює, дякую. Я особисто вважав, що краще встановити, LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSякий показує каталоги жирним білим на блакитному тлі.
isapir

2
Це, здається, не працює для мене. Схоже, десь перезаписується інший конфігураційний файл .bashrc- деякі кольори працюють, інші виглядають інакше. Папки зелені, наприклад, замість синього, але файли виглядають правильно. Що це могло бути?
Неару

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із запиту cmd? Б'юсь об заклад, що НЕ /bin/bash. Ви можете знайти свого активного .profileабо .loginдодати source $HOME/.bashrcв кінці. Удачі.
обстріл

4

LS_COLORS

Це колекція розширень: кольорові відображення, придатні для використання в якості змінної середовища LS COLORS.


1
цікаво, але я не можу зробити цю роботу в ksh.
Герман Зубний

3

На додаток до відповіді Хегазі, ви можете фактично керувати кольором каталогу та багатьма іншими кольорами за допомогою команди dircolors. Ви можете створити файл конфігурації, який добре зафіксований.

Ви можете створити .dircolor файл у своєму домашньому каталозі таким чином:

dircolors -p > ~/.dircolors

Потім у свій файл ~ / .bashrc додайте рядки

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

Це створить змінну $ LS_COLORS для bash. Прапор -c буде встановлено, якщо для csh. Він також позначає команду ls для відображення у кольорі.

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


2

Ця --color=autoопція не працює для мене за допомогою iTerm2 на моєму Mac. Цей -Gваріант працює. Я розміщую такі псевдоніми у своїх, ~/.profileа зараз каталоги кольорові та додають /остаточний:

alias ls='ls -F -G'

Це тому, що це утиліти BSD, а не coreutils :)
Meeh

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псевдонім - інших псевдонімів успадковують налаштування
Стюарт Cardall
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.