¿Qué causa este fondo verde en la salida de ls?

¿Qué causa este fondo verde en la salida de ls?

Captura de pantalla de la salida de ls en una máquina Linux.

Hay dos directorios mostrados por 'ls'. Normalmente, los directorios de cualquier lugar son azules sobre fondo negro. Pero el primero es azul sobre verde e imposible de leer. ¿Por qué es esto? ¿Cómo hacer que sea azul sobre negro, o al menos algo claro sobre algo oscuro?

Esto está en Ubuntu 12.04, usando bash en Gnome Terminal. En Konsole, el azul es un poco más oscuro y se puede leer, aunque podría ser mucho mejor.

Respuesta1

Además de colorear archivos según su tipo (turquesa para archivos de audio, rojo brillante para archivos y archivos comprimidos, y morado para imágenes y vídeos), lstambién colorea archivos y directorios según sus atributos:

  • El texto negro con fondo verde indica que otras personas, además del usuario y grupo propietario, pueden escribir en un directorio y que tiene el bit adhesivo configurado ( o+w, +t).
  • El texto azul con fondo verde indica que otras personas, además del usuario y grupo propietario, pueden escribir en un directorio, y nonotenga la punta adhesiva colocada ( o+w, -t).

Esteban PalaciosobrePregúntale a Ubuntuha realizado esta imagen muy instructiva sobre los diferentes atributos de colores:

Qué significan los diferentes colores en el terminal

ComoterdónComo se indicó, la configuración de color se puede modificar a través dedircolors. Se puede acceder a una lista de las diferentes configuraciones de coloración con dircolors --print-database.

Cada línea de salida, como BLK 40;33;01, tiene la forma:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGETindica el objetivo de la regla de coloración

  • TEXT_STYLEindica el estilo del texto:

    • 00= ninguno
    • 01= negrita
    • 04= guión bajo
    • 05= parpadear
    • 07= reversa,
    • 08= oculto
  • FOREGROUND_COLORindica el color de primer plano:

    • 30= negro
    • 31= rojo
    • 32= verde
    • 33= amarillo
    • 34= azul,
    • 35= magenta
    • 36= cian
    • 37= blanco
  • BACKGROUND_COLORindica los colores de fondo:

    • 40= negro
    • 41= rojo
    • 42= verde
    • 43= amarillo
    • 44= azul,
    • 45= magenta
    • 46= cian
    • 47= blanco

Los campos se pueden omitir comenzando desde la derecha, por lo que, por ejemplo, .tar 01;31significa negrita y rojo.

XTerm y la mayoría de los otros emuladores de terminales modernos admiten 256 colores.

Un código de color de primer plano XTerm de 256 colores tiene la forma:

38;5;[FOREGROUND_COLOR]

Un código de color de fondo XTerm de 256 colores tiene la forma:

48;5;[BACKGROUND_COLOR]

donde ambos FOREGROUND_COLORy BACKGROUND_COLORes un número en el rango 0-255. En la siguiente captura de pantalla se muestra una lista completa de códigos de color para los modos de 16 y 256 colores:

Códigos de color de modo de 16 y 256 colores

Respuesta2

Los colores de lspueden representar los permisos; El valor predeterminado para algunos sistemas es mostrar directorios donde todos tienen permisos de escritura con un fondo verde:

ingrese la descripción de la imagen aquí

Puede cambiar los colores editando su $LS_COLORSvariable usando dircolors(de man ls):

   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.  The LS_COLORS  environment
   variable can change the settings.  Use the dircolors command to set it.

Es cierto que la sintaxis es un poco molesta aquí, pero puedes cambiar este color creando un archivo con los colores que quieras y guardándolo como ~/.dircolors:

dircolors -p > ~/.dircolors

Ese comando imprimirá los valores predeterminados en ~/.dircolors. Luego necesitarás editar ese archivo y cambiar esta línea:

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

Por ejemplo, para que sea texto negro sobre fondo rojo (consulteaquípara obtener una lista de códigos de color):

OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky

No es necesario tener todos los valores predeterminados, también puedes crear un archivo con una sola línea, redefiniendo solo la que deseas cambiar. De todos modos, una vez que hayas creado el archivo, cárgalo con:

eval "$(dircolors ~/.dircolors)";

Y aquí está en acción:

ingrese la descripción de la imagen aquí

Para que eso suceda automáticamente, agregue el evalcomando anterior a su ~/.bashrcarchivo.

Respuesta3

tldr; ¿Cómo solucionarlo?

Para solucionar rápidamente el problema:

LS_COLORS+=':ow=01;33'
  • Hace que los archivos en los que se pueden escribir aparezcan en amarillo en nobg
  • Edite su perfil de shell (por ejemplo ~/.bashrc, ~/.profile, etc.) para que sea permanente.

Más detalles:

Reemplazar 33por 34por blueen nobg. Aún más sencillo, hacerlo nofgen nobg:

LS_COLORS+=:ow=

Para que su cambio sea permanente, añádalo a su .perfil:

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile

Para ver las reglas no relacionadas con extensiones de LS_COLORS:

echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'

sedcoloca cada regla en una línea y grepelimina las reglas que comienzan por*.'.


Para explorar los lscolores en su terminal, considere usar

C="$LS_COLORS"
function sc () {
    echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
    ls /mnt # Or the path to your example directory.
}

Entonces

LS_COLORS="$C:ow=38;5;250;48;5;025";t

Como se indica en otra respuesta (la de Thomas Nyman), 38;5;es el prefijo para el término x de primer plano de 256 colores y 48;5;para el término x de fondo de 256 colores. Sin embargo, no todos los terminales admiten 256 colores.

Ver también-¿Qué significan los diferentes colores en ls?-en AskUbuntu.

Respuesta4

Estos son los 3 pasos que utilicé para cambiar los colores:

Primero, copie los colores predeterminados a un archivo.

dircolors -p > ~/.dircolors

Luego modifique este archivo. Puede encontrar algunos valores para los colores en el interior y aquí hay algunos más:

Code    Color
0   Default Colour
1   Bold
4   Underlined
5   Flashing Text
7   Reverse Field
31  Red
32  Green
33  Orange
34  Blue
35  Purple
36  Cyan
37  Grey
40  Black Background
41  Red Background
42  Green Background
43  Orange Background
44  Blue Background
45  Purple Background
46  Cyan Background
47  Grey Background
90  Dark Grey
91  Light Red
92  Light Green
93  Yellow
94  Light Blue
95  Light Purple
96  Turquoise
100  Dark Grey Background
101  Light Red Background
102  Light Green Background
103  Yellow Background
104  Light Blue Background
105  Light Purple Background
106  Turquoise Background

(fuente)

Y finalmente, agregue la siguiente línea a su ~/.bashrcarchivo para que los colores se carguen automáticamente cuando abra una terminal:

eval 'dircolors ~/.dircolors' > /dev/null

Para ~/.zshrc:

if [[ -f ~/.dircolors ]] ; then
    eval $(dircolors -b ~/.dircolors)     
elif [[ -f /etc/DIR_COLORS ]] ; then
    eval $(dircolors -b /etc/DIR_COLORS)
fi

información relacionada