¿Qué significan los diferentes colores en ls?

297

¿Qué significan los diferentes colores en el comando ls de Ubuntu? Por ejemplo, cuando escribo el comando ls en una de mis carpetas, obtengo uno de los archivos en color verde claro, el otro (que es una carpeta) en azul con resaltado verde.

¿Qué significan esos colores, y hay algún manual sobre todos los colores?

    
pregunta Rafid 14.12.2010 - 09:15

5 respuestas

304
  • Azul : directorio
  • Verde : archivo de datos ejecutable o reconocido
  • Azul cielo : archivo de enlace simbólico
  • Amarillo con fondo negro : dispositivo
  • Rosa : archivo de imagen gráfica
  • Rojo : archivo de almacenamiento
  • Rojo con fondo negro : enlace roto

Para su información:

  • Para desactivar el color, debe comentar las siguientes líneas en .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
    
  • Además, si quiere ver sus propios significados de color bash, copie y pegue los siguientes códigos en su 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       
    } 
    

    Salida:

Nota:

  • Para obtener más información, escriba man dir_colors en la terminal.
respondido por el karthick87 14.12.2010 - 09:18
85

Puede averiguar qué colores usa ls mirando la variable $LS_COLORS :

  • Turquesa: archivos de audio 1
  • Rojo brillante: archivos comprimidos 2
  • Púrpura: imágenes y videos 3

Además, los archivos se colorean por atributos:

  1. aac, au, flac, medio, midi, mka, mp3, mpc, ogg, ra, wav, axa, oga, spx, xspf.

  2. tar, tgz, arj, taz, lzh, lzma, tlz, txz, zip, z, Z, dz, gz, lz, xz, bz2, bz, tbz, tbz2, tz, deb, rpm, jar, rar, ace, zoo, cpio, 7z, rz.

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

Toda esta información está contenida en el resultado de dircolors --print-database , pero su formato es bastante ilegible.

Aquí hay una explicación técnica de lo que está sucediendo:

Ejemplo:

CHR 40;33;01

El código de color consta de tres partes:

  • La primera parte antes del punto y coma representa el estilo de texto.

    • 00 = ninguno, 01 = negrita, 04 = guión bajo, 05 = parpadear, 07 = invertir, 08 = ocultar.
  • La segunda y la tercera parte son el color y el color de fondo:

    • 30 = negro, 31 = rojo, 32 = verde, 33 = amarillo, 34 = azul, 35 = magenta, 36 = cian, 37 = blanco.

