Existem dois diretórios mostrados por 'ls'. Normalmente, os diretórios em qualquer lugar são azuis sobre fundo preto. Mas o primeiro é azul sobre verde e impossível de ler. Por que é isso? Como fazer azul sobre preto, ou pelo menos algo claro sobre algo escuro?
Isso está no Ubuntu 12.04, usando o bash no Terminal Gnome. No Konsole, o azul é um pouco mais escuro e possível de ler, embora pudesse ser bem melhor.
Responder1
Além de colorir arquivos com base em seu tipo (turquesa para arquivos de áudio, vermelho brilhante para arquivos e arquivos compactados e roxo para imagens e vídeos), ls
também colore arquivos e diretórios com base em seus atributos:
- O texto preto com fundo verde indica que um diretório pode ser gravado por outras pessoas, além do usuário e do grupo proprietário, e tem o sticky bit definido (
o+w, +t
). - O texto azul com fundo verde indica que um diretório pode ser gravado por outras pessoas além do usuário e grupo proprietário, e nãonãotenha o sticky bit definido (
o+w, -t
).
Stéphano PalazzoàsPergunte ao Ubuntufez esta imagem muito instrutiva sobre as diferentes cores dos atributos:
Comoterdonapontado, as configurações de cores podem ser modificadas viadircolors
. Uma lista das diferentes configurações de cores pode ser acessada com dircolors --print-database
.
Cada linha de saída, como BLK 40;33;01
, tem o formato:
[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
TARGET
indica o alvo para a regra de coloraçãoTEXT_STYLE
indica o estilo do texto:00
= nenhum01
= negrito04
= sublinhado05
= piscar07
= reverso,08
= oculto
FOREGROUND_COLOR
indica a cor do primeiro plano:30
= preto31
= vermelho32
= verde33
= amarelo34
= azul,35
= magenta36
= ciano37
= branco
BACKGROUND_COLOR
indica as cores de fundo:40
= preto41
= vermelho42
= verde43
= amarelo44
= azul,45
= magenta46
= ciano47
= branco
Os campos podem ser omitidos começando pela direita, por exemplo, .tar 01;31
significa negrito e vermelho.
O XTerm e a maioria dos outros emuladores de terminal modernos suportam 256 cores.
Um código de cores de primeiro plano XTerm de 256 cores tem o formato:
38;5;[FOREGROUND_COLOR]
Um código de cor de fundo de 256 cores do XTerm tem o formato:
48;5;[BACKGROUND_COLOR]
onde ambos FOREGROUND_COLOR
e BACKGROUND_COLOR
é um número no intervalo de 0 a 255. Uma lista completa de códigos de cores para os modos de 16 e 256 cores é mostrada na captura de tela abaixo:
Responder2
As cores ls
podem representar as permissões; o padrão para alguns sistemas é mostrar diretórios onde todos têm permissões de gravação com um fundo verde:
Você pode alterar as cores editando sua $LS_COLORS
variável usando dircolors
(from man ls
):
Using color to distinguish file types is disabled both by default and
with --color=never. With --color=auto, ls emits color codes only when
standard output is connected to a terminal. The LS_COLORS environment
variable can change the settings. Use the dircolors command to set it.
A sintaxe é meio chata aqui, mas você pode alterar essa cor criando um arquivo com as cores desejadas e salvando-o como ~/.dircolors
:
dircolors -p > ~/.dircolors
Esse comando imprimirá os padrões em ~/.dircolors
. Você precisará então editar esse arquivo e alterar esta linha:
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
Por exemplo, para torná-lo um texto preto sobre um fundo vermelho (vejaaquipara obter uma lista de códigos de cores):
OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky
Você não precisa ter todos os padrões, você também pode apenas criar um arquivo com uma única linha, redefinindo apenas aquele que deseja alterar. De qualquer forma, depois de criar o arquivo, carregue-o com:
eval "$(dircolors ~/.dircolors)";
E aqui está em ação:
Para que isso aconteça automaticamente, adicione o eval
comando acima ao seu ~/.bashrc
arquivo.
Responder3
tldr; Como consertar isso?
Para corrigir o problema rapidamente:
LS_COLORS+=':ow=01;33'
- Faz com que outros arquivos graváveis apareçam em amarelo no nobg
- Edite seu perfil de shell (por exemplo
~/.bashrc
,~/.profile
, etc) para torná-lo permanente.
Mais detalhes:
Substitua 33
por 34
por blue
on nobg
. Ainda mais simples, para fazer nofg
isso nobg
:
LS_COLORS+=:ow=
Para tornar sua alteração permanente, anexe-a ao seu .profile:
echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile
Para visualizar as regras não relacionadas à extensão de LS_COLORS
:
echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
sed
coloca cada regra em uma linha e grep
remove as regras começando por*.'.
Para explorar as ls
cores do seu terminal, considere usar
C="$LS_COLORS"
function sc () {
echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
ls /mnt # Or the path to your example directory.
}
Então
LS_COLORS="$C:ow=38;5;250;48;5;025";t
Conforme declarado em outra resposta (a de Thomas Nyman), 38;5;
é o prefixo para o termo x de primeiro plano com 256 cores e 48;5;
para o termo x de fundo com 256 cores. Porém, 256 cores não são suportadas por todos os terminais.
Veja também-O que significam as diferentes cores em ls?-no AskUbuntu.
Responder4
Aqui estão as 3 etapas que usei para alterar as cores:
Primeiro, copie as cores padrão para um arquivo
dircolors -p > ~/.dircolors
Em seguida, modifique este arquivo. Você pode encontrar alguns valores para cores dentro, e aqui estão mais alguns:
Code Color
0 Default Colour
1 Bold
4 Underlined
5 Flashing Text
7 Reverse Field
31 Red
32 Green
33 Orange
34 Blue
35 Purple
36 Cyan
37 Grey
40 Black Background
41 Red Background
42 Green Background
43 Orange Background
44 Blue Background
45 Purple Background
46 Cyan Background
47 Grey Background
90 Dark Grey
91 Light Red
92 Light Green
93 Yellow
94 Light Blue
95 Light Purple
96 Turquoise
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
(fonte)
E por fim, adicione a seguinte linha ao seu ~/.bashrc
arquivo para que as cores sejam carregadas automaticamente quando você abrir um terminal:
eval 'dircolors ~/.dircolors' > /dev/null
Para ~/.zshrc
:
if [[ -f ~/.dircolors ]] ; then
eval $(dircolors -b ~/.dircolors)
elif [[ -f /etc/DIR_COLORS ]] ; then
eval $(dircolors -b /etc/DIR_COLORS)
fi