O que significam as diferentes cores em ls?

280

O que significam as cores diferentes no comando ls do Ubuntu? Por exemplo, quando eu digito o comando ls em uma das minhas pastas, obtenho um dos arquivos em verde claro, o outro (que é uma pasta) em azul com realce em verde.

O que essas cores significam e há algum manual sobre todas as cores?

    
por Rafid 14.12.2010 / 09:15

5 respostas

288
  • Azul : Diretório
  • Verde : Arquivo de dados executável ou reconhecido
  • Sky Blue : arquivo de link simbólico
  • Amarelo com fundo preto : dispositivo
  • Rosa : arquivo de imagem gráfica
  • Vermelho : arquivo morto
  • Vermelho com fundo preto : link quebrado

Para sua informação:

  • Para desativar a cor, você deve comentar as seguintes linhas em .bashrc .

    # enable color support of ls and also add handy aliases
    #if [ -x /usr/bin/dircolors ]; then
    #    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    #    alias ls='ls --color=auto'
    #    #alias dir='dir --color=auto'
    #    #alias vdir='vdir --color=auto'
    #
    #    alias grep='grep --color=auto'
    #    alias fgrep='fgrep --color=auto'
    #    alias egrep='egrep --color=auto'
    #fi
    
  • Além disso, se você quiser ver seus próprios significados de cor bash, copie / cole os seguintes códigos no seu terminal.

      
    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
    {      
      IFS=:     
      for i in $LS_COLORS     
      do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
      done       
    } 
    

    Saída:

Nota:

  • Para mais informações, escreva man dir_colors no terminal.
por karthick87 14.12.2010 / 09:18
81

Você pode descobrir quais cores ls usa observando a variável $LS_COLORS :

  • Turquesa: arquivos de áudio 1
  • Vermelho brilhante: arquivos compactados e arquivos 2
  • Roxo: imagens e vídeos 3

Além disso, os arquivos são coloridos por atributos:

  1. aac, au, flac, mid, midi, MKA, mp3, mpc, ogg, ra, wav, axa, oga, SPX, xspf.

  2. alcatrão, tgz, arj, Taz, lzh, lzma, TLZ, TXZ, fecho de correr, Z, Z, dz, gz, lz, XZ, bz2, BZ, TBZ, tbz2, tz, deb, rpm, jar, rar, ace, jardim zoológico, cpio, 7z, rz.

  3. jpg, jpeg, gif, bmp, PBM, PGM, ppm, TGA, XBM, xpm, tif, tiff, png, svg, SVGZ, MNG, PCX, mov, mpg, mpeg, m2v, MKV, AGO, MP4, M4V, mp4v, VOB, qt, NUV, WMV, ASF, RM, RMVB, FLC, avi, fli, FLV, gl, dl, xcf, xwd, YUV, cgm, emf, AXV, anx, ogv, ogx.

Todas essas informações estão contidas na saída de dircolors --print-database , mas sua formatação é bastante ilegível.

Veja uma explicação técnica do que está acontecendo:

Exemplo:

CHR 40;33;01

O código de cores consiste em três partes:

  • A primeira parte antes do ponto-e-vírgula representa o estilo do texto.

    • 00 = nenhum, 01 = negrito, 04 = sublinhado, 05 = piscar, 07 = reverso, 08 = oculto.
  • A segunda e a terceira parte são a cor e a cor de fundo:

    • 30 = preto, 31 = vermelho, 32 = verde, 33 = amarelo, 34 = azul, 35 = magenta, 36 = ciano, 37 = branco.

