dircolors: modifica la configuración de color globalmente

dircolors: modifica la configuración de color globalmente

Entiendo lsque se utiliza dircolorspara mostrar resultados en color. dircolorstiene una base de datos predeterminada de colores asociados con extensiones de archivos, que se pueden imprimir con el comando

dircolors --print-database

Según man dir_colorsleí, la base de datos de todo el sistema debe estar ubicada en /etc/DIR_COLORS. Pero este archivo no existe en mi sistema (Debian). ¿Cómo puedo modificar la configuración de color de todo el sistema dircolors? ¿De dónde toma el comando dircolors --print-databasela configuración cuando no existe ningún archivo?

Soy consciente de que el usuario puede tener un archivo específico ~/.dircolorscon su configuración, pero esto no es adecuado para mí, ya que necesito cambiar la configuración para todos.

Una segunda pregunta es si es posible utilizar colores de 8 bits para dircolors. Mi terminal es xterm-256color.

Respuesta1

lstoma la configuración de color de la variable de entorno LS_COLORS. dircolorses simplemente una forma conveniente de generar esta variable de entorno. Para que esta variable de entorno surta efecto en todo el sistema, colóquela en el archivo de inicio de su shell.

Para bash, pondrías esto en /etc/profile:

# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.

eval "$(dircolors /etc/DIR_COLORS)"

Para zsh, lo colocarías /etc/zshrco lo harías para zshque se leyera /etc/profileal inicio. Es posible que su distribución zshya lo haya hecho. Solo menciono esto para señalar que la configuración dircolorspara todos depende del shell que utilicen.

En cuanto a dircolorsde dónde obtiene su configuración, cuando no especifica un archivo, simplemente usa algunos valores predeterminados integrados.

Puedes usar xtermlos códigos de escape de 256 colores de 's en tu archivo dircolors, pero ten en cuenta que solo funcionarán para xtermterminales compatibles. Por ejemplo, no funcionarán en la consola de texto de Linux.

El formato para códigos de escape de 256 colores es 38;5;colorNpara colores de primer plano y 48;5;colorNcolores de fondo. Así por ejemplo:

.mp3  38;5;160                   # Set fg color to color 160      
.flac 48;5;240                   # Set bg color to color 240
.ogg  38;5;160;48;5;240          # Set fg color 160 *and* bg color 240.
.wav  01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!

Respuesta2

RESPUESTA CORTA

dircolors(abreviatura de Directory Colors) no se puede utilizar para modificar colores globalmente. Para hacer eso, probablemente quieras ajustar la paleta de colores en tu emulador de terminal.

Por ejemplo, dircolorsno se utiliza para ajustar los colores solicitados por grep, vi, tmuxo man.

dircolorsse utiliza para ajustar los colores que los comandos lsytree pedidopara ser mostradoal mostrar sus nombres de archivos.

me estresosolicitud para ser mostrado, porque los colores que solicita un comando son solo los que se envían a su emulador de terminal. Su emulador de terminal puede entonces elegir mostrar colores diferentes a los solicitados. Lo que se solicita y lo que finalmente se muestra en la pantalla de su terminal que verá, pueden ser dos conjuntos de colores diferentes.


DESCRIPCIÓN GENERAL DEL PROCESO DE COLOR

1) Cualquier programa basado en texto o shell integrado, puede por diseño, salida ANSI (Instituto Nacional Estadounidense de Estándares)solicitud de colorcódigos de escape. Aquí recalco que estas son sólo solicitudes al terminal, que tiene la decisión final de cómo mostrarlas. El sistema de código de colores ANSI es un sistema muy antiguo que se originó inicialmente en terminales de hardware independientes.

Una solicitud de texto en color se parece a:

<requested-color><text-to-be-displayed-in-that-color><next-requested-color><next-text...

La parte 'color solicitado' no se muestra. Más bien, el emulador de terminal lo utiliza para que la pantalla muestre el "texto que se mostrará en ese color" en el color solicitado.

