437 votos

¿Qué significan los diferentes colores en ls?

¿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 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?

481voto

Rob Gray Puntos 1556
  • Azul: Directorio
  • Verde: Archivo ejecutable o reconocido
  • Cian (Azul Cielo): Enlace simbólico
  • Amarillo con fondo negro: Dispositivo
  • Magenta (Rosa): Archivo de imagen gráfica
  • Rojo: Archivo de archivo
  • Rojo con fondo negro: Enlace roto

Para tu información:

  • Para desactivar el color, debes 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
  • También, si deseas ver tus propios significados de colores en bash, copia/pega los siguientes códigos en tu 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:
salida de terminal

Nota:

34 votos

Ese script eval que muestra la representación del color de salida para cada tipo es genial... ¡gracias!

5 votos

Pura hechicería ;)

8 votos

Una versión más legible de ese script eval está aquí: github.com/gkotian/gautam_linux/blob/master/scripts/colours.‌​sh

112voto

Rob Haupt Puntos 744

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

  • Turquesa: archivos de audio1
  • Rojo brillante: archivos de archivos y comprimidos2
  • Púrpura: imágenes y videos3

Además, los archivos se colorean por atributos:

alt text


  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, zoo, 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, anx, 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=subrayado, 05=parpadeo, 07=inverso, 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, asumiendo que comienza en la izquierda. es decir, "01" significa negrita, "01;31" significa negrita y rojo. Y puedes hacer que tu terminal imprima en color escapando la instrucción con \33[ y terminándola 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;31mHola Mundo\33[m"

Imprime "Hola Mundo" en rojo brillante.

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

0 votos

¡Gracias! Estaba viendo una pregunta de visualización de topología de Git en Stack Overflow y me preguntaba por qué se estaban imprimiendo algunos de los caracteres.

37voto

Burnaby Puntos 57

[Esto amplía la respuesta de Karthick87.]

Lista completa, con la configuración predeterminada

  • Sin color (blanco):
    • archivo
    • texto que no es un nombre de archivo (por ejemplo, permisos en la salida de ls -l)
    • archivo con múltiples enlaces físicos
  • Azul en negrita: directorio
  • Cian en negrita: enlace simbólico
  • Verde en negrita: archivo ejecutable
  • Rojo en negrita: archivo de archivo
  • Magenta en negrita:
    • archivo de imagen, video, gráfico, etc.
    • puerta
    • socket
  • Cian: archivo de audio
  • Amarillo con fondo negro: tubería (también conocido como FIFO)
  • Amarillo en negrita con fondo negro:
    • dispositivo de bloques
    • dispositivo de caracteres
  • Rojo en negrita con fondo negro:
    • enlace simbólico huérfano
    • archivo perdido
  • Sin color con fondo rojo: archivo de identificación de usuario establecida
  • Negro con fondo amarillo: archivo de identificación de grupo establecida
  • Negro con fondo rojo: archivo con capacidad
  • Blanco con fondo azul: directorio pegajoso
  • Azul con fondo verde: directorio con permisos de escritura para otros
  • Negro con fondo verde: directorio pegajoso y con permisos de escritura para otros

Tenga en cuenta que el rojo en negrita se ve naranja, el negro se ve gris oscuro, el cian se ve azul/verde y el magenta en negrita se ve púrpura/rosa/lavanda.

Script para mostrar colores

#!/bin/bash
# Para cada entrada en LS_COLORS, imprime el tipo y la descripción si está disponible
# en el color relevante.
# Si dos colores adyacentes son iguales, mantenlos en una línea.

declare -A descriptions=(
    [bd]="dispositivo de bloques"
    [ca]="archivo con capacidad"
    [cd]="dispositivo de caracteres"
    [di]="directorio"
    [do]="puerta"
    [ex]="archivo ejecutable"
    [fi]="archivo regular"
    [ln]="enlace simbólico"
    [mh]="archivo con múltiples enlaces físicos"
    [mi]="archivo perdido"
    [no]="texto normal que no es un nombre de archivo"
    [or]="enlace simbólico huérfano"
    [ow]="directorio de escritura para otros"
    [pi]="tubería con nombre, también conocida como FIFO"
    [rs]="restablecer sin color"
    [sg]="identificación de grupo establecida"
    [so]="socket"
    [st]="directorio pegajoso"
    [su]="identificación de usuario establecida"
    [tw]="directorio pegajoso y con permisos de escritura para otros"
)

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

    # Agregar descripción para tipos nombrados.
    desc="${descriptions[$type]}"

    # Separar cada color con una nueva línea.
    if [[ $color_prev ]] && [[ $color != "$color_prev" ]]; then
        echo
    fi

    printf "\e[%sm%s%s\e[m " "$color" "$type" "${desc:+ ($desc)}"

    # Para el próximo bucle
    color_prev="$color"
done
echo

Salida con la configuración predeterminada:

captura de pantalla del terminal de GNOME - predeterminado

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

captura de pantalla del terminal de GNOME - personalizado

Obtuve las descripciones de dircolors -p y man dir_colors, y completé las lagunas con mi propia investigación.

Los colores y descripciones son los mismos al menos desde 14.04 hasta 17.10.

0 votos

¿Cómo supiste que rs significa RESET, mh significa MULTIHARDLINK, ca significa CAPABILITY, etc.?

0 votos

@FredrickGauss Como escribí en la respuesta, obtuve las descripciones corriendo dircolors -p.

0 votos

dircolors -p no indica que rs es RESET 0 # reset to "normal" color.

28voto

Ayush Goyal Puntos 141

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

NORMAL 00 # valor predeterminado global, aunque todo debería ser algo.
FILE 00 # archivo normal
DIR 01;34 # directorio
LINK 01;36 # enlace simbólico. (Si estableces esto en 'target' en lugar de un
 # valor numérico, el color es como el del archivo al que apunta.)
FIFO 40;33 # tubería
SOCK 01;35 # socket
DOOR 01;35 # puerta
BLK 40;33;01 # controlador de dispositivos de bloque
CHR 40;33;01 # controlador de dispositivos de caracteres
ORPHAN 40;31;01 # enlace simbólico a un archivo inexistente, o archivo no estadístico
SETUID 37;41 # archivo con setuid (u+s)
SETGID 30;43 # archivo con setgid (g+s)
STICKY\_OTHER\_WRITABLE 30;42 # directorio con pegajoso y otro escritura-writable (+t,o+w)
OTHER\_WRITABLE 34;42 # directorio con otro escritura-writable (o+w) y no pegajoso
STICKY 37;44 # directorio con el bit pegajoso establecido (+t) y no otro-writable
# 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 atributos: 00=ninguno 01=negrita 04=subrayado 05=parpadeo 07=inverso 08=oculto
  • Códigos de color de texto: 30=negro 31=rojo 32=verde 33=amarillo 34=azul 35=magenta 36=cian 37=blanco
  • Códigos de color de fondo: 40=negro 41=rojo 42=verde 43=amarillo 44=azul 45=magenta 46=cian 47=blanco

Si quieres jugar un poco con esto, aquí tienes un ejemplo de cómo establecer un color para un archivo:

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

Esto establecerá *.ogg y .mp3 como negrita magenta. Y si lo colocas en tu archivo .bashrc se volverá permanente.

2 votos

Hola, tal vez alguien más llegue con una respuesta mejor. Por cierto, ¡me hiciste pasar de 15k con este voto arriba! ;)

0 votos

¡Sigue así! Llegaste allí por ti mismo... Gracias de nuevo sin embargo, hice una búsqueda de "string" para investigar algunos de los colores sobre los que no estaba seguro.

0 votos

Esta (excelente) respuesta fue combinada, en caso de que te estes preguntando sobre las fechas. :-)

18voto

cadrian Puntos 4102

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 dificultades cuando están cerca uno del otro), por lo que el directorio azul predeterminado sobre negro es realmente difícil para mí de leer. Lo siguiente es mi investigación para cambiar eso.

Escribe dircolors -p | less para ver tu 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 así que volcar la salida de dircolors a .dircolor para que puedas empezar con eso usando este comando. dircolors -p > ~/.dircolors

Alternativa: elige un dircolors de 256 colores muy similar del proyecto solarized de seebi.

Descarga 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 ese sea el color del texto así que usando esta información sobre códigos de colores extendidos, puedo aplicar eso.

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

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

Elige un código de atributo: 00=ninguno 01=bold 04=subrayado 05=parpadeo 07=inverso 08=oculto

A continuación elige añadir ;38;5; a ese código de atributo para indicar tu color de texto para obtener 00;38;5; y luego añadir tu color. Elegí 208 así que obtengo 00;38;5;208.

Si también quieres ponerle un fondo, elige otro color (digamos 56) con el script colortest y añade ;48;5; para el fondo y 56 para el color para obtener una cadena total de 00;38;5;208;48;5;56.

Así que ahora lo tienes, ¿qué haces con ello?

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

Esto no se aplicará inmediatamente, tendrás que cargar la configuración. Usa dircolors ~/.dircolors para obtener el código para establecer tu variable LS_COLORS. Puedes simplemente pegarlo en tu sesión de terminal o puedes cerrar tu terminal y volverla a abrir. También puedes redirigirlo a un archivo y ejecutarlo como un script de shell.

Puedes hacer este mismo procedimiento con 16 colores. No necesitas las cosas especiales de ;38;5 o ;48;5. Solo agrega los números a la cadena y disfruta de la simplicidad.

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

0 votos

Por favor, verifica si 256 colores solo funcionarán en terminales compatibles con xterm. Entonces, los 256 colores no funcionan para mí con Konsole pero funcionan con xterm y rxvt-unicode.

1 votos

Konsole hace lo suyo. Echa un vistazo a draculatheme.com/konsole o techoverflow.net/2013/11/08/installing-konsole-solarized-the‌​me para un esquema de colores agradable.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X