LS en Color COMO <author>V. Inglesa: Thorbjoern Ravn Andersen <tt><htmlurl url="mailto:ravn@imada.ou.dk" name="ravn@imada.ou.dk"></tt> &nl; V. Española: Tomás Hidalgo, Guy Paul Gallardo <tt><htmlurl url="mailto:thidalgo@alboran.ualm.es" name="thidalgo@alboran.ualm.es"></tt> <date>v1.0, 15 de Noviembre 1996 <abstract> El comando <tt>ls</tt> 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. </abstract> <toc> <sect>¿Cómo seleccionar los colores? <p> Existen dos métodos: <itemize> <item><bf/Primer método:/ &nl; Utilizar el programa <tt/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: <tscreen><verb> setterm -foreground black -background white -store </verb></tscreen> donde <tt/-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 <tt/.login/ (en <tt/csh/ o <tt/tcsh/) o en el <tt/.profile/ (<tt/sh/, <tt/ksh/ o <tt/bash/). En adelante sabrá tanto sobre el comando <tt/setterm/ como yo :-). <item><bf/Segundo método:/ Linux usa códigos de escape <tt/ANSI/ del tipo: <tt>ESC[<parámetros>m</tt> donde <tt/ESC/ es el carácter ASCII 27 y <tt><parámetros>m</tt> es uno o varios números separados por puntos y comas. Por ejemplo: <itemize> <item><tt>"\033[41;33;1m"</tt> que da un aspecto amarillo sobre fondo rojo. <item><tt>"\033[30;47m"</tt> que da un aspecto blanco sobre fondo negro. <item><tt>"\033[m"</tt> que restablece el aspecto por defecto. </itemize> Estos ejemplos necesitan un shell que reconozca las construcciones del tipo <tt>\xxx</tt>. Si no es el caso, inserte directamente un carácter de escape en la cadena. En <tt>bash/vi</tt> teclee <tt>Ctrl-V ESC</tt>, y bajo <tt>tcsh/emacs</tt> teclee <tt>Ctrl-Q ESC.</tt> </itemize> <sect>¿Cuáles son las combinaciones de colores posibles? <p> Este es un script en <it/C-shell/ que muestra en la consola el conjunto de combinaciones de colores: <tscreen><code> #!/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 </code></tscreen> El número de colores <it/foreground/ crece hacia la izquierda, y el número de colores <it/background/ sigue la misma norma. Si desea una intensidad alta coloque <tt/01/ como primer parámetro. Ponga un punto y coma entre cada parámetro y toda la secuencia de parámetros seguida. <sect1>Inciso del traductor español. <p> 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. <bf>Funciones Gráficas</bf> <itemize> <item>0............Desactivar todos los atributos <item>1............Activar negrita (alta intensidad) <item>4............Subrayar (sólo en adaptadores monocromo) <item>5............Activar parpadeo <item>7............Activar vídeo inverso <item>8............Activar ocultamiento </itemize> <tscreen><verb> 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 </verb></tscreen> <sect>Aspecto por tipos de ficheros. <p> El comando <tt>ls</tt> comienza por mirar la definición de asociaciones de color en el fichero <tt>~/.dir_colors</tt> y si no existe usa el fichero <tt>/etc/DIR_COLORS</tt>. Dichos ficheros contienen entradas del tipo: <tscreen><verb> 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 </verb></tscreen> Las secuencias de escape dadas en parámetros aquí poseen exactamente la misma sintaxis que para el comando <tt/setterm/. Modifique esto a su gusto y verá el resultado ejecutando un <tt/ls/ en <tt>/sbin</tt>, <tt>/etc</tt> o <tt>/etc/dev</tt>. Con el fin de que el fichero <tt>/etc/DIR_COLORS</tt> o <tt>~/.dir_colors</tt> sea tomado en cuenta es necesario añadir en <tt>/etc/profile</tt> o <tt>~/.profile</tt> (<tt>sh/bash</tt>) o <tt>/etc/csh.login</tt> o <tt>~/.login</tt> (<tt>csh/tcsh</tt>) la línea: <tscreen><verb> eval '/bin/dircolors' </verb></tscreen> ATENCIÓN: Esta línea debe ser colocada antes de cualquier definición de alias para el comando ls. Este comando lee el fichero <tt>/etc/DIR_COLORS</tt> o <tt>~/.dir_colors</tt> y une las variables de entorno <tt>LS_COLORS</tt> y <tt>LS_OPTIONS</tt> así como los alias <tt>ls, dir, vdir, d</tt> y <tt>v</tt>. <sect>Cómo dar una configuración por defecto. <p> 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.) <tscreen><verb> ESC [8] </verb></tscreen> que especifica los valores por defecto de colores <tt/foreground/ y <tt/background/. La secuencia ANSI de recomposición de atributos, <tt>ESC[m</tt>, 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 <tt/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 <tt>/etc/issue</tt>, 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 <tt>/etc/rc.d/rc.S</tt> contiene (alrededor de la línea 75): <tscreen><verb> # 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 </verb></tscreen> Coloque estas líneas en comentario o modifíquelas como sigue: <tscreen><verb> # 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 </verb></tscreen> Mi shell de arranque no entiende el <tt>\033</tt>, debo especificar el código ASCII 27 en mi script como indiqué en el primer párrafo. La línea posee el aspecto: <tscreen><verb> ESCAPE="^[". </verb></tscreen> 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: <tscreen><verb> if ["\*(dRTERM"="console"]; then echo "\033[37;44m\033[8]" fi </verb></tscreen> o bien, <tscreen><verb> if ("\*(dRTERM"=="console") then echo "\033[37;44m\033[8]" endif </verb></tscreen> Si se desea que la modificación afecte a todos los usuarios del sistema, basta tan sólo con que el <tt/root/ modifique los ficheros <tt>/etc/profile</tt> o <tt>/etc/csh.login</tt>. (Reitero una vez más que si el shell no puede interpretar los <tt>\0xx</tt>, en particular el código <tt>\033</tt>, basta con sustituir este ultimo por "<tt/ESC/". <sect>Copyright<label id="copyright"> <p> Esta versión bajo copyright (c)1995 es propiedad de Pierre Vassellerie. Como todo documento HOWTO<footnote>N del T: COMOs</footnote>, 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: <itemize> <item>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. <item>Las traducciones y trabajos derivados deben ser aprobadas por el autor antes de la distribución. <item>Si distribuye este trabajo parcialmente, debe mencionarse como obtener una versión completa de este documento y estar en condiciones de suministrarla. <item>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. </itemize> 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. <sect>La traducción. <p> 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 <ref id="copyright">. Tomás Hidalgo Salvador, <htmlurl url="mailto:thidalgo@alboran.ualm.es" name="thidalgo@alboran.ualm.es"> <sect>Anexo: El INSFLUG <label id="Grupos"> <p> El <em/INSFLUG/ forma parte del grupo internacional <it/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 <bf/INSFLUG/ se orienta preferentemente a la traducción de documentos breves, como los <em/COMOs/ y <em/PUFs/ (<bf/P/reguntas de <bf/U/so <bf/F/recuente, las <it/FAQs/. <tt/:)/ ), etc. Diríjase a la sede del INSFLUG para más información al respecto. En la sede del INSFLUG encontrará siempre las <bf/últimas/ versiones de las traducciones: <tt><htmlurl url="http://www.insflug.org" name="www.insflug.org"></tt>. 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 (<it/mirror/) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano. Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. </article>