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

captura de pantalla de la salida de ls en la máquina Linux

Hay dos directorios mostrados por «ls». Normalmente, los directorios en 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.

Respuesta

Aparte de colorear archivos según su tipo (turquesa para archivos de audio, rojo brillante para archivos y archivos comprimidos, y violeta para imágenes y videos), ls también colorea archivos y directorios según sus atributos:

  • El texto negro con fondo verde indica que otros usuarios pueden escribir en un directorio, además del usuario y el grupo propietario, y que tiene el bit adhesivo establecido (o+w, +t) .
  • El texto azul con fondo verde indica que otros usuarios pueden escribir en un directorio, además del usuario y el grupo propietario, y no tiene el bit de pegamento establecido (o+w, -t).

Stephano Palazzo en Ask Ubuntu ha hecho esta imagen muy instructiva sobre los diferentes colores de atributos:

Wh en los diferentes colores significan en la terminal

Como terdon señaló, la configuración de color se puede modificar a través de dircolors . 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] 
  • TARGET indica el objetivo de la regla de coloración

  • TEXT_STYLE indica el estilo del texto:

    • 00 = ninguno
    • 01 = negrita
    • 04 = subrayado
    • 05 = blink
    • 07 = reverse,
    • 08 = oculto
  • FOREGROUND_COLOR indica el color de primer plano:

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

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

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

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

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

38;5;[FOREGROUND_COLOR] 

Un código de color de fondo de XTerm de 256 colores es del formulario:

48;5;[BACKGROUND_COLOR] 

donde tanto FOREGROUND_COLOR y BACKGROUND_COLOR es un numere el rango 0-255. En la siguiente captura de pantalla se muestra una lista completa de códigos de color para los modos de color 16 y 256:

16 y 256 códigos de color del modo de color

Comentarios

  • Los códigos BACKGROUND_COLOR no son los mismos que FOREGROUND_COLOR; Los códigos de fondo son 40-47
  • 38;5; inicia un código de color de primer plano xterm 256 colores . 48;5; inicia un código de color de fondo xterm de 256 colores. El cian en mi salida dircolors es 38;5;51 no 36 aunque el resultado es el mismo.
  • @stevesliva: Gracias por tu comentario. ‘ he editado la respuesta para indicar correctamente los códigos de color de fondo y describir los códigos de color de primer plano y de fondo de 256 colores.
  • Entonces, ¿qué significa verde solo en primer plano ¿significar? como si tuviera aquí ?
  • @ChagaiFriedlander: archivos ejecutables (consulte la fila inferior en la imagen ).

Respuesta

Los colores de ls pueden representar los permisos , la configuración predeterminada para algunos sistemas es mostrar los 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_COLORS variable con 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. 

La sintaxis es ciertamente un poco molesta aquí, pero puede cambiar este color creando un archivo con los colores que desee y guardándolo como ~/.dircolors:

dircolors -p > ~/.dircolors 

Ese comando imprimirá los valores predeterminados en ~/.dircolors. Luego deberá 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 convertirlo en texto negro sobre fondo rojo (consulte aquí 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 que tenga todos los valores predeterminados , también puede crear un archivo con una sola línea, redefiniendo solo el que desea cambiar. De todos modos, una vez que haya creado el archivo, cárguelo 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 eval comando anterior a su ~/.bashrc archivo.

Comentarios

  • Los colores predeterminados a menudo parecen indicar que el autor original nos odia a nosotros y a nuestros ojos …
  • Gracias. ¿Por qué a veces escribes ~ / .dirname, a veces ~ / dircolors, y a veces ~ / .dircolors? ¿Se supone que son iguales?
  • Th anks. ¿Por qué eval "$(dircolors ~/dircolors)"; en lugar de una forma más directa como dircolors ~/dircolors?
  • @Tim porque dircolors solo imprime la configuración, necesita evaluarlo para que se puedan leer.
  • ¿Para que sean leídos por quién?

Respuesta

Si bien todas las respuestas técnicas son verdaderas, lo consideraría una advertencia informal, que diste un poco los derechos para copiar generosamente o copiar criss + cross … (la mayoría de las veces todos lo hacemos , para que las cosas funcionen inicialmente, ¿eh?)

¿Cómo hacer que sea azul sobre negro, …?

Un buen» des-verde «para volver a los derechos que probablemente desea, es esta declaración:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/ 

Entender mejor lo que hace, si comprende el propósito de mayúsculas + X «ejecución especial», es decir, consulte Wikipedia

Solo es realmente útil cuando se usa con «+» y generalmente en combinación con la opción -R para dar acceso de grupo u otro acceso a un gran árbol de directorios sin configurar el permiso de ejecución en archivos normales (como archivos de texto), lo que normalmente sucedería si solo usara «chmod -R a + rx …

Responder

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 

( source )

Y finalmente, agregue la siguiente línea a su archivo ~/.bashrc 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 

Respuesta

Para solucionar rápidamente el problema, (haga que los archivos que se pueden escribir en otro lugar sean amarillos en nobg):

LS_COLORS+=":ow=01;33" 

Reemplaza 33 por 34 por azul en nobg. Aún más simple, para hacerlo nofg en nobg:

LS_COLORS+=:ow= 

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

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

Para ver las reglas no relacionadas con la extensión de LS_COLORS:

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

sed coloca cada regla en una línea y grep elimina las reglas que comienzan por *.".


Para explore los ls colores 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. } 

Luego

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 256 colores en primer plano y 48;5; para fondo x-term 256 colores. Sin embargo, 256 colores no son compatibles con todos los terminales.

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

Comentarios

  • Encontré soltar LS_COLORS+=':ow=01;33' en mi ~/.zshrc ayudó a deshabilitar el fondo de color para directorios en un repositorio git.Esto está en una máquina con Windows 10 con una distribución Pengwin-WSL. Ahora todos los directorios dentro de git-repo son legibles.

Respuesta

Bueno, esto significa que esta carpeta tiene permisos si ejecuta esto:

сhmod og-w AU_LI

eliminará bgcolor 🙂

Respuesta

Para solucionar este problema, intente ow parámetro para LS_COLORS

Por ejemplo:

~LS_COLORS="fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33" ~ls -l 

ingrese la descripción de la imagen aquí

Ahora agrega el ow (OTHER_WRITABLE) opción

~export LS_COLORS="fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0" ~ls -l 

ingrese la descripción de la imagen aquí ¡¡Bamm !!

Comentarios

Responder

Puede cambiar el tono de verde en Putty para que el texto sea legible.

Abra Putty y vaya a Ventana \ Colors, seleccione «ANSI Green», configúrelo en un verde más oscuro (R: 0 G: 70 B: 0).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *