Que signifient les différentes couleurs dans ls?

292
Que signifient les différentes couleurs de la commande ls d'Ubuntu? Par exemple, lorsque je tape la commande ls dans l'un de mes dossiers, je reçois l'un des fichiers en vert clair, l'autre (qui est un dossier) en bleu avec une surbrillance verte.

Que signifient ces couleurs et qu'il existe un manuel sur toutes les couleurs?

    
posée Rafid 14.12.2010 - 09:15
la source

5 réponses

299
  • Bleu : répertoire
  • Vert : fichier de données exécutable ou reconnu
  • Bleu ciel : fichier de liens symbolique
  • Jaune sur fond noir : périphérique
  • Pink : fichier d’image graphique
  • Rouge : fichier d’archive
  • Rouge avec fond noir : lien rompu

Pour votre information:

  • Pour désactiver la couleur, vous devez commenter les lignes suivantes dans .bashrc .

    # enable color support of ls and also add handy aliases
    #if [ -x /usr/bin/dircolors ]; then
    #    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    #    alias ls='ls --color=auto'
    #    #alias dir='dir --color=auto'
    #    #alias vdir='vdir --color=auto'
    #
    #    alias grep='grep --color=auto'
    #    alias fgrep='fgrep --color=auto'
    #    alias egrep='egrep --color=auto'
    #fi
    
  • Aussi, si vous voulez voir vos propres significations de couleur bash, copiez / collez les codes suivants dans votre terminal.

      
    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
    {      
      IFS=:     
      for i in $LS_COLORS     
      do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
      done       
    } 
    

    Sortie:

Remarque:

  • Pour plus d'informations, tapez man dir_colors dans le terminal.
réponse donnée karthick87 14.12.2010 - 09:18
la source
84

Vous pouvez trouver les couleurs utilisées par ls en regardant la variable $LS_COLORS :

  • Turquoise: fichiers audio 1
  • Bright Red: archives et fichiers compressés 2
  • Purple: images et vidéos 3

De plus, les fichiers sont colorés par attributs:

  1. aac, au, flac, mid, midi, mka, mp3, mpc, ogg, ra, wav, axa, oga, spx, xspf.

  2. tar, tgz, arj, taz, lzh, lzma, tlz, tz, zz, z, z, dz, gz, lz, xz, bz2, bz, tbz, tbz2, tz, deb, rpm, jar, rar, ace, zoo, cpio, 7z, rz.

  3. jpg, jpeg, gif, bmp, pbm, pgm, ppm, tga, xbm, xpm, tif, tiff, png, svg, svgz, mng, pcx, mov, mpg, mpeg, m2v, mkv, ogm, mp4, m4v, mp4v, vob, qt, nuv, wmv, asf, rm, rmvb, flc, avi, fli, flv, dl, xcf, xwd, yuv, cgm, emf, axv, anx, ogv, OGX.

Toutes ces informations sont contenues dans la sortie de dircolors --print-database , mais leur formatage est plutôt illisible.

Voici une explication technique de ce qui se passe:

Exemple:

CHR 40;33;01

Le code couleur est composé de trois parties:

  • La première partie avant le point-virgule représente le style du texte.

    • 00 = aucun, 01 = gras, 04 = trait de soulignement, 05 = clignote, 07 = inverse, 08 = caché.
  • La deuxième et la troisième partie sont la couleur et la couleur de fond:

    • 30 = noir, 31 = rouge, 32 = vert, 33 = jaune, 34 = bleu, 35 = magenta, 36 = cyan, 37 = blanc.

