¿Qué significan los diferentes colores en ls?

364

¿Qué significan los diferentes colores en el lscomando de Ubuntu ? Por ejemplo, cuando escribo el lscomando en una de mis carpetas, obtengo uno de los archivos en 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?

Rafid
fuente

Respuestas:

391
  • Azul : Directorio
  • Verde : archivo de datos ejecutable o reconocido
  • Sky Blue : archivo de enlace simbólico
  • Amarillo con fondo negro : dispositivo
  • Rosa : archivo de imagen gráfica
  • Rojo : archivo de archivo
  • Rojo con fondo negro : enlace roto

Para tu información:

  • Para desactivar el color, debe comentar las siguientes líneas .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 desea ver sus propios significados de color bash, copie / 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:
    texto alternativo

Nota:

karthick87
fuente
28
Ese evalscript que muestra la representación del color de salida para cada tipo es brillante ... ¡gracias!
Russ
2
Fuente pura;)
Homunculus Reticulli
55
Una versión más legible de ese evalscript está aquí: github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh
Gautam
3
El rojo también es un enlace simbólico muerto.
Thomas Ward
1
¿Qué pasa con los archivos en texto blanco normal?
S ..
98

Puede averiguar qué colores lsusa mirando la $LS_COLORSvariable:

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

Además, los archivos están coloreados por atributos:

texto alternativo


  1. aac, au, flac, mid, 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, 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, ogm, mp4, m4v, mp4v, vob, qt, nuv, wmv, asf, rm, rmvb, flc, avi, fli, flv, gl, dl, xcf, xwd, yuv, cgm, emf, axv, ans, ogv, ogx.


Toda esta información está contenida en la salida 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 = parpadeo, 07 = reverso, 08 = oculto.
  • La segunda y 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.

