Comment changer la couleur des répertoires avec ls dans la console?

166

Sur ma console, la couleur des répertoires est tellement bleue qu'il est difficile de lire sur un fond sombre.

Comment puis-je changer les définitions de couleurs pour ls?

rubo77
la source

Réponses:

250

Pour changer les couleurs de votre répertoire, ouvrez votre ~/.bashrcfichier avec votre éditeur

nano ~/.bashrc

et entrez l'entrée suivante à la fin du fichier:

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

Quelques bons choix de couleurs (dans ce cas, 0;35c'est violet):

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

Le premier nombre est le style (1 = gras), suivi d'un point-virgule, puis le nombre réel de couleurs, les styles possibles (effets) sont:

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)

Les milieux possibles:

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

Toutes les couleurs possibles:

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

Ceux-ci peuvent même être combinés, de sorte qu'un paramètre comme:

di=1;4;31;42

dans votre variable LS_COLORS, les répertoires apparaîtront en caractères gras soulignés de rouge, sur fond vert!

Pour tester toutes ces couleurs et styles dans votre terminal, vous pouvez utiliser l'un des éléments suivants:

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

Vous pouvez également modifier d'autres types de fichiers lorsque vous utilisez la commande ls en définissant chaque type avec:

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

Une liste plus complète est disponible sur Bigsoft - Configuration de LS_COLORS .

Sur certaines distributions, vous pouvez également modifier la couleur d'arrière-plan de ow"( OTHER_WRITABLE) dont la valeur par défaut est illisible", par exemple en un texte bleu non gras sur un fond vert.

Vous pouvez par exemple utiliser, LS_COLORS="$LS_COLORS:di=1;33"à la fin de votre .bashrcfichier, un texte orange clair et lisible sur fond noir.

Après avoir modifié votre fichier .bashrc, pour que les modifications prennent effet, vous devrez redémarrer votre shell ou exécuter source ~/.bashrc.

Remarque: vous pouvez combiner davantage de commandes avec deux points , par exemple

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

La source:

rubo77
la source
3
Cela fonctionne bien, merci. Personnellement, j’ai trouvé préférable de définir LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSles répertoires en gras blanc sur fond bleu.
Isapir
2
Cela ne semble pas fonctionner pour moi. Il semble qu'il y ait un autre fichier de configuration quelque part qui écrase .bashrc: certaines couleurs fonctionnent, d'autres ont un aspect différent. Les dossiers sont verts par exemple au lieu de bleu, mais les fichiers ont une apparence correcte. Qu'est ce que ça pourrait être?
Nearoo
1
vérifiez si vous utilisez bash ou sh, ainsi que votre fichier .profile dans votre répertoire personnel. et global/etc/bash.bashrc
rubo77
5
Vous voudrez probablement modifier d’autres répertoires en écriture inscriptibles et collants. Essayez quelque chose qui ressemble davantage àLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.
2
cela a fonctionné pour ls, mais comment puis-je changer la couleur du répertoire dans lequel je me trouve avant le # dans l'invite de commande?
Gaia
31

Très simple. Ajoutez ces trois lignes à ~ / .bashrc

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

Si vous souhaitez appliquer les modifications dans une session bash en cours d'exécution, exécutez:

source ~/.bashrc
Abdel Hegazi
la source
4
C'est la seule chose qui a fonctionné pour moi.
solalito
Cela a fonctionné pour moi, mais je dois exécuter source ~/.bashrcchaque fois que je me connecte. Y a-t-il un moyen de résoudre ce problème?
Miguel
@ Miguel: qu'est-ce que vous obtenez lorsque vous tapez à echo $SHELLpartir de l'invite cmd? Je parie que ce n'est pas /bin/bash. Vous pouvez trouver votre actif .profileou .loginet ajouter source $HOME/.bashrcà la fin. Bonne chance.
shellter
4

LS_COLORS

Il s’agit d’une collection d’extensions: des mappages de couleurs, que vous pouvez utiliser comme variable d’environnement LS COLORS.

rubo77
la source
1
intéressant mais je ne peux pas faire ce travail en ksh.
Herman Toothrot
4

En complément de la réponse de Hegazi, vous pouvez contrôler la couleur du répertoire et de nombreuses autres couleurs à l’aide de la commande dircolors. Vous pouvez créer un fichier de configuration bien documenté.

Vous pouvez créer un fichier .dircolor dans votre répertoire personnel comme suit:

dircolors -p > ~/.dircolors

Puis, dans votre fichier ~ / .bashrc, ajoutez les lignes

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

Cela créera une variable $ LS_COLORS pour bash. Le drapeau -c définira si pour csh. Il marque également la commande ls à afficher en couleur.

Modifiez la valeur de l'attribut DIR comme ci-dessus dans la couleur du fichier ~ / .dircolor pour modifier la couleur du répertoire (ou l'un des autres types de fichier inclus pour les autres couleurs). Vous pouvez également modifier les couleurs de fichiers spécifiques ou définir les vôtres.

sourire
la source
2

L' --color=autooption ne fonctionne pas pour moi avec iTerm2 sur mon Mac. L' -Goption fonctionne bien. Je mets les alias suivants dans mes ~/.profilerépertoires et maintenant sont colorés et sont suivis d'un fin /:

alias ls='ls -F -G'
John Slavick
la source
C'est parce que ce sont des utils BSD et non pas des coreutils :)
Meeh
0

Voici mon approche pour la commande ls avec les options couramment utilisées:

ajoute les lignes suivantes dans un fichier nommé ~ / .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"

ajoutez les lignes suivantes dans ~ / .bashrc

if [ -f ~/.alias ]; then
    . ~/.alias
fi
Jonathan L
la source
4
il vous suffit d'ajouter --color=autoà l' lsalias - les autres alias héritant du paramètre
Stuart Cardall