Le ls en couleur

Thorbjoern Ravn Andersen (ravn@imada.ou.dk) version française : Pierre Vassellerie (Pierre.Vassellerie@obspm.fr) v1.0f2, 14 Octobre 1995

La commande ls livrée dans la distribution Slackware de Linux permet un affichage en couleur (Slackware 2.0.2 et noyau 1.1.54 de Linux. Ceci marche aussi bien avec agetty, qu’avec mgetty ps). Il se peut que les couleurs par défaut ne vous plaisent pas et que vous prenne l’envie de les trifouiller. Ce document a pour unique but de vous expliquer le principe de fonctionnement et la configuration des couleurs utilisés par cette commande.

Table des matières

1 Comment sélectionner les couleurs? 1

2 Quelles combinaisons de couleurs sont possibles? 2

3 Affichage par type de fichiers 2

4 Comment donner une configuration par défaut 3

5 Commentaires et critiques 5

6 Copyright 5

1 Comment sélectionner les couleurs?

Il existe deux méthodes :

1. Première méthode : utiliser le programme setterm qui s’avère parfait pour une modification rapide et simple de la configuration par défaut. Les manuels et aides de cette commande sont relativement énigmatiques et je ne tenterais en aucune manière de vous les rendre plus clairs ;-). Les sélections sont réalisées par :

             setterm -foreground black -background white -store

où -store signifie que cette configuration est à enregistrer comme configuration par défaut pour la console courante. Il vous faudra recommencer cette opération pour chaque nouvelle console virtuelle, et il semble alors une excellente idée de placer cette ligne dans votre .login (en csh ou tcsh) ou votre .profile (en sh, ksh ou bash). Vous en connaissez désormais autant que moi sur la commande setterm :-).

2. Deuxième méthode : Linux utilise les codes d’échappement ANSI du style

       ESC [ <parametres> m

où ESC est le caractère ASCII 27 et paramètres est aucun ou plusieurs nombres séparés par des pointsvirgules. Par exemple :

       "\033[41;33;1m" qui donne un affichage jaune sur fond rouge
       "\033[30;47m"   qui donne un affichage blanc sur fond noir
       "\033[m"        qui retablit l'affichage par defaut

Ces exemples nécessitent un shell reconnaissant les constructions du type \xxx. Si ce n’est pas le cas, insérez directement un caractère d’échappement directement dans la chaîne. Sous bash/vi tapez Ctrl-V ESC, et

sous tcsh/emacs tapez Ctrl-Q ESC.

2 Quelles combinaisons de couleurs sont possibles?

Ceci est un script en C-shell faisant apparaître sur la console l’ensemble des combinaisons de couleurs :

#!/bin/csh
#
# Affiche les couleurs ANSI
#
set esc="\033["
foreach fore (30 31 32 33 34 35 36 37)
  set line1="\$fore  " line2="    "
  foreach back (40 41 42 43 44 45 46 47)
    set line1="\${line1}\${esc}\${back};\${fore}m Normal  \${esc}0m"
    set line2="\${line2}\${esc}\${back};\${fore};1m \${back} Bold \${esc}0m"
  end
  echo "\$line1\n\$line2"
end

Le numéro de la couleur d’avant-plan est croissant vers la gauche, et le numéro de la couleur d’arrière-plan est donné dans le pavé. Si vous désirez un affichage en gras, ajoutez un 01 comme premier paramètre. Mettez un point-virgule entre chaque paramètre, et mettez l’ensemble de la séquence comme paramètres.

3 Affichage par type de fichiers

La commande ls commence par regarder la définition des associations de couleurs dans le fichier ~/.dir colors et s’il n’existe pas utilise le fichier /etc/DIR COLORS. Ces fichiers contiennent des entrées du style :

    LINK 36;1           # lien symbolique

    FIFO 40;33          # tube
    SOCK 41;01;35       # socket
    BLK 41;33;01        # gestionnaire en mode bloc
    CHR 41;33;01        # gestionnaire en mode caractere
    EXEC 32;1           # fichier avec droit d'execution
    .tar 01;31          # archives et fichiers compresses
    .tgz 01;31
    .zip 01;31
    .z   01;31
    .Z   01;31
    .gz  01;31

les séquences ANSI données en paramètres sont ici données exactement avec la même syntaxe que pour la commande setterm. Modifiez ceci à votre guise, et voyez le résultat d’un ls sur /sbin, /etc et /dev.

Afin que le fichier /etc/DIR COLORS ou ~/.dir colors soit pris en compte, il vous faut rajouter dans

/etc/profile ou ~/.profile (sh/bash) ou /etc/csh.login ou ~/.login (csh/tcsh) la ligne :
 eval `/bin/dircolors`

ATTENTION : cette ligne doit être placée avant une quelconque définition d’alias pour ls. Cette commande lit le fichier /etc/DIR COLORS ou ~/.dir colors et fournit les variables d’environnement LS COLORS et

LS OPTIONS ainsi que les alias ls, dir, vdir, d et v.

4 Comment donner une configuration par défaut

Ceci est réalisé individuellement pour chaque console virtuelle à l’aide de la séquence ANSI :^{1}

        ESC [ 8 ]

qui spécifie les valeurs par défaut des couleurs d’avant et arrière-plan. La séquence ANSI de recomposition des attributs (ESC [ m) permet alors de prendre en compte ces couleurs plutôt que du blanc sur fond noir.

La méthode décrite ici est supposée être pour des systèmes isolés , dans le sens où les logins ne se font que sur la console. Ceci ne marche pas forcément pour des logins se faisant depuis des terminaux distants, des connexions par modem ou d’autres machines, qui dans ce cas ne comprendrait pas les séquences. L’interprétation des codes ANSI est une propriété des consoles Linux et n’existe que dans peu d’autres programmes de terminal.

Si vous êtes sur un système isolé , un bon moyen de faire prendre en compte les couleurs pour chaque console est de modifier le fichier /etc/issue, et d’en voir le résultat en se délogeant. Généralement (et

1. Cette information a été trouvée en parcourant le source du noyau. Je ne peux donc dire s’il s’agit d’un standard.

en particulier dans les distributions Slackware) ce fichier est lu et affiché à chaque reboot. Ainsi si votre /etc/rc.d/rc.S contient (aux environs de la ligne 75) :

  # Initialise /etc/issue et /etc/motd pour qu'il donne la version du noyau utilise
  # ATTENTION : les fichiers /ETC/ISSUE AND /ETC/MOTD sont crees a chaque boot.
  # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pour
  # toute ces fichiers.
  echo ""> /etc/issue
  echo Bienvenue dans le monde merveilleux de Linux \
       `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue
  echo >> /etc/issue

Mettez ces lignes en commentaire ou modifiez comme suit :

...
  # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pour
  # toute ces fichiers
  ESCAPE="<remplacez ici par un seul caractere d'echappement>"
  echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue
...

Mon shell de démarrage ne comprend pas le \033, je dois alors spécifier le code ASCII 27 dans mon script comme indiqué dans le premier paragraphe. La ligne ressemble alors à ESCAPE="^[".

Ce code a pour effet de ramener le curseur en début de fenêtre, changer les couleurs, sauver la sélection et effacer l’écran. Cette modification n’aura un effet qu’au prochain reboot.

Si votre boîte Linux n’est pas isolée , il se peut que certains problèmes apparaissent lors des connexions des utilisateurs distants. Ceci est dû au fait que leur terminal ne comprend pas les séquences d’échappement ANSI.

Vous devez alors ajouter au niveau de l’utilisateur :

.profile (sh/bash) :
  if [ "\$TERM" = "console" ]; then
      echo "\033[37;44m\033[8]"
  fi
ou
.login (csh/tcsh) :
  if ( "\$TERM" == "console" ) then
    echo "\033[37;44m\033[8]"
  endif

Si l’on désire que la modification se fasse pour tous les utilisateurs du système, il suffit alors que root modifie les fichiers /etc/profile ou /etc/csh.login. (Je rappelle une dernière fois que si le shell ne peut interpréter les \0xx (en particulier l’échappement \033), il suffit de remplacer ce dernier par ESC .

5 Commentaires et critiques

L’auteur original de ce document nous dit :

  This is still a rough draft, and English isn't my primary language.
Please feel free to correct me on the above text in order to make it as
clear and correct as possible.  This goes, of course, for the information
provided as well.
Comments and criticism goes to
--
  Thorbjo/rn Ravn Andersen              "...and...Tubular Bells!"
  ravn@imada.ou.dk
  <http://www.imada.ou.dk/~ravn>

et je suis bien d’accord avec lui. Pour la version française, n’hésitez pas une seconde à m’envoyer vos remarques, corrections, ajouts, bouteilles de vin, etc...

6 Copyright

Cette version est placé sous copyright (c)1995 de Pierre Vassellerie.

Comme tous les documents HOWTO, ce document peut être reproduit et distribué dans son intégralité ou partiellement, par quelque moyen physique que ce soit. Il reste malgré tout sujet aux conditions suivantes :

– La mention des copyrights doit être conservée, et la présente section préservée dans son intégralité sur toute copie intégrale ou partielle.

– Les traductions et travaux dérivés doivent être approuvés par les auteurs avant distribution.

– Si vous distribuez ce travail en partie, vous devez mentionnez comment obtenir une version intégrale de ce document et être en mesure de la fournir.

– De petites portions de ce document peuvent être utilisées comme illustrations d’une présentation ou comme remarques sans autorisation préalable si les citations d’usage sont réalisées.

Des exceptions à ces règles peuvent être accordées dans des buts éducatifs, écrivez à l’auteur et demandez. Ces restrictions ont pour but unique de protéger les auteurs et leur travail. Toute aide éducative de ce document sera grandement appréciée.