¿Cómo cambio el color de los directorios con ls en la consola?

166

En mi consola, el color de los directorios es tan azul que es difícil de leer sobre un fondo oscuro.

¿Cómo puedo cambiar las definiciones de color para ls?

rubo77
fuente

Respuestas:

250

Para cambiar los colores de su directorio, abra su ~/.bashrcarchivo con su editor

nano ~/.bashrc

y haga la siguiente entrada al final del archivo:

LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS

Algunas buenas opciones de color (en este caso 0;35es púrpura) son:

Blue = 34
Green = 32
Light Green = 1;32
Cyan = 36
Red = 31
Purple = 35
Brown = 33
Yellow = 1;33
Bold White = 1;37
Light Grey = 0;37
Black = 30
Dark Grey= 1;30

El primer número es el estilo (1 = negrita), seguido de un punto y coma, y ​​luego el número real del color, los posibles estilos (efectos) son:

0   = default colour
1   = bold
4   = underlined
5   = flashing text (disabled on some terminals)
7   = reverse field (exchange foreground and background color)
8   = concealed (invisible)

Los posibles antecedentes:

40  = black background
41  = red background
42  = green background
43  = orange background
44  = blue background
45  = purple background
46  = cyan background
47  = grey background
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
107 = white background

Todos los colores posibles:

31  = red
32  = green
33  = orange
34  = blue
35  = purple
36  = cyan
37  = grey
90  = dark grey
91  = light red
92  = light green
93  = yellow
94  = light blue
95  = light purple
96  = turquoise
97  = white

Incluso se pueden combinar, de modo que un parámetro como:

di=1;4;31;42

en su variable LS_COLORS, los directorios aparecerían en texto rojo subrayado en negrita con fondo verde

Para probar todos estos colores y estilos en su terminal, puede usar uno de:

for i in 00{2..8} {0{3,4,9},10}{0..7}
do echo -e "$i \e[0;${i}mSubdermatoglyphic text\e[00m  \e[1;${i}mSubdermatoglyphic text\e[00m"
done

for i in 00{2..8} {0{3,4,9},10}{0..7}
do for j in 0 1
   do echo -e "$j;$i \e[$j;${i}mSubdermatoglyphic text\e[00m"
   done
done

También puede cambiar otros tipos de archivos al usar el comando ls definiendo cada tipo con:

bd = (BLOCK, BLK)   Block device (buffered) special file
cd = (CHAR, CHR)    Character device (unbuffered) special file
di = (DIR)  Directory
do = (DOOR) [Door][1]
ex = (EXEC) Executable file (ie. has 'x' set in permissions)
fi = (FILE) Normal file
ln = (SYMLINK, LINK, LNK)   Symbolic link. If you set this to ‘target’ instead of a numerical value, the color is as for the file pointed to.
mi = (MISSING)  Non-existent file pointed to by a symbolic link (visible when you type ls -l)
no = (NORMAL, NORM) Normal (non-filename) text. Global default, although everything should be something
or = (ORPHAN)   Symbolic link pointing to an orphaned non-existent file
ow = (OTHER_WRITABLE)   Directory that is other-writable (o+w) and not sticky
pi = (FIFO, PIPE)   Named pipe (fifo file)
sg = (SETGID)   File that is setgid (g+s)
so = (SOCK) Socket file
st = (STICKY)   Directory with the sticky bit set (+t) and not other-writable
su = (SETUID)   File that is setuid (u+s)
tw = (STICKY_OTHER_WRITABLE)    Directory that is sticky and other-writable (+t,o+w)
*.extension =   Every file using this extension e.g. *.rpm = files with the ending .rpm

Una lista más completa está disponible en Bigsoft - Configuración de LS_COLORS .

En algunas distribuciones, es posible que también desee cambiar el color de fondo de ow"( OTHER_WRITABLE) cuyo valor predeterminado no es legible", por ejemplo, a texto azul sin negrita sobre fondo verde.

Podría usar, por ejemplo, LS_COLORS="$LS_COLORS:di=1;33"al final de su .bashrcarchivo, para obtener un bonito texto naranja en negrita legible sobre fondo negro.

