¿Qué significan los diferentes colores en ls?

¿Qué significan los diferentes colores del 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?

Solución
  • Azul: Directorio
  • Verde**: Archivo ejecutable o de datos reconocido
  • Azul celeste: Archivo de enlace simbólico
  • Amarillo con fondo negro: Dispositivo
  • Rosa: Archivo de imagen gráfica
  • Rojo: Fichero de archivo
  • Rojo con fondo negro: Enlace roto

Para su información:

  • Para desactivar el color, tienes que comentar las siguientes líneas en .bashrc.

      # habilitar el soporte de color de ls y también añadir los prácticos alias
      #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 quieres ver tus propios significados de color en bash, entonces copia/pega los siguientes códigos en tu terminal.

    lenguaje: bash -->
    
      eval $(echo "no:global por defecto;fi:archivo normal;di:directorio;ln:enlace simbólico;pi:tubería con nombre;so:socket;do:puerta;bd:dispositivo de bloque;cd:dispositivo de carácter;or:enlace simbólico huérfano;mi:archivo perdido;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:ejecutable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
      {
        IFS=:
        for i in $LS_COLORS
        hacer
          echo -e "|e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" | echo "$x" )|e[m"
        hecho
      }

Salida:

Nota:

Comentarios (8)

Puedes saber qué colores utiliza ls mirando la variable $LS_COLORS:

  • Turquesa: archivos de audio1
  • Rojo brillante: Archivos y ficheros comprimidos2
  • Morado: imágenes y vídeos3

Además, los archivos se colorean por atributos:


  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'sucede:

Ejemplo:

CHR 40;33;01

El código de colores consta de tres partes:

  • La primera parte antes del punto y coma representa el estilo del 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 se puede omitir, suponiendo que se empieza por la izquierda. es decir, "01" significa negrita, "01;31" significa negrita y rojo. Y conseguirías que tu terminal imprimiera en color escapando la instrucción con \33[ y terminándola con una 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 "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 coincidir con los diferentes tipos, como Executable, Pipe, etc. Luego intenta coincidir con expresiones regulares como *.wav e imprime el nombre de archivo resultante, encerrado en estas instrucciones de cambio de color para bash.

Comentarios (1)

Si escribe dircolors (echo $LS_COLORS tambié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-database` los muestra de una en una. Aquí hay una pequeña lista (he intentado poner 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 # global por defecto, aunque todo debería ser algo.
FILE 00 # archivo normal
DIR 01;34 # directorio
LINK 01;36 # enlace simbólico. (Si establece esto como 'objetivo' en lugar de un
 # valor numérico, el color es el del archivo apuntado).
FIFO 40;33 # tubería
SOCK 01;35 # socket
DOOR 01;35 # puerta
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 un archivo inexistente, o a un archivo no declarable
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 sticky y other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir que es other-writable (o+w) y no sticky
STICKY 37;44 # dir con el bit de sticky activado (+t) y no other-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 del texto: 30=negro 31=rojo 32=verde 33=amarillo 34=azul 35=magenta 36=ciano 37=blanco
  • Códigos de color del fondo: 40=negro 41=rojo 42=verde 43=amarillo 44=azul 45=magenta 46=ciano 47=blanco

Si quieres jugar 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 pondrá *.ogg y .mp3 en negrita magenta. Y si lo pones en tu archivo .bashrc será permanente.

Comentarios (4)