Chaque partie peut être omise, en partant de la gauche. c'est-à-dire "01" signifie gras, "01; 31" signifie gras et rouge. Et vous obtiendrez que votre terminal imprime en couleur en échappant à l'instruction avec [ et en terminant par un m . 33, ou 1B en hexadécimal, est le signe ASCII "ESCAPE" (un caractère spécial dans le jeu de caractères ASCII). Exemple:

"[1;31mHello World[m"

Imprime "Hello World" en rouge vif.

La commande ls avec l'argument --color=auto (sur Ubuntu, ls est un alias pour ls --color=auto ) parcourt tous les noms de fichiers et essaie d'abord de faire correspondre différents types, comme Executable, Pipe, etc. . Il essaie ensuite de faire correspondre les expressions régulières comme * .wav et affiche le nom de fichier résultant, inclus dans ces instructions de changement de couleur pour bash.

    
réponse donnée Stefano Palazzo 14.12.2010 - 09:57
la source
27

Si vous tapez dircolors ( echo $LS_COLORS également) à partir de la commande line vous obtiendrez une liste de codes et de couleurs pour de nombreux types de fichiers en 1 ligne. dircolors --print-database leur montre 1 ligne à la fois. Voici une courte liste (j'ai essayé de mettre les plus importantes). Au bas, il y a une explication sur ce que représentent les différents codes à la fin de chaque ligne:

NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
# audio formats
.aac 00;36
.flac 00;36
.ogg 00;36
  • Codes d'attributs: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Codes couleur du texte: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Codes couleur d'arrière-plan: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Si vous voulez jouer avec ceci, voici un exemple sur la façon de définir une couleur pour un fichier:

export LS_COLORS=$LS_COLORS:"*.ogg=01;35":"*.mp3=01;35"  

Cela définira *.ogg et .mp3 à bold magenta . Et si vous le mettez dans votre fichier .bashrc , il deviendra permanent.

    
réponse donnée Rinzwind 14.09.2011 - 10:25
la source
15

Aucune des réponses ne comprend les options de 256 couleurs des dernières versions d’Ubuntu. J'ai une couleur déficiente (certaines couleurs me causent des problèmes les unes aux autres), donc le répertoire bleu par défaut sur le noir est vraiment difficile à lire. Ce qui suit est ma recherche pour changer cela.

Tapez dircolors -p |less pour voir votre code couleur actuel.

La valeur par défaut de .bashrc doit déjà être configurée non seulement pour tirer parti du code couleur du système, mais aussi de ~ / .dircolors, vous devez donc enregistrer la sortie dircolors dans .dircolor pour pouvoir utiliser cette commande. dircolors -p > ~/.dircolors

Alternative: récupère une couleur très similaire à 256 dircolors de seebi Solarized projet.

Saisissez ce script Colortest et exécutez-le avec la commande colortest -w pour que vous puissiez voir toutes les couleurs à la fois. Choisir une couleur. J'aime le orange # 208. Je veux que ce soit la couleur du texte, donc en utilisant cette information sur les codes couleur étendus, je peux appliquer cela.

Vous avez donc une couleur, maintenant quoi. Nous devons d'abord créer la chaîne.

Le premier numéro sera un code d’attribut, très probablement 00, mais si vous voulez qu’il clignote, passez à 05:

  

Choisissez un code d’attribut: 00 = aucun 01 = gras 04 = soulignement 05 = clignotement 07 = retour 08 = caché

Ensuite, sélectionnez " ;38;5; " dans ce code d’attribut pour indiquer la couleur de votre texte pour obtenir 00; 38; 5; puis ajoutez votre couleur. J'ai choisi 208 alors j'ai 00;38;5;208 .

Si vous souhaitez également placer un arrière-plan, choisissez une autre couleur (disons 56) avec le script Colortest, puis ajoutez ;48;5; pour l'arrière-plan et 56 pour la couleur afin d'obtenir une chaîne totale de 00;38;5;208;48;5;56 .

Maintenant que vous l'avez, que faites-vous avec?

vim ~/.dircolors et trouvez la section que vous voulez changer (pour moi, DIR) à la chaîne que nous avons déterminée ci-dessus "00; 38; 5; 208".

Cela ne s'appliquera pas immédiatement, vous devrez charger la configuration. Utilisez dircolors ~/.dircolors dans le code get pour définir votre variable LS_COLORS. Vous pouvez simplement coller cela dans votre session de terminal ou vous pouvez fermer votre terminal et le rouvrir. Vous pouvez également transférer cela dans un fichier et l'exécuter en tant que script shell.

Vous pouvez faire cette même procédure avec 16 couleurs. Vous n'avez pas besoin de la spéciale 38, 5 ou 48; 5 choses. Il suffit de lancer les chiffres dans la chaîne et de profiter de la simplicité.

Merci à Dan et seebi pour leurs notes et leur code.

    
réponse donnée flickerfly 22.03.2013 - 21:45
la source
12

Cet article s’ajoute à la réponse de Karthick87 .

Avec la configuration par défaut

  • Texte non coloré (blanc) : fichier sans fichier ou (par exemple, autorisations dans la sortie de ls -l )
  • Gras bleu : répertoire
  • Cyan en gras : lien symbolique
  • Gras vert : fichier exécutable
  • Gras rouge : fichier d’archive
  • Magenta en gras : fichier image, vidéo, graphique, etc. ou socket ou
  • Cyan : fichier audio
  • Jaune sur fond noir : pipe (AKA FIFO)
  • Gras jaune avec un arrière-plan noir : périphérique de bloc ou périphérique de caractère
  • Gras rouge sur fond noir : lien symbolique orphelin ou fichier manquant
  • Non coloré avec un arrière-plan rouge : fichier d’ID utilisateur défini
  • Noir avec fond jaune : fichier ID-groupe-de-groupes
  • Noir avec fond rouge : fichier avec capacité
  • Blanc avec fond bleu : répertoire bloqué
  • Bleu avec fond vert : répertoire accessible en écriture
  • Noir avec fond vert : répertoire inscriptible et inscriptible par d'autres éléments

Script pour afficher les couleurs

#!/bin/bash
# For LS_COLORS, print type and description in the relevant color.

IFS=:
for ls_color in $LS_COLORS; do
    color="${ls_color#*=}"
    type="${ls_color%=*}"

    # Add descriptions for named types.
    case "$type" in
    bd) type+=" (block device)" ;;
    ca) type+=" (file with capability)" ;;
    cd) type+=" (character device)" ;;
    di) type+=" (directory)" ;;
    do) type+=" (door)" ;;
    ex) type+=" (executable file)" ;;
    fi) type+=" (regular file)" ;;
    ln) type+=" (symbolic link)" ;;
    mh) type+=" (multi-hardlink)" ;;
    mi) type+=" (missing file)" ;;
    no) type+=" (normal non-filename text)" ;;
    or) type+=" (orphan symlink)" ;;
    ow) type+=" (other-writable directory)" ;;
    pi) type+=" (named pipe, AKA FIFO)" ;;
    rs) type+=" (reset to no color)" ;;
    sg) type+=" (set-group-ID)" ;;
    so) type+=" (socket)" ;;
    st) type+=" (sticky directory)" ;;
    su) type+=" (set-user-ID)" ;;
    tw) type+=" (sticky and other-writable directory)" ;;
    esac

    # Separate each color with a newline.
    if [[ $color_prev ]] && [[ $color != $color_prev ]]; then
        echo
    fi

    printf "\e[%sm%s\e[m " "$color" "$type"

    # For next loop
    color_prev="$color"
done
echo

Sortie avec la configuration par défaut:

Sortie avec ma configuration (dircolors personnalisés et thème de terminal Solarized personnalisé):

J'ai reçu les descriptions de dircolors -p et man dir_colors , et j'ai comblé les lacunes avec mes propres recherches.

Les couleurs et les descriptions sont les mêmes de 14.04 à 17.10.

    
réponse donnée wjandrea 17.02.2017 - 22:05
la source

Lire d'autres questions sur les étiquettes