LS en Color COMO

V. Inglesa: Thorbjoern Ravn Andersen ravn@imada.ou.dk V. Española: Tomás Hidalgo, Guy Paul Gallardo thidalgo@alboran.ualm.es v1.0, 15 de Noviembre 1996

El comando ls incluído en la distribución Slackware de linux permite color. (Slackware 2.0.2 y núcleo 1.1.54 de Linux. Funciona también con agetty, o bien con mgetty ps). Puede que los colores por defecto no le gusten o que les haya cogido manía. Este documento tiene como objetivo explicar el principio de funcionamiento y configuración de colores usados por este comando.

Índice General

1 ¿Cómo seleccionar los colores? 1

2 ¿Cuáles son las combinaciones de colores posibles? 2

2.1 Inciso del traductor español. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3 Aspecto por tipos de ficheros. 3

4 Cómo dar una configuración por defecto. 3

5 Copyright 4

6 La traducción. 5

7 Anexo: El INSFLUG 5

1 ¿Cómo seleccionar los colores?

Existen dos métodos:

• Primer método:

Utilizar el programa setterm que es válido para una modificación rápida y simple de la configuración por defecto. Los manuales y ayudas de este comando están escritos de forma farragosa y no intentaré de ninguna manera traducirlos más claros ;-). Las selecciones se realizan de la forma:

                   setterm -foreground black -background white -store

donde -store significa que dicha configuración es grabada por defecto en la consola activa. Sería necesario repetir esta operación para cada consola virtual nueva, por lo que parece una buena idea colocar esta línea en el .login (en csh o tcsh) o en el .profile (sh, ksh o bash). En adelante sabrá tanto sobre el comando setterm como yo :-).

