O que significam as diferentes cores em ls?

304

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

316
  • 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:

  • Paramaisinformações,escreva man dir_colors no terminal.
por karthick87 14.12.2010 / 09:18
87

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,meados,midi,mka,mp3,mpc,ogg,ra,wav,axa,oga,spx,xspf.

  2. tar,tgz,arj,taz,lzh,lzma,txz,zx,z,z,z,gz,lz,xz,bz2,bz,tbz,tbz2,tz,deb,rpm,jar,rar,ace,jardimzoológico,cpio,7z,rz.

  3. jpg,jpeg,gif,bmp,pbm,pgm,ppm,tga,xbm,xpm,tif,png,svg,svgz,mng,pcx,mov,mpg,mpeg,m2v,mkv,ogm,mp4,m4v,mp4v,vo,qt,nuv,wmv,asf,rm,rmvb,fl,avi,fli,fl,gl,dl,xcf,xwd,yuv,cgm,ff,axv,ans,ogv,ogx.

Todasessasinformaçõesestãocontidasnasaídadedircolors--print-database,massuaformataçãoébastanteilegível.

Vejaumaexplicaçãotécnicadoqueestáacontecendo:

Exemplo:

CHR40;33;01

Ocódigodecoresconsisteemtrêspartes:

  • Aprimeiraparteantesdoponto-e-vírgularepresentaoestilodotexto.

    • 00=nenhum,01=negrito,04=sublinhado,05=piscar,07=reverso,08=oculto.
  • Asegundaeaterceirapartesãoacoreacordefundo:

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

Cadapartepodeseromitida,partindodoprincípioàesquerda.ouseja,"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 alias para ls --color=auto ) passa por todos os nomes de arquivos e tenta primeiro corresponder tipos diferentes, como Executável, Pipe 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
16

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:

% bl0ck_qu0te%

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
15

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ídacomminhaconfiguração(dircolorspersonalizadosetemadeterminalpersonalizadodoSolarized):

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