Cada parte puede omitirse, suponiendo que comience 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 la instrucción con \33[y terminando con un m. 33, o 1B en hexadecimal, es el signo ASCII "ESCAPE" (un carácter especial en el conjunto de caracteres ASCII). Ejemplo:

"\33[1;31mHello World\33[m"

Imprime "Hello World" en rojo brillante.

El comando lscon el argumento --color=auto(en Ubuntu, lses un alias para ls --color=auto) revisa todos los nombres de archivos 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.

Stefano Palazzo
fuente
¡Gracias! Estaba mirando una pregunta de visualización de topología de Git y me preguntaba por qué se imprimían algunos de los personajes.
pdp
27

Si escribe dircolors( echo $LS_COLORStambién funciona) desde la línea de comandos, obtendrá una lista de códigos y colores para muchos tipos de archivos en 1 línea. dircolors --print-databaseles muestra 1 línea a la vez. Aquí hay una lista corta (intenté poner 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 # predeterminado global, aunque todo debería ser algo.
ARCHIVO 00 # archivo normal
DIR 01; directorio 34 #
ENLACE 01; 36 # enlace simbólico. (Si configura esto como 'objetivo' en lugar de un
 # valor numérico, el color es como para el archivo señalado).
FIFO 40; tubo 33 #
SOCK 01; toma de 35 #
PUERTA 01; puerta 35 #
BLK 40; 33; 01 # controlador de dispositivo de bloque
CHR 40; 33; 01 # controlador de dispositivo de caracteres
ORPHAN 40; 31; 01 # enlace simbólico a archivo inexistente, o archivo no estadizable
SETUID 37; 41 # archivo que es setuid (u + s)
SETGID 30; 43 # archivo que es setgid (g + s)
STICKY_OTHER_WRITABLE 30; 42 # dir que es pegajoso y de otro tipo (+ t, o + w)
OTHER_WRITABLE 34; 42 # dir que es de otro tipo (o + w) y no pegajoso
STICKY 37; 44 # dir con el conjunto de bits fijos (+ t) y no de otro tipo
# archivos o comprimidos (rojo brillante)
.tar 01; 31
.tgz 01; 31
# formatos de imagen
.jpg 01; 35
.jpeg 01; 35
.gif 01; 35
.bmp 01; 35
# formatos de audio
.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 del 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 configurar un color para un archivo:

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

Esto establecerá *.oggy .mp3para bold magenta. Y si lo coloca en su .bashrcarchivo, se convertirá en permanente.

Rinzwind
fuente
2
Oye, tal vez alguien más viene con una mejor respuesta. Por cierto, me tienes más de 15k con este
voto a favor
rock on! Usted se consiguió allí ... Gracias otra vez sin embargo, hice un / "cadena" para buscar hacia arriba en algunos de los colores que tenía dudas sobre
user784637
Esta (excelente) respuesta se fusionó , en caso de que se pregunte sobre las fechas. :-)
Stefano Palazzo
@Rinzwind, así que para establecer un color para el pdfarchivo, ¿el proceso es usar export? ¿Es posible simplemente agregar una extensión en la LS_COLORS variable predeterminada ?
Sigur
23

Esto amplía la respuesta de Karthick87 .


Con la configuración predeterminada

  • Sin color (blanco) : texto de archivo o sin nombre de archivo (por ejemplo, permisos en la salida de ls -l)
  • Azul negrita : directorio
  • Cian en negrita : enlace simbólico
  • Verde negrita : archivo ejecutable
  • Rojo negrita : archivo de almacenamiento
  • Negrita magenta : archivo de imagen, video, gráfico, etc. o puerta o zócalo
  • Cian : archivo de audio
  • Amarillo con fondo negro : tubo (también conocido como FIFO)
  • Amarillo negrita con fondo negro : dispositivo de bloque o dispositivo de caracteres
  • Rojo negrita con fondo negro : enlace simbólico huérfano o archivo perdido
  • Incoloro 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 fijo
  • Azul con fondo verde : directorio de otro tipo de escritura
  • Negro con fondo verde : directorio adhesivo y de otro tipo de escritura

Guión 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:

captura de pantalla de gnome-terminal

Salida con mi configuración (colores de dir personalizados y tema de terminal Solarized personalizado):

captura de pantalla de gnome-terminal

Obtuve las descripciones de dircolors -py man dir_colors, y llené los vacíos con mi propia investigación.

Los colores y las descripciones son los mismos de 14.04 a 17.10.

wjandrea
fuente
¿Cómo sabías que rssignifica RESET, mhsignifica MULTIHARDLINK, casignifica , CAPABILITYetc.?
Fredrick Gauss
@FredrickGauss Como escribí en la respuesta, obtuve descripciones de la ejecución dircolors -p.
wjandrea
dircolors -pno dice rs es RESET 0 # restablece el color "normal" .
Fredrick Gauss
@FredrickGauss No explícitamente, pero "RESET" es el único que puede abreviarse como "rs", y el color (0) coincide.
wjandrea
18

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

Escriba dircolors -p |lesspara 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 para volcar la salida de dircolors en .dircolor para que pueda comenzar con ese comando. dircolors -p > ~/.dircolors

Alternativa: elija un dircolors de 256 colores muy similar del proyecto solarizado de seebi .

Tome este script más colorido y ejecútelo con el comando colortest -wpara que pueda ver todos los colores a la vez. Elige un color. Me gusta la naranja # 208. Quiero que ese sea el color del texto, así que usando esta información en códigos de color extendidos, puedo aplicar eso.

Entonces tienes un color, y ahora qué. Primero tenemos que crear la cadena.

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

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

A continuación, seleccione agregar ;38;5;a ese código de atributo para indicar el color de su texto para obtener 00; 38; 5; y luego agrega tu color. Elegí 208 para obtener 00;38;5;208.

Si también desea ponerle un fondo, elija otro color (digamos 56) con la secuencia de comandos más colorida y agregue ;48;5;para el fondo y 56 para que el color obtenga 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í eso es DIR) a la cadena que determinamos arriba de "00; 38; 5; 208".

Esto no se aplicará de inmediato, deberá cargar la configuración. Use dircolors ~/.dircolorspara obtener el código para establecer su variable LS_COLORS. 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 necesitas el especial; 38; 5 o; 48; 5 cosas. Simplemente arroje los números a la cadena y disfrute de la simplicidad.

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

flickerfly
fuente
compruebe si 256 colores funcionarán solo en terminales compatibles con xterm . Entonces, 256 colores no funcionan para mí con Konsole, pero funcionan con xterm y rxvt-unicode .
DK Bose
1
Konsole hace lo suyo. Visite draculatheme.com/konsole o techoverflow.net/2013/11/08/installing-konsole-solarized-theme para obtener un esquema de color agradable.
flickerfly