Después de modificar su archivo .bashrc, para que los cambios surtan efecto, tendrá que reiniciar su shell o ejecutar source ~/.bashrc.

Nota: puede combinar más comandos con dos puntos , por ejemplo

LS_COLORS=$LS_COLORS:'di=1;33:ln=36' ; export LS_COLORS; ls

Fuente:

rubo77
fuente
3
Esto funciona bien, gracias. Personalmente, me pareció mejor establecer LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSqué muestra los directorios en negrita sobre fondo azul.
isapir
2
Esto no parece funcionar para mí. Parece que hay otro archivo de configuración en algún lugar que se sobrescribe .bashrc: algunos colores funcionan, otros se ven de manera diferente. Las carpetas son verdes, por ejemplo, en lugar de azules, pero los archivos se ven correctamente. ¿Qué podría ser?
Nearoo
1
verifique si está usando bash o sh, y también verifique su archivo .profile en su directorio de inicio. y global/etc/bash.bashrc
rubo77
55
Probablemente quiera modificar otros directorios de escritura y otros de escritura. Pruebe algo más comoLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.
2
eso funcionó para ls, pero ¿cómo cambio el color del directorio en el que estoy, antes del # en el indicador de cmd?
Gaia
31

Muy simple. Agregue estas tres líneas a ~ / .bashrc

$ vi ~/.bashrc
export LS_OPTIONS='--color=auto'
eval "$(dircolors -b)"
alias ls='ls $LS_OPTIONS'

Si desea aplicar los cambios en una sesión bash en ejecución, ejecute:

source ~/.bashrc
Abdel Hegazi
fuente
44
Esto es lo único que funcionó para mí.
solalito
Funcionó para mí, pero necesito ejecutar source ~/.bashrccada vez que inicio sesión. ¿Hay alguna forma de solucionar esto?
Miguel
@Miguel: ¿qué obtienes cuando escribes echo $SHELLdesde el indicador de cmd? Apuesto a que NO lo es /bin/bash. Puede encontrar su activo .profileo .loginy agregar source $HOME/.bashrcal final. Buena suerte.
Shellter
4

LS_COLORS

Esta es una colección de extensiones: asignaciones de colores, adecuadas para usar como su variable de entorno LS COLORS.

rubo77
fuente
1
interesante pero no puedo hacer que esto funcione en ksh.
Herman Toothrot
4

Además de la respuesta de Hegazi, puedes controlar el color del directorio y muchos otros colores usando el comando dircolors. Puede crear un archivo de configuración que esté bien documentado.

Puede crear un archivo .dircolor en su directorio de inicio de la siguiente manera:

dircolors -p > ~/.dircolors

Luego, en su archivo ~ / .bashrc, agregue las líneas

eval "`dircolors -b ~/.dircolors`"
alias ls='ls --color=auto'

Esto creará una variable $ LS_COLORS para bash. La bandera -c se establecerá si para csh. También marca el comando ls para mostrar en color.

Edite el valor del atributo DIR como se indica arriba en el color del archivo ~ / .dircolor para cambiar el color del directorio (o cualquiera de los otros tipos de archivos incluidos para otros colores). También puede cambiar los colores de archivos específicos o definir los suyos.

rana sonriente
fuente
2

La --color=autoopción no funciona para mí usando iTerm2 en mi Mac. Sin -Gembargo, la opción funciona. Puse el siguiente alias en mi ~/.profiley ahora los directorios están coloreados y tienen un final /adjunto:

alias ls='ls -F -G'
John Slavick
fuente
Es porque son utilidades BSD y no coreutils :)
Meeh
0

Este es mi enfoque para el comando ls con opciones de uso común:

agregue las siguientes líneas en un archivo llamado ~ / .alias

alias ll='ls -lhF --color=auto'
alias llt='ls -lht --color=auto'
alias lla='ls -alF --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias ls="ls --color=auto"

agregue las siguientes líneas en ~ / .bashrc

if [ -f ~/.alias ]; then
    . ~/.alias
fi
Jonathan L
fuente
44
solo necesita agregar --color=autoal lsalias - los otros alias heredan el ajuste
Stuart Cardall