Cada parte pode ser omitida, partindo do princípio à esquerda. ou seja, "01" significa negrito, "01; 31" significa negrito e vermelho. E você pegaria seu terminal para imprimir em cores, escapando da instrução com [ e finalizando com m . 33, ou 1B em hexadecimal, é o sinal ASCII "ESCAPE" (um caractere especial no conjunto de caracteres ASCII). Exemplo:

"[1;31mHello World[m"

Imprime "Hello World" em vermelho brilhante.

O comando ls com o argumento --color=auto (no Ubuntu, ls é um apelido para ls --color=auto ) passa por todos os nomes de arquivo e tenta primeiro a combinar diferentes tipos, como executáveis, Cano e assim por diante . Em seguida, ele tenta corresponder expressões regulares como * .wav e imprime o nome do arquivo resultante, contido nestas instruções de alteração de cor do bash.

    
por Stefano Palazzo 14.12.2010 / 09:57
27

Se você digitar dircolors ( echo $LS_COLORS também funciona) do comando linha você terá uma lista de códigos e cores para muitos tipos de arquivos em uma linha. dircolors --print-database mostra uma linha de cada vez. Aqui está uma pequena lista (tentei colocar as mais importantes). Na parte inferior, há uma explicação sobre o que os códigos diferentes no final de cada linha representam:

NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
# audio formats
.aac 00;36
.flac 00;36
.ogg 00;36
  • Códigos de atributo: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Códigos de cor do texto: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Códigos de cores de fundo: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Se você quiser brincar com isso, aqui está um exemplo de como definir uma cor para um arquivo:

export LS_COLORS=$LS_COLORS:"*.ogg=01;35":"*.mp3=01;35"  

Isso definirá *.ogg e .mp3 para bold magenta . E se você colocar no seu arquivo .bashrc , ele se tornará permanente.

    
por Rinzwind 14.09.2011 / 10:25
14

Nenhuma das respostas aqui inclui as 256 opções de cores nas versões mais recentes do Ubuntu. Sou deficiente de cor (algumas cores me causam problemas próximas umas das outras), então o diretório azul padrão no preto é muito difícil para eu ler. O que segue é a minha pesquisa para mudar isso.

Digite dircolors -p |less para ver seu código de cor atual.

O padrão .bashrc já deve estar configurado não apenas para aproveitar o código de cores do sistema, mas também um em ~ / .dircolors, então copie a saída dircolors para .dircolor para que você possa começar com isso usando este comando. dircolors -p > ~/.dircolors

Alternativa: pegue um dircolors de 256 cores muito semelhantes em seebi's projeto solarizado .

Pegue este script mais colorido e execute-o com o comando colortest -w para que você possa ver todas as cores de uma só vez. Escolha uma cor. Eu gosto da laranja # 208. Eu quero que seja a cor do texto, então usando essa informação em códigos de cores estendidos, posso aplicar isso.

Então você tem uma cor, e agora. Primeiro temos que criar a string.

O primeiro número será um código de atributo, provavelmente 00, mas se você quiser piscar, vá para 05:

  

Escolha um código de atributo: 00 = nenhum 01 = negrito 04 = sublinhado 05 = piscar 07 = reverso 08 = oculto

Em seguida, selecione append ;38;5; nesse código de atributo para indicar sua cor de texto para obter 00; 38; 5; e depois acrescente sua cor. Eu escolhi 208 então eu recebo 00;38;5;208 .

Se você quiser colocar um segundo plano sobre ele, escolha outra cor (digamos 56) com o script mais recente e o acréscimo ;48;5; para o plano de fundo e 56 para a cor para obter uma string total de 00;38;5;208;48;5;56 .

Então agora você tem, o que você faz com isso?

vim ~/.dircolors e encontre a seção que você deseja alterar (para mim que é DIR) na string que determinamos acima "00; 38; 5; 208".

Isso não se aplicará imediatamente, você precisará carregar a configuração. Use dircolors ~/.dircolors para o código get para definir sua variável LS_COLORS. Você pode simplesmente colá-lo em sua sessão de terminal ou fechar seu terminal e reabri-lo. Você também pode canalizar isso em um arquivo e executá-lo como um script de shell.

Você pode fazer o mesmo procedimento com 16 cores. Você não precisa do especial: 38; 5 ou; 48; 5 coisas. Basta jogar os números na sequência e aproveitar a simplicidade.

Graças a Dan e seebi para suas notas e código sobre isso.

    
por flickerfly 22.03.2013 / 21:45
10

Isso se expande na resposta de Karthick87 .

Com a configuração padrão

  • Sem cor (branco) : arquivo ou texto sem nome de arquivo (por exemplo, permissões na saída de ls -l )
  • Negrito azul : diretório
  • Ciano em negrito : link simbólico
  • Negrito verde : arquivo executável
  • Bold red : arquivo morto
  • Bold magenta : arquivo de imagem, vídeo, gráfico, etc. ou porta ou soquete
  • Cyan : arquivo de áudio
  • Amarelo com fundo preto : cano (AKA FIFO)
  • Amarelo em negrito com fundo preto : dispositivo de bloco ou dispositivo de caractere
  • Vermelho em negrito com fundo preto : link simbólico órfão ou arquivo ausente
  • Sem cor com fundo vermelho : arquivo set-user-ID
  • Preto com fundo amarelo : arquivo set-group-ID
  • Preto com fundo vermelho : arquivo com capacidade
  • Branco com fundo azul : pasta adesiva
  • Azul com fundo verde : diretório de outros documentos graváveis
  • Preto com fundo verde : diretório pegajoso e outro gravável

Script para mostrar cores

#!/bin/bash
# For LS_COLORS, print type and description in the relevant color.

IFS=:
for ls_color in $LS_COLORS; do
    color="${ls_color#*=}"
    type="${ls_color%=*}"

    # Add descriptions for named types.
    case "$type" in
    bd) type+=" (block device)" ;;
    ca) type+=" (file with capability)" ;;
    cd) type+=" (character device)" ;;
    di) type+=" (directory)" ;;
    do) type+=" (door)" ;;
    ex) type+=" (executable file)" ;;
    fi) type+=" (regular file)" ;;
    ln) type+=" (symbolic link)" ;;
    mh) type+=" (multi-hardlink)" ;;
    mi) type+=" (missing file)" ;;
    no) type+=" (normal non-filename text)" ;;
    or) type+=" (orphan symlink)" ;;
    ow) type+=" (other-writable directory)" ;;
    pi) type+=" (named pipe, AKA FIFO)" ;;
    rs) type+=" (reset to no color)" ;;
    sg) type+=" (set-group-ID)" ;;
    so) type+=" (socket)" ;;
    st) type+=" (sticky directory)" ;;
    su) type+=" (set-user-ID)" ;;
    tw) type+=" (sticky and other-writable directory)" ;;
    esac

    # Separate each color with a newline.
    if [[ $color_prev ]] && [[ $color != $color_prev ]]; then
        echo
    fi

    printf "\e[%sm%s\e[m " "$color" "$type"

    # For next loop
    color_prev="$color"
done
echo

Saída com configuração padrão:

Saída com minha configuração (dircolors personalizados e tema de terminal personalizado do Solarized):

Eu recebi as descrições de dircolors -p e man dir_colors e preenchi as lacunas com minha própria pesquisa.

As cores e descrições são as mesmas de 14.04 a 17.10.

    
por wjandrea 17.02.2017 / 22:05