Los programas pueden llamar [ncurses][1]para enviar códigos ANSI al emulador de terminal. Básicamente tienes 8 colores estándar y 8 colores más llamativos/brillantes que se pueden solicitar. (ncurses es la abreviatura de New Curses, donde 'curses' es un juego de palabras con Optimización del cursor o una biblioteca de software para una salida eficiente basada en texto a una pantalla de terminal).

Se pueden configurar muchos comandos comunes basados ​​en texto para generar códigos de color ANSI enpedidoque su salida sea coloreada por el terminal. Ejemplos son: ls, tree, vim, grep, tmuxy man.

Estos códigos de color de salida (códigos de control con prefijo de escape) solicitan que la pantalla cambie a una combinación de colores determinada (primer plano, fondo y atributos) antes de que se genere el siguiente texto. Nuevamente, estos códigos de escape en realidad no determinan los colores que ves. Más bien especifican opciones de paleta particulares.

En el pasado existía una paleta de colores estándar. Si solicitó verde, verá verde.

Pero un emulador de terminal, como GNOME Terminalpor ejemplo, puede cambiar este comportamiento. Por ejemplo, si un programa solicitaverde, a través de un código de escape verde ANSI, puede decidir que esto debería mostrarse enrojo cerezaen tu pantalla. Lo que es importante recordar es que esto significa que:todoLos verdes solicitados, en cada programa de terminal, se convertirán en rojos. En otras palabras, no puedes simplemente ajustar los colores de salida de un programa en particular, de grepesta manera.

2A) Los comandos de directorio como lsy treeson algo especiales, en el sentido de que pueden ser configurados por el usuario para colorear los nombres de archivos por tipo de archivo según sus especificaciones. Esto es diferente a man, por ejemplo, que utiliza un conjunto fijo de colores alternativos además del blanco y negro.

Por ejemplo, es posible que se solicite que las carpetas se muestren en azul marino, mientras que los enlaces se muestren en azul claro.

Puede solicitar color para formatos de terminal específicos (como ansi o PuTTY) y por tipo básico de archivo (como carpeta, bloque o adhesivo) y/o por extensión de nombre de archivo coincidente (como *.sh o *.png). Esto se hace cambiando los códigos de color de salida ANSI por tipo de nombre de archivo usando la configuración proporcionada por la variable de entorno LS_COLORS. Vea a continuación cómo hacerlo.

2B)También hay combinaciones de colores especiales envimusando por ejemplo :colorscheme default. (Un tema para otro día.)

3)Su terminal (Terminal GNOME en mi caso) luego interpreta cualquier código ANSI para generar los colores de pantalla reales que ve.


AJUSTANDO GLOBALMENTE LOS COLORES EN TU EMULADOR DE TERMINAL

Si ajusta la configuración de color en GNOME Terminal(o probablemente en cualquier emulador de terminal que admita esta función), afectará los colores observables de todos y cada uno de los programas de texto que generen códigos de color ANSI. Estos cambios de color se ajustarán simultáneamente en todas las ventanas de terminal abiertas (suponiendo que esté utilizando el mismo emulador de terminal para todas las ventanas).

Si estuviera usando 2 emuladores de terminal diferentes (como ambos GNOME Terminaly XTerm), entonces cada uno podría ajustar los colores de salida final de manera diferente.

Con las Preferencias de Terminal de GNOME puede ajustar la 'paleta de colores' de todo el sistema (es decir, el conjunto de 16 colores disponibles para aplicaciones basadas en texto), según su propio conjunto de colores personalizado.

GNOME TerminalAyuda dice:

Tradicionalmente, los emuladores de terminal ofrecían una paleta de 16 colores, esto es lo que puedes modificar aquí. Terminal admite un conjunto ampliado de 256 colores, pero los 240 colores adicionales no se pueden editar aquí. El terminal incluso ofrece acceso directo a más de 16 millones de colores, esto se llama modo "color verdadero".

Si los cambios que realiza en la paleta no parecen tener efecto, probablemente el contenido que ve consiste en colores de paleta extendida o colores verdaderos, en lugar de los 16 colores base.


USO DE COLORES

Así es como funciona:

a)  Run  $ dircolors -p >/etc/DIR_COLORS   # to produce DIR_COLORS template file

b)  Hand edit /etc/DIR_COLORS to adjust ANSI color codes that will be output
    for various things to display.  For example, any filenames like *.png can 
    request a particular ANSI color combination.  (ANSI color codes are escape
    prefixes.)

c)  Run dircolors again, this time in both 
       /etc/profile       (for logins)           and
       /etc/bash.bashrc   (for terminal windows)
    to read DIR_COLORS and create and export the LS_COLORS 
      environment variable, like this:

        $ eval "$(dircolors -b /etc/DIR_COLORS)"

Llamo dircolorstemprano en mi /etc/profiledonde lo uso para configurar y exportar LC_COLORS.

# === Create DEFAULT LS_COLORS ENVIRONMENT VARIABLE ===========================
# /etc/DIR_COLORS is a data file from:  $ dircolors -p > /etc/DIR_COLORS
eval "$(dircolors -b /etc/DIR_COLORS)"      # This reads /etc/DIR_COLORS 
# and then runs these two commands:   
#
#   $ LS_COLORS=...     # <-- where this value is created from /etc/DIR_COLORS
#   $ export LS_COLORS

$ bash --loginComo referencia , a continuación, al final de esta respuesta, se muestra cómo habilito colores en varios comandos en /etc/profile (que se lee cada vez que se inicia sesión, (incluido )).

Tenga en cuenta que hay algunas carpetas y archivos de vídeo inverso que se muestran divertidos ls(por ejemplo, archivos de copia de seguridad de DOS). Ninguna cantidad de desorden en la Terminal GNOME (a continuación) parece afectar estos colores. Pero puedes editar DIR_COLORS usado por dircolors(ver notas arriba) para ajustar cosas con LS_COLORS.

ingrese la descripción de la imagen aquí


CONSEJOS SOBRE CÓMO AJUSTAR LOS COLORES DE SU PROPIO SISTEMA

En el menú de la Terminal GNOME, seleccione Edit| Preferences. En el panel izquierdo, elija el perfil que desea ajustar y en el panel derecho seleccione la Colorspestaña.

!! ANTES DE CONTINUAR, LE SUGIERO ENCARECIDAMENTE QUE HAGA UNA COPIA DE SEGURIDAD DE SUS PREFERENCIAS EXISTENTES. Una captura de pantalla funcionará bien. Vea la captura de pantalla mía a continuación.

TL;DR- Si no desea configurar esta casilla de verificación: ingrese la descripción de la imagen aquí

para usar los valores predeterminados más básicos, pero en su lugar desea un fondo de trabajo negro con aplicaciones coloreadas bash, vim, grep, ls, ..., luego intente configurar los colores de esta manera:

ingrese la descripción de la imagen aquí

Este diálogo de colores me pareció un poco confuso al principio, pero es lógico una vez que lo entiendes. El mayor problema es que todas mis aplicaciones de texto comparten la misma paleta de colores, pero la usan de manera algo diferente, especialmente ls.

Estos son los colores exactos que estoy usando:

black           aqua            green           orange          light yellow    purple          blue, primary   gray (X)        <-- X=Don't care
#000000         #01B9E0         #389400         #FF8A00         #F4FF92         #C401C4         #005EEA         #AAAAAA
0               1               2               3               4               5               6               7
------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 1st set are     "normal   colors"

------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 2nd set are the "brighter colors" (for check box below)
8               9               10              11              12              13              14              15
#555555         #FF5555         #55FF55         #FFFF55         #5397FE         #FF55FF         #55FFFF         #D6D6D6
dark gray (X)   red/orange      lime            yellow (X)      blue, medium    pink            aqua, bright    light gray (X)  <-- X=Don't care

