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

screencap da saída de ls na máquina linux

Existem dois diretórios mostrados por “ls”. Normalmente, os diretórios em qualquer lugar são azuis em fundo preto. Mas o primeiro é azul sobre verde e impossível de ler. Por que é isso? Como deixar azul no preto, ou pelo menos algo claro em algo escuro?

Isso está no Ubuntu 12.04, usando bash no Terminal Gnome. No Konsole, o azul é ligeiramente mais escuro e possível de ler, embora pudesse ser muito melhor.

Resposta

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 outros, além do usuário e grupo proprietário, e tem o bit sticky definido (o+w, +t) .
  • O texto azul com fundo verde indica que um diretório pode ser gravado por outros, além do usuário e grupo proprietário, e não tem o bit sticky definido (o+w, -t).

Stephano Palazzo em Ask Ubuntu criou esta imagem muito instrutiva sobre as diferentes cores de atributos:

Wh nas diferentes cores significam no terminal

Como terdon apontou, as configurações de cores podem ser modificadas via dircolors . 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ção

  • TEXT_STYLE indica o estilo do texto:

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

    • 30 = preto
    • 31 = vermelho
    • 32 = verde
    • 33 = amarelo
    • 34 = azul,
    • 35 = magenta
    • 36 = ciano
    • 37 = branco
  • BACKGROUND_COLOR indica 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 da direita, então, por exemplo, .tar 01;31 significa negrito e vermelho.

XTerm e muitos outros emuladores de terminal modernos suportam 256 cores.

Um código de cor de fundo de 256 cores XTerm tem o formato:

38;5;[FOREGROUND_COLOR] 

Um código de cor de fundo de 256 cores XTerm tem o formato formulário:

48;5;[BACKGROUND_COLOR] 

onde FOREGROUND_COLOR e BACKGROUND_COLOR são um numere o intervalo de 0-255. Uma lista completa de códigos de cores para os modos de 16 e 256 cores é mostrada na captura de tela abaixo:

16 e 256 códigos de cores do modo de cor

Comentários

  • Os códigos BACKGROUND_COLOR não são iguais a FOREGROUND_COLOR; Os códigos de fundo são 40-47
  • 38;5; inicia um código de cor de primeiro plano de 256 cores do xterm. 48;5; inicia um código de cor de fundo xterm de 256 cores. Ciano em minha saída dircolors é 38;5;51 não 36 embora o resultado seja o mesmo.
  • @stevesliva: Obrigado pelo seu comentário. Eu ‘ editei a resposta para indicar os códigos de cores de fundo corretamente e descrevo os códigos de 256 cores de primeiro e segundo planos.
  • então o que significa verde apenas para o primeiro plano significar? como se eu tivesse aqui ?
  • @ChagaiFriedlander: Arquivos executáveis (consulte a linha inferior em a imagem ).

Resposta

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

insira a descrição da imagem aqui

Você pode alterar as cores editando sua $LS_COLORS variável usando dircolors (de 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 é reconhecidamente um tanto chata aqui, mas você pode alterar essa cor criando um arquivo com as cores que deseja e salvando-o como ~/.dircolors:

dircolors -p > ~/.dircolors 

Esse comando imprimirá os padrões em ~/.dircolors. Em seguida, você precisará 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 em um fundo vermelho (consulte aqui para 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 simplesmente criar um arquivo com uma única linha, redefinindo apenas aquele que você deseja alterar. De qualquer forma, depois de criar o arquivo, carregue-o com:

eval "$(dircolors ~/.dircolors)"; 

E aqui está ele em ação:

insira a descrição da imagem aqui

Para que isso aconteça automaticamente, adicione o eval comando acima para seu ~/.bashrc arquivo.

Comentários

  • As cores padrão freqüentemente parecem indicar que o autor original nos odeia e nossos olhos …
  • Obrigado. Por que você às vezes escreve ~ / .dirname, às vezes ~ / dircolors e às vezes ~ / .dircolors? devem ser iguais?
  • Th anks. Por que eval "$(dircolors ~/dircolors)"; em vez de uma forma mais direta, como dircolors ~/dircolors?
  • @Tim porque dircolors só imprime as configurações, você precisa avaliá-lo para que sejam lidos.
  • para que sejam lidos por quem?

Resposta

Embora todas as respostas técnicas sejam verdadeiras, eu consideraria um aviso um pouco informal, que você concedeu direitos um pouco generosamente ou copiando criss + cross … (na maioria das vezes todos nós fazemos , para fazer as coisas funcionarem inicialmente, hein?)

Como torná-lo azul em preto, …?

Um bom” deselegante “para voltar aos direitos que você provavelmente deseja é esta declaração:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/ 

Melhor compreendido o que faz, se você entender o propósito de maiúsculas + X „executar especial“, ou seja, consulte a Wikipedia

Só é realmente útil quando usado com “+” e geralmente em combinação com a opção -R para dar ao grupo ou outro acesso a uma grande árvore de diretório sem definir permissão de execução em arquivos normais (como arquivos de texto), o que normalmente aconteceria se você apenas usasse “chmod -R a + rx …

Resposta

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 as cores internas 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, finalmente, adicione a seguinte linha ao seu arquivo ~/.bashrc 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 

Resposta

Para corrigir rapidamente o problema, (tornar outros arquivos graváveis amarelos no nobg):

LS_COLORS+=":ow=01;33" 

Substitua 33 por 34 por azul no nobg. Ainda mais simples, para torná-lo nofg on 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 explore as ls cores em 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. } 

Em seguida,

LS_COLORS="$C:ow=38;5;250;48;5;025";t 

Conforme afirmado em outra resposta (a de Thomas Nyman), 38;5; é o prefixo para primeiro plano x-term 256 cores e 48;5; para 256 cores de fundo x-term. No entanto, 256 cores não são suportadas por todos os terminais.

Veja também -O que as cores diferentes significam em ls? – no AskUbuntu .

Comentários

  • Descobri que colocava LS_COLORS+=':ow=01;33' em meu ~/.zshrc ajudou a desabilitar a cor de fundo para diretórios em um git-repo.Isso está em uma máquina Windows 10 com uma distribuição Pengwin-WSL. Agora todos os diretórios dentro do git-repo são legíveis.

Resposta

Bem, isso significa que esta pasta tem permissões se você executa isto:

сhmod og-w AU_LI

ele removerá bgcolor 🙂

Resposta

Para corrigir isso, experimente ow parâmetro para LS_COLORS

Por exemplo:

~LS_COLORS="fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33" ~ls -l 

insira a descrição da imagem aqui

Agora você adiciona o ow (OTHER_WRITABLE) opção

~export LS_COLORS="fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0" ~ls -l 

insira a descrição da imagem aqui Bamm !!

Comentários

Resposta

Você pode alterar o tom de verde no Putty para tornar o texto legível.

Abra o Putty e vá para a janela \ Colors, selecione “ANSI Green”, defina para um verde mais escuro (R: 0 G: 70 B: 0).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *