Como altero a cor dos diretórios com ls no console?

120

No meu console, a cor dos diretórios é tão azul, que é difícil ler em um fundo escuro.

Como posso alterar as definições de cor para ls ?

    
por rubo77 15.05.2014 / 09:27

6 respostas

181

Para alterar as cores do diretório, abra o arquivo ~/.bashrc com o editor

nano ~/.bashrc

e faça a seguinte entrada no final do arquivo:

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

Algumas boas opções de cores (neste caso, 0;35 é roxo) são:

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

O primeiro número é o estilo (1 = negrito), seguido por um ponto-e-vírgula e, em seguida, o número real da cor, estilos possíveis (efeitos) são:

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)

Os possíveis cenários:

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

Todas as cores possíveis:

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

Eles podem até ser combinados, de modo que um parâmetro como:

di=1;4;31;42

na sua variável LS_COLORS faria os diretórios aparecerem em texto vermelho sublinhado em negrito com um fundo verde!

Para testar todas essas cores e estilos no seu terminal, você pode usar um dos seguintes:

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

Você também pode alterar outros tipos de arquivos ao usar o comando ls definindo cada tipo com:

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

Uma lista mais completa está disponível em Bigsoft - Configurando o LS_COLORS .

Você pode querer alterar a cor de segundo plano para ow ( OTHER_WRITABLE ) cujo padrão é texto azul não negrito e não legível em fundo verde para arquivos graváveis para todos os usuários.

Você pode usar, por exemplo, LS_COLORS="$LS_COLORS:ow=1;33" no final do seu arquivo .bashrc , para obter texto laranja em negrito e legível em fundo preto.

Depois de alterar seu arquivo .bashrc, para colocar as alterações em vigor, você terá que reiniciar seu shell ou executar source ~/.bashrc .

Fonte:

por rubo77 15.05.2014 / 09:35
23

Muito simples. Adicione estas três linhas a ~ / .bashrc

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

Se você quiser aplicar as alterações em uma sessão bash em execução, execute:

source ~/.bashrc
    
por Abdel Hegazi 11.08.2015 / 15:49
3

LS_COLORS

Esta é uma coleção de extensões: mapeamentos de cores, adequados para uso como sua variável de ambiente LS COLORS.

    
por rubo77 20.05.2014 / 00:35
2

Além da resposta de Hegazi, você pode controlar a cor do diretório e muitas outras cores usando o comando dircolors. Você pode criar um arquivo de configuração que esteja bem documentado.

Você pode criar um arquivo .dircolor no seu diretório pessoal da seguinte maneira:

dircolors -p > ~/.dircolors

Em seguida, no seu arquivo ~ / .bashrc, adicione as linhas

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

Isso criará uma variável $ LS_COLORS para o bash. O sinalizador -c será definido se for csh. Também sinaliza o comando ls para exibir em cores.

Edite o valor do atributo DIR como acima na cor do arquivo ~ / .dircolor para alterar a cor do diretório (ou qualquer um dos outros tipos de arquivo incluídos para outras cores). Você também pode alterar as cores de arquivos específicos ou definir os seus próprios.

    
por smilingfrog 07.03.2017 / 21:25
0

A minha abordagem é o comando ls com as opções mais usadas:

adicione as seguintes linhas em um arquivo chamado ~ / .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"

adicione as seguintes linhas em ~ / .bashrc

if [ -f ~/.alias ]; then
    . ~/.alias
fi
    
por Jonathan L 12.08.2017 / 07:33
0

A opção --color=auto não funciona para mim usando o iTerm2 no meu Mac. A opção -G funciona embora. Eu coloquei o seguinte alias em meu ~/.profile e agora os diretórios são coloridos e têm um / à direita em anexo:

alias ls='ls -F -G'
    
por John Slavick 06.11.2017 / 17:00