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

141

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 em verde e impossível de ler. Por que é isso? Como torná-lo azul no preto, ou pelo menos algo claro em algo escuro?

Este é no Ubuntu 12.04, usando o bash no Terminal Gnome. No Konsole, o azul é um pouco mais escuro e possível de ler, embora possa ser muito melhor.

DarenW
fonte

Respostas:

162

Além de colorir os 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 pinta arquivos e diretórios com base em seus atributos:

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

Stephano Palazzo, no Ask Ubuntu , fez essa imagem muito instrutiva sobre as diferentes cores de atributos:

O que as diferentes cores significam no terminal

Como Terdon apontou, as configurações de cores podem ser modificadas via dircolors. É possível acessar uma lista das diferentes configurações de cores dircolors --print-database.

Cada linha de saída, como BLK 40;33;01, é da forma:

[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 do plano de fundo:

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

Os campos podem ser omitidos a partir da 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 em primeiro plano do XTerm com 256 cores tem o formato:

38;5;[FOREGROUND_COLOR]

Um código de cores de fundo XTerm com 256 cores está no 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:

16 e 256 códigos de cores no modo de cores

Thomas Nyman
fonte
5
Os códigos BACKGROUND_COLOR não são iguais aos FOREGROUND_COLOR; Os códigos de plano de fundo são 40-47
Ryan V. Bissell
38;5;inicia um código de cores xterm de 256 cores em primeiro plano. 48;5;inicia um código de cores de fundo de 256 cores xterm. O ciano na saída de meus dircolors 38;5;51 não é 36o resultado.
Steveliva
1
@stevesliva: Obrigado pelo seu comentário. Editei a resposta para indicar os códigos de cores do plano de fundo corretamente e descrevo os códigos de 256 cores do primeiro plano e do segundo plano.
Thomas Nyman
55

As cores de lspodem representar as permissões, o padrão para alguns sistemas é mostrar diretórios em que todos tenham 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(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 irritante 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 ~/.dircolors. 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 texto em preto sobre fundo vermelho (veja aqui 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, também pode criar um arquivo com uma única linha, redefinindo apenas o 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.

terdon
fonte
8
As cores padrão muitas vezes parecem indicar o autor original nós e nossos olhos odeia embora ...
kurtm
1
Obrigado. Por que às vezes você escreve ~ / .dirname, e às vezes ~ / dircolors, e às vezes ~ / .dircolors? eles deveriam ser os mesmos?
Tim
Obrigado. Por que em eval "$(dircolors ~/dircolors)";vez de maneira mais direta, como dircolors ~/dircolors?
Tim
@ Tim: como o dircolors apenas imprime as configurações, é necessário avaliar para que sejam lidas.
terdon
para que sejam lidos por quem?
Tim
11

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

Como torná-lo azul no preto, ...?

Um bom "esverdeado" para voltar aos direitos que você provavelmente deseja, é esta afirmação:

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

Entendeu melhor o que ele faz, se você entende o propósito de letras maiúsculas + X "execução especial", ou seja, consulte a Wikipedia

Só é realmente útil quando usado com '+' e, geralmente, em combinação com a opção -R para conceder ao grupo ou outro acesso a uma grande árvore de diretórios sem configurar a permissão de execução em arquivos normais (como arquivos de texto), o que normalmente aconteceria se você acabou de usar "chmod -R a + rx ...

Frank Nocke
fonte
8

Eu tinha a mesma pergunta, a resposta de Terdon é boa, mas acho que há uma confusão entre dirname e dircolors?

De qualquer forma, depois de algumas pesquisas, eu poderia mudar as cores, então estou compartilhando minha solução aqui. Pode ser útil para alguém algum dia!

Então, 3 etapas simples:

Primeiro, como disse Terdon, copie as cores padrão em um arquivo

dircolors -p > ~/.dircolors

Modifique este arquivo. Você pode encontrar alguns valores para cores no interior, mas eu achei mais aqui :)

E, finalmente, adicione a seguinte linha ao seu ~/.bashrcarquivo para que as cores sejam carregadas automaticamente quando você abrir um terminal:

eval 'dircolors ~/.dircolors' > /dev/null

Voilà :)

KevinG
fonte
1
porque ~/.zshrceu tive que ir com if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Desculpe quebra de linha são aweful
Eric D. Johnson
2

Para corrigir rapidamente o problema (deixe os arquivos graváveis ​​em amarelo no nobg):

LS_COLORS+=':ow=01;33'

Substitua 33por 34azul no nobg. Ainda mais simples, para torná-lo nofg no nobg:

LS_COLORS+=:ow=

Para tornar sua alteração permanente, anexe-a ao seu perfil.

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile

Para visualizar as regras relacionadas a não 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

Como afirmado em outra resposta (a de Thomas Nyman), 38;5; é o prefixo para 256 cores de termo x em primeiro plano e 48;5;para 256 cores de termo x em segundo plano. 256 cores não são suportadas por todos os terminais.

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

loxaxs
fonte
1

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

modhmod og-w AU_LI

ele remove bgcolor :)

Gorodeckij Dimitrij
fonte
0

Para corrigir isso, tente o parâmetro ow sobre o 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 a opção ow

~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

PYK
fonte
0

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

Abra o Putty e vá para Window \ Colors, selecione "ANSI Green", defina-o para um verde mais escuro (R: 0 G: 70 B: 0).

Erhan Alankus
fonte