Modifier les couleurs de la commande ls
Introduction
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 .ls_couleur
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 :
dircolors ~/.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/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
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 ; -)