O que causa esse fundo verde na saída ls?

O que causa esse fundo verde na saída ls?

screencap da saída ls na máquina Linux

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), lstambé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:

O que significam as diferentes cores no terminal

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]
  • TARGETindica o alvo para a regra de coloração

  • TEXT_STYLEindica o estilo do texto:

    • 00= nenhum
    • 01= negrito
    • 04= sublinhado
    • 05= piscar
    • 07= reverso,
    • 08= oculto
  • FOREGROUND_COLORindica a cor do primeiro plano:

    • 30= preto
    • 31= vermelho
    • 32= verde
    • 33= amarelo
    • 34= azul,
    • 35= magenta
    • 36= ciano
    • 37= branco
  • BACKGROUND_COLORindica as cores de fundo:

    • 40= preto
    • 41= vermelho
    • 42= verde
    • 43= amarelo
    • 44= azul,
    • 45= magenta
    • 46= ciano
    • 47= branco

Os campos podem ser omitidos começando pela direita, por exemplo, .tar 01;31significa 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_COLORe 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:

Códigos de cores do modo de 16 e 256 cores

Responder2

As cores lspodem 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:

insira a descrição da imagem aqui

Você pode alterar as cores editando sua $LS_COLORSvariá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:

insira a descrição da imagem aqui

Para que isso aconteça automaticamente, adicione o evalcomando acima ao seu ~/.bashrcarquivo.

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 33por 34por blueon nobg. Ainda mais simples, para fazer nofgisso 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 '\*.'

sedcoloca cada regra em uma linha e grepremove as regras começando por*.'.


Para explorar as lscores 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 ~/.bashrcarquivo 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

informação relacionada