ENTENDIENDO EL DIÁLOGO 'PREFERENCIAS - PERFIL' DE GNOME TERMINAL

Las secciones superior e inferior ( Text and Background Colory Palette) parecen funcionar casi de forma completamente independiente, excepto que las Paletteselecciones son una capa encima (es decir, modifican aún más) la configuración superior en Text and Background Color. (Además, incluso si Use colors from system themeestá marcado, Show bold text in bright colorsen la parte inferior sigue siendo importante, al menos para ls.)


Primero, vamos a meternos con la Text and Background Colorconfiguración.

Estos determinan los colores predeterminados para colores básicos, no especiales Texty Background. También puede elegir modificadores opcionales para texto Boldo Highlighty un color de cursor fijo si lo desea, como el naranja brillante, por ejemplo, que podría hacer felices a algunas personas.

La Use colors from system themecasilla de verificación parece decidir si desea heredar la configuración de color o definirla usted mismo. Cuando lo desmarcas, puedes elegir un esquema integrado o personalizado en el menú desplegable.

Lo que elijas se incluirá en las muestras Texty Backgrounda continuación, excepto Custom.

Tenga en cuenta que sus elecciones aquí no afectan las otras 3 casillas de verificación debajo.

También tenga en cuenta que si hace clic primero en la muestra Texto Background, obtendrá un selector de color y, una vez que elija Selecten él, establecerá el Built-in schemesmenú desplegable en Personalizado.

Si marca Bold colory establece un color, el texto que un programa especifica en negrita obtiene este color anulado.

Si marca Cursor color, podrá elegir colores fijos para su cursor. (Tenga en cuenta que tendrá que mover el cursor sobre el texto para verlo cambiar). Sin esta opción marcada, el cursor parece variar según el color del texto sobre el que se encuentra.

Si marca Highlight color, verá el efecto de estas dos muestras, por ejemplo, en vim cuando arrastre el mouse para copiar algún texto.


Ahora es el momento de meterse con la Paletteconfiguración.

De manera similar a lo anterior, el menú desplegable coloca un conjunto de colores en las muestras que se encuentran debajo. Notarás que hay dos filas de 8. Estas muestras anulan los 8 colores de primer plano ANSI y los 8 de fondo establecidos por terminfo.

Lo que es importante ver es que puedes configurar estas muestras para variaciones de color sutiles.

Además, los cambios que realice aquí afectarán a todos o a la mayoría de sus programas basados ​​en texto que tienen el color habilitado. Así que ten cuidado aquí. (No puedo decirle cómo hacer una copia de seguridad de esto primero, porque todavía no lo sé. Tome una captura de pantalla como mínimo).

Si bien no sé para qué se utilizan todas estas muestras, algunos experimentos han deducido lo siguiente.

Antes de comenzar a probar, abra algunas cosas de GNOME Terminal: una vimsesión de edición de código de bashy otra cde lssu directorio de inicio, una treeejecución y una tmuxsesión. A medida que cambie las cosas a continuación, podrá ver mejor lo que está cambiando.

Intente hacer pequeños cambios al principio. Y asegúrese de hacer clic y desmarcar la casilla de verificación en la parte inferior (se explica con más detalle a continuación).

Precaución:Si configura y luego configura manualmente las 16 muestras de color como sugiero, tenga cuidado porque si vuelve a elegir algo más en , borrará su configuración anterior y, si lo desea nuevamente, Palettetendrá que comenzar de nuevo. lo cual es un dolor. (Parece que no hay forma de guardar la configuración de color personalizada, excepto con una captura de pantalla o escribiéndolas una por una).CustomBuilt-in schemes:PaletteCustom

Built-in schemes: Custom-- Color palette:ajustes

