LS : Modifier les couleurs

La commande ls bien connue accepte une option **--color qui permet de repérer plus facilement les fichiers en fonction de leur utilisation. Les couleurs par défaut, codées en dur dans la commande, sont aisément modifiables.

L'utilisation de la commande ls en couleur ne se limite pas à une simple manipulation esthétique. En effet, il est très pratique de pouvoir différencier rapidement les fichiers "exécutables" des fichier "normaux" et ce d'un simple coup d'oeil.

Bien sûr, la commande ls --color permet d'activer les couleurs simplement (sans parler d'un éventuel alias). Mais pourquoi un répertoire devrait-il être bleu et non jaune ?

OBTENIR LES INFORMATIONS COURANTES

La première étape pour modifier les couleurs consiste à obtenir la configuration courante. Pour ce faire, nous allons créer un fichier contenant (sous une forme lisible) les paramètres en cours :

**dircolors -p > ~/.ls_couleur

Cette commande invoque l'utilitaire **dircolors avec le paramètre **-p permettant de lister la configuration. Nous reroutons la sortie dans un fichier caché **.ls_couleur placé dans le répertoire personnel de l'utilisateur.

Par la même occasion, récupérons le contenu de la variable d'environnement TERM qui pourrait être nécessaire pour la suite des opérations (selon config.) :

**echo $TERM

Notez le résultat de la commande dans un coin. Pour information, cette variable détermine le type de terminal que vous utilisez.

MODIFIER LE FICHIER

Avec votre éditeur préféré, ouvrez le fichier .ls_couleur fra"chement créé. Comme à l'accoutumée, les lignes débutant avec le symbole # (dièse) sont des commentaires.

Dans la première partie du fichier, vous devez trouver un certain nombre de mentions TERM suivies d'un mot (linux, console, xterm, vt100, etc). Si le résultat de la commande echo $TERM ne figure pas dans la liste, ajoutez-le. Dans notre cas, linux-lat a dû être ajouté pour que les modifications du fichier soient prises en compte.

Il existe deux façons d'associer une couleur à un fichier. La première consiste à déterminer une couleur en fonction du type de fichier. Les types valides sont les suivants :

NORMAL : il ne s'agit pas d'un type mais plus exactement de la valeur par défaut

FILE : fichier normal

DIR : répertoire

LINK : lien symbolique

FIFO : tuyaux

SOCK : socket

BLK : fichier périphérique en mode bloque

CHR : fichier périphérique en mode caractères

ORPHAN : lien symbolique orphelin (pointant vers un fichier inexistant)

EXEC : fichier possédant une permission d'exécution

La seconde manière de procéder se rapporte à l'extension des fichiers. Il est possible d'associer une couleur en fonction du type « annoncé » par l'extension. Attention, sous Linux le nom d'un fichier ne renseigne pas véritablement sur son type. Il est tout à fait possible d'appeler un binaire toto.jpg ou encore un fichier jpeg, image.bmp.

Quelle que soit la manière de procéder, la syntaxe reste toujours la même. Il suffit de faire suivre le type de fichier ou l'extension par un ou plusieurs codes de couleur.

Exemple :

FILE 00 # Fichiers normaux sans attribut spécifique

DIR 01;34 # Répertoire en gras, couleur bleue

.tar 01;31 # Fichiers TAR en gras, couleur rouge

.tgz 01;31 # idem

.arj 01;31 # idem

LES CODES DE COULEURS

Le codage des attributs et des couleurs est simple. Nous avons, tout d'abord, les codes d'attributs :

00=aucun, 01=gras, 04=souligné, 05=clignotant, 07=inversé, 08=caché

Voyons maintenant les différentes couleurs d'avant plan :

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

Enfin, à une dizaine près, les codes de couleurs d'arrière plan sont identiques :

40=noir, 41=rouge, 42=vert, 43=jaune, 44=bleu, 45=magenta, 46=cyan, 47=blanc

Il est possible de combiner plusieurs de ces codes comme dans notre exemple pour obtenir plus de couleurs (gras + couleur).

Quelques limitations matérielles empêchent, cependant, certaines combinaisons. Par exemple, il est impossible d'obtenir un arrière plan en gras.

UTILISATION DU NOUVEAU FICHIER

Une fois notre fichier de configuration personnalisé à souhait, il faut le faire interpréter par l'utilitaire dircolors. Ainsi, nous pourrons obtenir la définition d'une variable d'environnement directement utilisable par ls. Cette variable s'appelle LS_COLORS.

Tapez la commande suivante :

dircolor ~/.ls_couleur

Quelque chose comme ceci devrait s'afficher :

**LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:
or=40;31;01:ex=01;33:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:
*.z=01;31:*.Z=01;31:*.gz=01;31:*.deb=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.ppm=01;
35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.mpg=01;37:*.avi=01;37:*.gl=01;37:*.d
l=01;37:';

**export LS_COLORS

C'est la déclaration de la variable LS_COLORS telle que vous auriez du la saisir sans utiliser l'utilitaire dircolors. Ce dernier accepte deux paramètres permettant de choisir la syntaxe de la déclaration en fonction du shell que vous utilisez : -b pour le shell Bash et -c pour csh.

Pour activer nos choix de couleur, nous utiliserons la commande :

eval `dircolors ~/.ls_couleur`

Bien sûr, pour prendre en compte ces choix à chaque démarrage, cette ligne devra être incluse dans votre fichier .profile par exemple.

DERNIER POINT

Voici un petit script shell tiré du colour_ls Howto écrit par Thorbjørn Ravn Andersen permettant d'afficher l'ensemble des couleurs/attributs et leurs codes :

**#!/bin/bash

*esc="\033["

**echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"

**echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"

**for fore in 30 31 32 33 34 35 36 37; do

** line1="$fore "

** line2=" "

** for back in 40 41 42 43 44 45 46 47; do

** line1="${line1}${esc}${back};${fore}m Normal ${esc}0m"

** line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m"

** done

** echo -e "$line1\n$line2"

**done

A présent, vous devez être capable de changer les couleurs de la commande ls selon vos goûts et vos besoins. N'oubliez pas cependant de rester dans les limites du supportable. Les répertoires rouges clignotants par exemple sont rapidement fatigants ; -) n


© Copyright 2000 Diamond Editions/Linux magazine France. - Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1or any later version published by the Free Software Foundation; A copy of the license is included in the section entitled "GNU Free Documentation License".