• Segundo método: Linux usa códigos de escape ANSI del tipo: ESC[<parámetros>m donde ESC es el carácter ASCII 27 y <parámetros>m es uno o varios números separados por puntos y comas. Por ejemplo:

– "\033[41;33;1m" que da un aspecto amarillo sobre fondo rojo.

– "\033[30;47m" que da un aspecto blanco sobre fondo negro.

– "\033[m" que restablece el aspecto por defecto.

Estos ejemplos necesitan un shell que reconozca las construcciones del tipo \xxx. Si no es el caso, inserte directamente un carácter de escape en la cadena. En bash/vi teclee Ctrl-V ESC, y bajo

     tcsh/emacs teclee Ctrl-Q ESC.

2 ¿Cuáles son las combinaciones de colores posibles?

Este es un script en C-shell que muestra en la consola el conjunto de combinaciones de colores:

      #!/bin/csh
      #
      # Muestra los colores ANSI
      #
      set esc="\033["
      foreach fore (30 31 32 33 34 35 36 37)
      set line1="\*(dRfore " line2="  "
      foreach back (40 41 42 43 44 45 46 47)
      set line1="\*(dR{line1}\*(dR{esc}\*(dR{back};\*(dR{fore}m Normal \*(dR{esc}0m"
      set line2="\*(dR{line2}\*(dR{esc}\*(dR{back};\*(dR{fore}1m \*(dR{back} Bold \*(dR{esc}0m"
      end
      echo "\*(dRline1\n\*(dRline2"
      end

El número de colores foreground crece hacia la izquierda, y el número de colores background sigue la misma norma. Si desea una intensidad alta coloque 01 como primer parámetro. Ponga un punto y coma entre cada parámetro y toda la secuencia de parámetros seguida.

2.1 Inciso del traductor español.

Para una mayor facilidad a la hora de poder elegir el aspecto de colores para el comando ls se describen a continuación la correspondencia entre los números y los colores de las secuencias de escape.

Funciones Gráficas

• 0............Desactivar todos los atributos

• 1............Activar negrita (alta intensidad)

• 4............Subrayar (sólo en adaptadores monocromo)

• 5............Activar parpadeo

• 7............Activar vídeo inverso

• 8............Activar ocultamiento

     Colores Primer Plano (Foreground)            Colores de Fondo (Background)
              30.....................Negro....................40
              31.....................Rojo.....................41
              32.....................Verde....................42
              33.....................Amarillo.................43
              34.....................Azul.....................44
              35.....................Magenta..................45
              36.....................Azul verdoso.............46
              37.....................Blanco...................47

3 Aspecto por tipos de ficheros.

El comando ls comienza por mirar la definición de asociaciones de color en el fichero ~/.dir colors y si no existe usa el fichero /etc/DIR COLORS. Dichos ficheros contienen entradas del tipo:

            LINK 36;1      # enlace simbolico
            FIFO 40;33     # pipeline
            SOCK 41;01;35  # socket
            BLK 41;33;01   # gestor en modo bloque
            CHR 41;33;01   # gestor en modo caracter
            EXEC 32;1      # ficheros ejecutables
            .tar 01;31     # ficheros y archivos comprimidos
            .tgz 01;31
            .zip 01;31
            .z   01;31
            .Z   01;31
            .gz  01;31

Las secuencias de escape dadas en parámetros aquí poseen exactamente la misma sintaxis que para el comando setterm. Modifique esto a su gusto y verá el resultado ejecutando un ls en /sbin, /etc o

/etc/dev.

Con el fin de que el fichero /etc/DIR COLORS o ~/.dir colors sea tomado en cuenta es necesario añadir

en /etc/profile o ~/.profile (sh/bash) o /etc/csh.login o ~/.login (csh/tcsh) la línea:
     eval '/bin/dircolors'

ATENCIÓN: Esta línea debe ser colocada antes de cualquier definición de alias para el comando ls. Este comando lee el fichero /etc/DIR COLORS o ~/.dir colors y une las variables de entorno LS COLORS y

LS OPTIONS así como los alias ls, dir, vdir, d y v.

4 Cómo dar una configuración por defecto.

Esto es realizado individualmente para cada consola virtual con la ayuda de la secuencia ANSI. (Esta información ha sido encontrada estudiando el código fuente del núcleo. No puedo decir que se trate de un estándar.)

     ESC [8]

que especifica los valores por defecto de colores foreground y background. La secuencia ANSI de recomposición de atributos, ESC[m, permite entonces tener en cuenta esos colores antes que el blanco sobre fondo negro.

El método descrito aquí se ha supuesto para sistemas aislados, donde los accesos se hacen sólo en la consola. Esto no funciona para logins realizados desde terminales remotos, conexiones por módem o desde otras máquinas, ya que no interpretarían las secuencias. La interpretación de códigos ANSI es una propiedad de las consolas Linux y que sólo existe en pocos programas de terminal.

Si se encuentra en un sistema aislado, un buen medio de tener en cuenta los colores para cada consola es la de modificar el fichero /etc/issue, y ver el resultado generado. Generalmente (y en particular en las distribuciones Slackware) este fichero es leído y mostrado en cada inicialización del sistema. Así si su /etc/rc.d/rc.S contiene (alrededor de la línea 75):

         # Inicializa /etc/issue y etc/motd para dar la version del nucleo usado
         # ATENCION: los ficheros /etc/issue y /etc/motd son creados en cada inicio
         # Ponga esto en comentario si desea personalizar para siempre todos
         # estos ficheros.
         echo "">/etc/issue
         echo Bienvenido al mundo maravilloso de Linux \
              '/bin/uname -a | /bin/cut -d\ -f3'.>>/etc/issue
         echo >> /etc/issue

Coloque estas líneas en comentario o modifíquelas como sigue:

         # Ponga esto en comentario si desea personalizar para siempre todos
         # estos ficheros.
         ESCAPE="<sustituir esto por un solo caracter de escape>"
         echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J">/etc/issue

Mi shell de arranque no entiende el \033, debo especificar el código ASCII 27 en mi script como indiqué en el primer párrafo. La línea posee el aspecto:

     ESCAPE="^[".

Este código tiene por objeto colocar el cursor al principio de la ventana, cambiar los colores, salvar la selección y borrar la pantalla. Dicha modificación solo tendrá efecto al reinicializar la máquina.

Si su máquina Linux no está aislada, puede que aparezcan diversos problemas en las conexiones con usuarios remotos. Esto es debido al hecho de que su terminal no interpreta las secuencias de escape ANSI.

Debe entonces ajustar a nivel de usuario:

      if ["\*(dRTERM"="console"]; then
        echo "\033[37;44m\033[8]"
      fi

o bien,

      if ("\*(dRTERM"=="console") then
        echo "\033[37;44m\033[8]"
      endif

Si se desea que la modificación afecte a todos los usuarios del sistema, basta tan sólo con que el root modifique los ficheros /etc/profile o /etc/csh.login. (Reitero una vez más que si el shell no puede interpretar los \0xx, en particular el código \033, basta con sustituir este ultimo por ”ESC”.

5 Copyright

Esta versión bajo copyright (c)1995 es propiedad de Pierre Vassellerie.

Como todo documento HOWTO^{1}, este documento puede ser reproducido y distribuido en su integridad o en parte, por cualquier medio físico. A pesar de todo queda sujeto a las condiciones siguientes:

• La mención del copyright debe ser conservada, y la presente sección debe preservarse en su integridad en toda copia, tanto completa como en parte.

1N del T: COMOs

• Las traducciones y trabajos derivados deben ser aprobadas por el autor antes de la distribución.

• Si distribuye este trabajo parcialmente, debe mencionarse como obtener una versión completa de este documento y estar en condiciones de suministrarla.

• Pueden ser usadas pequeñas porciones de este documento como ilustraciones de una revista o como reseñas sin autorización previa siempre que se cite a los autores.

Pueden ser acordadas excepciones a estas reglas con fines educativos; escriba al autor y pregunte. Estas restricciones tiene como único objetivo proteger a los autores y su trabajo. Toda aportación educativa a este documento será valorada positivamente.

6 La traducción.

Este documento ha sido traducido por Tomás Hidalgo Salvador para el grupo de usuarios de Linux INSFLUG coordinado por Francisco José Montilla.

Dicha traducción se encuentra amparada por los mismos derechos expresados en la sección 5.

Tomás Hidalgo Salvador, thidalgo@alboran.ualm.es

7 Anexo: El INSFLUG

El INSFLUG forma parte del grupo internacional Linux Documentation Project, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés.

En el INSFLUG se orienta preferentemente a la traducción de documentos breves, como los COMOs y PUFs (Preguntas de Uso Frecuente, las FAQs. :) ), etc.

Diríjase a la sede del INSFLUG para más información al respecto.

En la sede del INSFLUG encontrará siempre las últimas versiones de las traducciones: www.insflug.org. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica.

Se proporciona también una lista de los servidores réplica (mirror) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano.

Francisco José Montilla, pacopepe@insflug.org.