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

166

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 cores ls?

rubo77
fonte

Respostas:

250

Para alterar as cores do diretório, abra seu ~/.bashrcarquivo com seu 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 (nesse 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 de um ponto e vírgula e, em seguida, o número real da cor, os possíveis estilos (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 antecedentes:

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, para que um parâmetro como:

di=1;4;31;42

na sua variável LS_COLORS, os diretórios apareceriam em negrito sublinhado em vermelho com um fundo verde!

Para testar todas essas cores e estilos em 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 no Bigsoft - Configurando LS_COLORS .

Em algumas distribuições, convém alterar a cor do plano de fundo para ow"( OTHER_WRITABLE) cujo padrão é ilegível", por exemplo, para texto em azul não negrito em fundo verde.

Você pode usar, por exemplo, LS_COLORS="$LS_COLORS:di=1;33"no final do seu .bashrcarquivo, para obter um bom texto em negrito legível em laranja sobre fundo preto.

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

Nota: Você pode combinar mais comandos com dois pontos , por exemplo

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

Fonte:

rubo77
fonte
3
Isso funciona bem, obrigado. Pessoalmente, achei melhor definir o LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSque mostra os diretórios em negrito branco sobre fundo azul.
Isapir
2
Isso não parece funcionar para mim. Parece que existe outro arquivo de configuração em algum lugar que sobrescreve .bashrc- algumas cores funcionam, outras parecem diferentes. As pastas são verdes, por exemplo, em vez de azuis, mas os arquivos parecem corretamente. O que poderia ser?
Nearoo 9/07
1
verifique se você está usando o bash ou sh e também verifique o arquivo .profile no diretório inicial. e global/etc/bash.bashrc
rubo77
5
Você provavelmente deseja modificar outras diretivas graváveis ​​e adesivas. Tente algo mais parecidoLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.
2
que funcionou para ls, mas como altero a cor do diretório em que estou, antes do # no prompt do cmd?
Gaia
31

Muito simples. Adicione essas três linhas ao ~ / .bashrc

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

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

source ~/.bashrc
Abdel Hegazi
fonte
4
Esta é a única coisa que funcionou para mim.
Solalito 29/01
Funcionou para mim, mas preciso executar source ~/.bashrcsempre que efetuar login. Existe uma maneira de corrigir isso?
Miguel
@ Miguel: o que você ganha quando digita echo $SHELLno prompt do cmd? Aposto que NÃO é /bin/bash. Você pode encontrar o seu ativo .profileou .logine adicionar source $HOME/.bashrcno final. Boa sorte.
shellter 19/03
4

LS_COLORS

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

rubo77
fonte
1
interessante, mas não posso fazer isso funcionar em ksh.
Herman Toothrot 17/08/16
4

Além da resposta de Hegazi, você pode realmente 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 diretório inicial 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 para csh. Ele 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 outro tipo de arquivo incluído para outras cores). Você também pode alterar as cores de arquivos específicos ou definir seus próprios.

sorrindo
fonte
2

A --color=autoopção não funciona para mim usando o iTerm2 no meu Mac. A -Gopção funciona embora. Coloquei o seguinte alias no meu ~/.profilee agora os diretórios são coloridos e têm um final /acrescentado:

alias ls='ls -F -G'
John Slavick
fonte
É porque é utils BSD e não coreutils :)
Meeh 03/10
0

A é a minha abordagem para 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
Jonathan L
fonte
4
você só precisa adicionar --color=autoao lsapelido - os outros aliases com herdem a configuração
Stuart Cardall