Dale color a tu terminal

Cambiar los colores de ls

En Ubuntu y otras distros cuando escribimos ls en la consola (el comando para listar el contenido de un directorio) en realidad se llama a ls --color debido a que en el .bashrc, el archivo de configuración de la shell por defecto, bash, existe un alias del primero al segundo. La opción –color de ls, como habréis supuesto, indica a ls que utilice colores para distinguir tipos de archivos.

Los colores que va a utilizar ls se definen por medio de la variable de entorno LS_COLORS. Por ejemplo (recortado en varias líneas para que quepa):

zootropo@Genua:~$ echo $LS_COLORS
no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:
cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:
*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:
*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:
*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:
*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:
*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:
*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:
*.mpc=01;35:*.ogg=01;35:*.wav=01;35:

Cada entrada se separa por dos puntos (:). El valor a la izquierda del igual (=) en cada entrada indica a qué clase de archivo se aplican los valores de la derecha del igual. Hay algunos tipos predefinidos:

  • no: texto normal (normal)
  • fi: archivo (file)
  • di: directorio (directory)
  • ln: enlace simbólico (link)
  • pi: tubería con nombre (pipe)
  • so: socket
  • do: door
  • bd: dispositivo de acceso por bloques (block device)
  • cd: dispositivo de acceso por caracteres (character device)
  • or: enlace simbólico huérfano (orphanned)
  • su: archivo con flag setuid (u+s, igual al propietario)
  • sg: archivo con flag setgid (g+s, igual al grupo)
  • tw: sticky, otro, escritura (+t,o+w)
  • ow: otro, escritura (o+w)
  • st: sticky (+t)
  • ex: archivo ejecutable

pero también se pueden indicar archivos que cumplan una determinada condición (*.mp3 se aplicaría a todos los archivos de extensión mp3; *README se aplicaría a todos los archivos cuyo nombre terminara con README, sin extensión).

A la derecha del igual podemos encontrarnos con uno o más valores, separados por punto y coma (;) que indican cómo representar esa clase de archivo (no todos los códigos tienen por qué funcionar en todas las terminales; las imágenes de los colores corresponden al esquema de colores Tango de gnome-terminal):

  • 0: color por defecto
  • 1: negrita
  • 4: subrayado
  • 5: parpadeante
  • 7: cursiva
  • 30: negro
  • 31: rojo
  • 32: verde
  • 33: amarillo/marrón
  • 34: azul
  • 35: púrpura
  • 36: cian
  • 37: blanco o gris

Colores terminal

  • 40: fondo negro
  • 41: fondo rojo
  • 42: fondo verde
  • 43: fondo amarillo
  • 44: fondo azul
  • 45: fondo púrpura
  • 46: fondo cian
  • 47: fondo blanco (o gris)

Colores terminal

  • 90: gris oscuro
  • 91: rojo claro
  • 92: verde claro
  • 93: amarillo
  • 94: azul claro
  • 95: púrpura claro
  • 96: turquesa
  • 100: fondo gris oscuro
  • 101: fondo rojo claro
  • 102: fondo verde claro
  • 103: fondo amarillo
  • 104: fondo azul claro
  • 105: fondo púrpura claro
  • 106: fondo turquesa

Ahora bastaría con añadir una línea del estilo

export LS_COLORS=”no=00:fi=00:di=01;34:……..”

a nuestro .bashrc para indicar los colores que queremos. O bien, en varias líneas, para que quede más claro:

LS_COLORS=’no=0′
LS_COLORS=$LS_COLORS:’fi=0′
LS_COLORS=$LS_COLORS:’di=1;34′
LS_COLORS=$LS_COLORS:’ln=1;36′
LS_COLORS=$LS_COLORS:’pi=40;33′
LS_COLORS=$LS_COLORS:’so=1;35′
LS_COLORS=$LS_COLORS:’do=1;35′
……
export LS_COLORS

.bashrc es un archivo oculto, como puede verse por el punto al principio del nombre, que se encuentra en el directorio de usuario: /home/miusuario.

Colorear el prompt

Si lo que quieres es cambiar el color del prompt, tendrás que modificar la variable PS1 en el .bashrc. Esto puede ser útil por ejemplo para poder localizar más rápidamente dónde comenzó la traza de un comando que escriba bastante texto en el terminal, o podríamos usar distintos colores en distintas máquinas para identificarlas.

En Ubuntu por defecto PS1 tiene un aspecto similar a esto:

${debian_chroot:+($debian_chroot)}\u@\h:\w\$

La secuencia de escape \u imprime el usuario actual, \h el nombre de la máquina en la que nos encontramos y \w el directorio actual; luego si estuviéramos conectados, por ejemplo, a mihost como miusuario, y nos encontráramos en el directorio /etc/ veríamos:

miusuario@mimaquina:/etc$

Lo único que tenemos que hacer para colorear el prompt (o parte de él) es usar los códigos que describimos en la sección anterior, pero en este caso los números tienen que escribirse entre \[\033[ y m\]. Por ejemplo, \[\033[34;1m\] imprimiría en azul (34) y negrita (1) el texto que tuviera a su derecha, hasta el final de línea o hasta que encontrara otro código. Si usáramos este código para modificar el prompt obtendríamos algo así:

export PS1=”${debian_chroot:+($debian_chroot)}\[\033[34;1m\]\u@\h:\w\$ \[\033[0m\]”

Cuidado con el código a 0 del final para volver al estilo por defecto; si no lo hubiéramos puesto, como comentamos, el primer código habría afectado a toda la línea, incluidos los comandos que introdujera el usuario.

Comentarios
  1. Juno.Desintoxicado

    Excelente, quería hacer esto hace tiempo. Gracias.

    Me recuerda los tiempos del d.o.s. con el prompt $p$g.

    Responder

  2. v1ncent

    Tengo curiosidad por ver como queda, pero como no tengo Linux en este momento =(

    Un pequeño screenshot no vendría mal 😛

    Responder

  3. tebe

    oye y como hago para que el cambio sea permanente?

    Responder

  4. @tebe añadiendo la cadena a .bashrc como se explica.

    Responder

  5. peter-zen

    Hola. Excelente artículo
    Una sola cosa: estoy en Fedora12 ¿Donde está .bashrc?
    o ¿Cómo lo edito? he probado con vi, pero no…

    Responder

  6. Fede

    @peter-zen

    Si el bashrc no existe crealo, a veces no está, como en mi caso. Saludos

    Responder

  7. julio

    como hago para cambiar el color de fondo de la terminal?

    Responder

    • Perry Mason

      Pintando la parte de atrás de la pantalla

      Responder

  8. Arturo Olmedo

    Que tal Amigo.

    He entendido como modificar los colores; pero mi pregunta es de donde toma los colores iniciales LS_COLORS.

    Has explicado muy bien, como poner nuestros colores, creando o actualizando la variable LS_COLORS; pero estos valores iniciales que tiene LS_COLORS; de donde los toma.?

    Perdona la pregunta, soy principiante en Ubuntu.

    Saludos

    Responder

Deja un comentario