Se puede omitir cada parte, asumiendo que empieza por la izquierda. es decir, "01" significa negrita, "01; 31" significa negrita y rojo. Y obtendría su terminal para imprimir en color escapando de las instrucciones con [ y finalizándolo con un m . 33, o 1B en hexadecimal, es el signo ASCII "ESCAPE" (un carácter especial en el juego de caracteres ASCII). Ejemplo:

"[1;31mHello World[m"

Imprime "Hello World" en rojo brillante.

El comando ls con el argumento --color=auto (en Ubuntu, ls es un alias para ls --color=auto ) pasa por todos los nombres de archivo e intenta primero hacer coincidir diferentes tipos, como Ejecutable, Pipe, etc. . Luego intenta hacer coincidir expresiones regulares como * .wav e imprime el nombre de archivo resultante, incluido en estas instrucciones de cambio de color para bash.

    
respondido por el Stefano Palazzo 14.12.2010 - 09:57
27

Si escribe dircolors ( echo $LS_COLORS también funciona) desde el comando línea obtendrá una lista de códigos y colores para muchos tipos de archivos en 1 línea. dircolors --print-database les muestra 1 línea a la vez. Aquí hay una lista corta (traté de incluir las más importantes). En la parte inferior hay una explicación sobre lo que representan los diferentes códigos al final de cada línea:

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 color de texto: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Códigos de color de fondo: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Si quieres jugar con esto aquí hay un ejemplo sobre cómo establecer un color para un archivo:

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

Esto establecerá *.ogg y .mp3 a bold magenta . Y si lo pones en tu archivo .bashrc , se convertirá en permanente.

    
respondido por el Rinzwind 14.09.2011 - 10:25
15

Ninguna de las respuestas aquí incluye las 256 opciones de color en las últimas versiones de Ubuntu. Tengo un color deficiente (algunos colores me dan problemas uno cerca del otro), por lo que el directorio azul predeterminado en negro es realmente difícil de leer. Lo que sigue es mi investigación para cambiar eso.

Escriba dircolors -p |less para ver su código de color actual.

El .bashrc predeterminado ya debería estar configurado no solo para aprovechar el código de color del sistema, sino también uno en ~ / .dircolors, por lo que debe volcar la salida de dircolors a .dircolor para que pueda comenzar con ese comando. dircolors -p > ~/.dircolors

Alternativa: elige una fuente de 256 colores muy similar de seebi's proyecto solarizado .

Coge este script colortest y ejecútalo con el comando colortest -w para que puedas ver todos los colores a la vez. Elige un color. Me gusta el naranja # 208. Quiero que sea el color del texto, así que al usar esta información en códigos de color extendidos, puedo aplicar eso.

Así que tienes un color, ahora qué. Primero tenemos que crear la cadena.

El primer número será un código de atributo, muy probablemente 00, pero si quiere que parpadee, vaya con 05:

  

Elija un código de atributo: 00 = ninguno 01 = negrita 04 = guión bajo 05 = parpadear 07 = invertir 08 = oculto

La siguiente selección agrega ;38;5; a ese código de atributo para indicar el color del texto para obtener 00; 38; 5; y luego agrega tu color. Escogí 208, así que obtengo 00;38;5;208 .

Si también quieres ponerle un fondo, elige otro color (digamos 56) con la secuencia de comandos más brillante y agrega ;48;5; para el fondo y 56 para el color para obtener una cadena total de 00;38;5;208;48;5;56 .

Entonces, ahora que lo tienes, ¿qué haces con él?

vim ~/.dircolors y encuentre la sección que desea cambiar (para mí que es DIR) a la cadena que determinamos anteriormente "00; 38; 5; 208".

Esto no se aplicará de inmediato, tendrás que cargar la configuración. Use dircolors ~/.dircolors para obtener el código para establecer su variable LS_COLORS. Simplemente puede pegar eso en su sesión de terminal o puede cerrar su terminal y volver a abrirlo. También puede canalizar eso en un archivo y ejecutarlo como un script de shell.

Puede hacer este mismo procedimiento con 16 colores. No necesita las cosas especiales; 38; 5 o; 48; 5. Simplemente agregue los números a la cadena y disfrute de la simplicidad.

Gracias a Dan y seebi para sus notas y código sobre esto.

    
respondido por el flickerfly 22.03.2013 - 21:45
13

Esto se amplía a la respuesta de Karthick87 .

Con la configuración predeterminada

  • Sin color (blanco) : archivo o texto sin nombre de archivo (por ejemplo, permisos en la salida de ls -l )
  • Azul intenso : directorio
  • Cian en negrita : enlace simbólico
  • Verde en negrita : archivo ejecutable
  • Rojo negrita : archivo de almacenamiento
  • Bold magenta : archivo de imagen, video, gráfico, etc. o portal o conector
  • Cyan : archivo de audio
  • Amarillo con fondo negro : tubería (también conocida como FIFO)
  • Amarillo en negrita con fondo negro : dispositivo de dispositivo de bloque o
  • Rojo negrita con fondo negro : archivo simbólico huérfano o
  • Sin color con fondo rojo : archivo set-user-ID
  • Negro con fondo amarillo : archivo set-group-ID
  • Negro con fondo rojo : archivo con capacidad
  • Blanco con fondo azul : directorio adhesivo
  • Azul con fondo verde : otro directorio que se puede escribir
  • Negro con fondo verde : directorio adhesivo y otro que se puede escribir

Script para mostrar colores

#!/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

Salida con configuración predeterminada:

Salida con mi configuración (dircolors personalizados y tema de terminal Solarizado personalizado):

Obtuve las descripciones de dircolors -p y man dir_colors , y rellené los huecos con mi propia investigación.

Los colores y las descripciones son las mismas desde 14.04 hasta 17.10.

    
respondido por el wjandrea 17.02.2017 - 22:05

Lea otras preguntas en las etiquetas