tmux    status text                     status-backgr
tmux vi                 literals                        flow (orange)   comments&fcns   $names          var  names      ?
vi C    -               literals        types           flow (brown)    comments&fcns   macros          -               ?
vi Bash -               literals        -               flow (brown)    comments&fcns   Environ         var  names      ?               flow: brown (can't change with gnome)
Bash    -                               user@dir $
Bash ls -                               Reverse-backg                   Reverse-foregr
gcc

        black           aqua            green           orange          dark yellow    purple          blue, primary   gray (X)        <-- X=Don't care
        #000000         #01B9E0         #389400         #FF8A00         #C6CF76         #C401C4         #005EEA         #AAAAAA
        0               1               2               3               4               5               6               7
        ------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 1st set are     "normal   colors"

        ------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 2nd set are the "brighter colors" (for check box below)
        8               9               10              11              12              13              14              15
        #555555         #FF5555         #55FF55         #FFFF55         #5397FE         #FF55FF         #55FFFF         #D6D6D6
        dark gray (X)   red/orange      lime            yellow (X)      blue, medium    pink            aqua, bright    light gray (X)  <-- X=Don't care

tmux    ?                                               ?                                                               ?
tmux vi ?                                               ?                                                               ?
vi C    ?                                               ?                                                               ?
vi Bash ?                                               ?                                                               ?
Bash    ?               root@dir #                      ?                                                               ?
Bash ls ?                               x.sh            ?               directories     media files     links           ?
gcc     ?               errors                          ?                                                               ?

Finalmente, en la parte inferior, está la Show bold text in bright colorscasilla de verificación. La ayuda de GNOME dice:

Colores brillantes para texto en negrita

Tradicionalmente, los terminales no separaban claramente el peso de la fuente en negrita de los colores intensos; a menudo, ambos se habilitaban juntos. Las mejoras recientes, como la introducción de soporte de color verdadero y ciertos esquemas de color (por ejemplo, Solarized) hicieron deseable separar los dos conceptos, es decir, independizar el brillo del peso de la fuente.

...

Disable Show bold text in bright colors for the new default behavior, the complete separation of color intensity and font weight;

o habilite esta opción para mejorar la compatibilidad con versiones anteriores.

Cuando está marcado, toma lo que se mostró en las filas superiores y, en su lugar, muestra los colores de la fila inferior. Si marca esto, notará que algunos de los nombres lscambiarán un poco de color. Creo que se relaciona con las secuencias de color n.º 1 de ISO 6429, "para colores más brillantes" en $ man dir_colors. Parece que esto afecta mayoritariamente lsy no vim.


¿CÓMO SE VEN LOS COLORES DE LOS ESQUEMAS INTEGRADOS?

Cuando built-in schemesfueron probados con la utilidad de prueba de color que se describe aquíVeo los siguientes resultados (consejo para compilar y vincular con esto $ gcc -Wall -lcurses color-demo.C):

Nota laShow bold text in bright colorsla casilla de verificación está marcada. Sin marcar, los colores de alta y baja intensidad son iguales.

  • Linux console(parece ser el conjunto de colores CGI original):

ingrese la descripción de la imagen aquí

  • xterm:

ingrese la descripción de la imagen aquí

  • rxvt(fuera de orden porque esto se acerca más a los anteriores):

ingrese la descripción de la imagen aquí

  • Tango(fuera de servicio porque esto está más cerca de Solarizado a continuación):

ingrese la descripción de la imagen aquí

  • Solarized:

ingrese la descripción de la imagen aquí


¿CÓMO CONFIGURO MIS COMANDOS PARA QUE SE MUESTREN EN COLOR?

En tu /etc/.bashrc.shared(llamado por ~/.bashrcy /root/.bashrc), o si no lo tienes en tu ~/.bashrcy /root/.bashrc:

# === ADD COLOR UNLESS DUMB TERMINAL ========================================
if [ "$TERM" != "dumb" ]; then
    # ENVIRONMENT: 
    #   You can turn off these colorizing aliases in the interactive environment by invoking 
    #       shell with  TERM="dumb bash".
    
    #   Assume LS_COLORS is already set by dircolors in /etc/profile.  It can be adjusted later.
    
    # Using color to distinguish file types is disabled both by default and with --color=never.  
    #   With --color=auto, ls emits color codes only when standard output is connected to a terminal.  
     export COLOR_MODE='--color=auto'


    #   The use of  alias  limits color effects to the interactive command usage. 
    #       It has advantage over exporting environment variable "export COLOR_MODE='--color=auto'" 
    #       since color can be seen under pager programs such as less(1). If you wish to suppress 
    #       color when piping to other programs, use "--color=auto" instead in the above example 
    #       for "~/.bashrc".
    #       !! NOTE - alias is very picky about extra spaces around = sign

    # --- grep
    # Surround the matched (non-empty) strings, matching lines, context lines, file names, 
    #   line numbers, byte offsets, and separators (for fields and groups of context lines) 
    #   with escape sequences to display them in color on the terminal.  
    #   The colors are defined by the environment variable GREP_COLORS, (plural).
    #       See grep man page for GREP_COLORS instructions.
     alias  grep=' grep ${COLOR_MODE}'
     alias egrep='egrep ${COLOR_MODE}'
     alias fgrep='fgrep ${COLOR_MODE}'
     alias zgrep='zgrep ${COLOR_MODE}'

    # --- ls ------------------------
     alias ls='ls ${COLOR_MODE}'

    #   These next two use the ls alias above, i.e. the first one below is really 'ls ${LS_OPTS} -l'
     alias ll='ls -l'                   # -l = long
     alias  l='ls -lA'                  # -A = amost all (.*, but not . nor ..)

    # --- tree ----------------------
     alias tree='tree -C'               # -C adds color to tree

    # --- less ----------------------
     alias  less='less -R'              # Output raw control chars for ANSI colors

    # --- man -----------------------
    # ref: http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/
    #   NOTE these seem to use TERMCAP which is obsolite.
    # ANSI "color" escape sequences are sequences of the form:      ESC [ ... m
        export LESS_TERMCAP_mb=$(printf '\e[01;31m')        # enter blinking            mode
        export LESS_TERMCAP_md=$(printf '\e[01;38;5;75m')   # enter double-bright       mode
        export LESS_TERMCAP_me=$(printf '\e[0m')            # turn off all appearance   modes (mb, md, so, us)

        export LESS_TERMCAP_so=$(printf '\e[01;33m')        # enter standout            mode
        export LESS_TERMCAP_se=$(printf '\e[0m')            #  leave standout           mode

        export LESS_TERMCAP_us=$(printf '\e[04;38;5;200m')  # enter underline           mode
        export LESS_TERMCAP_ue=$(printf '\e[0m')            #  leave underline          mode

fi

Respuesta3

¿De dónde toma el comando dircolors --print-databasela configuración cuando no existe ningún archivo?

Según elmanual, utiliza una base de datos precompilada en ausencia de un archivo.

Si se especifica un archivo, dircolors lo lee para determinar qué colores usar para qué tipos de archivos y extensiones. De lo contrario, se utiliza una base de datos precompilada. Para obtener detalles sobre el formato de estos archivos, ejecute ' dircolors --print-database'.

Para cambiar la configuración para todos, puede crear un /etc/dircolorsarchivo y agregar lo siguiente a /etc/bashrc:

d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"

Respuesta4

Linux establece los colores de fondo de la consola con dircolors:

Su archivo dircolors controla los colores de las palabras que aparecen a través de ls en la consola. Encuentra este .dircolorsarchivo para tu distribución, un enlace de ayuda:

http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html

Para mí en Fedora 17, mi archivo dircolors es:/etc/DIR_COLORS

Copie /etc/DIR_COLORSen su /home/el/.dircolorsdirectorio. Créelo si no existe.

Edite /home/el/.dircolors, busque el texto "dir".

Cambia esto:

DIR 01;34   # directory

A esto:

DIR 01;36   # directory

Guarde, cierre y reinicie el shell. Los directorios van desde azul oscuro sobre negro (ilegible) hasta verde azulado brillante sobre negro (legible).

información relacionada