Le ls en couleur
Thorbjoern Ravn Andersen (
[email protected])
version francaise : Pierre Vassellerie (Pierre.Vassel-
[email protected])
v1.0f2, 14 Octobre 1995
La commande ls livree 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 defaut 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 utilises par cette commande.
11.. CCoommmmeenntt sseelleeccttiioonnnneerr lleess ccoouulleeuurrss ??
Il existe deux methodes :
1. Premiere methode : utiliser le programme _s_e_t_t_e_r_m qui s'avere
parfait pour une modification rapide et simple de la configuration
par defaut. Les manuels et aides de cette commande sont
relativement enigmatiques et je ne tenterais en aucune maniere de
vous les rendre plus clairs ;-).
Les selections sont realisees par :
setterm -foreground black -background white -store
ou _-_s_t_o_r_e signifie que cette configuration est a enregistrer comme
configuration par defaut pour la console courante. Il vous faudra
recommencer cette operation pour chaque nouvelle console virtuelle, et
il semble alors une excellente idee de placer cette ligne dans votre
.login (en csh ou tcsh) ou votre .profile (en sh, ksh ou bash). Vous
en connaissez desormais autant que moi sur la commande _s_e_t_t_e_r_m :-).
2. Deuxieme methode : Linux utilise les codes d'echappement ANSI du
style
ESC [ <parametres> m
ou ESC est le caractere ASCII 27 et _p_a_r_a_m_e_t_r_e_s est aucun ou plusieurs
nombres separes par des points-virgules. 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 necessitent un shell reconnaissant les constructions du
type \xxx. Si ce n'est pas le cas, inserez directement un caractere
d'echappement directement dans la chaine. Sous bash/vi tapez Ctrl-V
ESC, et sous tcsh/emacs tapez Ctrl-Q ESC.
22.. QQuueelllleess ccoommbbiinnaaiissoonnss ddee ccoouulleeuurrss ssoonntt ppoossssiibblleess ??
Ceci est un script en C-shell faisant apparaitre 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="\*(dRfore " line2=" "
foreach back (40 41 42 43 44 45 46 47)
set line1="\*(dR{line1}\*(dR{esc}\*(dR{back};\*(dR{fore}m Normal \*(dR{esc}0m"
set line2="\*(dR{line2}\*(dR{esc}\*(dR{back};\*(dR{fore};1m \*(dR{back} Bold \*(dR{esc}0m"
end
echo "\*(dRline1\n\*(dRline2"
end
______________________________________________________________________
Le numero de la couleur d'avant-plan est croissant vers la gauche, et
le numero de la couleur d'arriere-plan est donne dans le pave. Si
vous desirez un affichage en gras, ajoutez un 01 comme premier
parametre. Mettez un point-virgule entre chaque parametre, et mettez
l'ensemble de la sequence comme _p_a_r_a_m_e_t_r_e_s.
33.. AAffffiicchhaaggee ppaarr ttyyppee ddee ffiicchhiieerrss
La commande ls commence par regarder la definition 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 entrees 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 sequences ANSI donnees en parametres sont ici donnees exactement
avec la meme syntaxe que pour la commande _s_e_t_t_e_r_m. Modifiez ceci a
votre guise, et voyez le resultat d'un _l_s 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`
AATTTTEENNTTIIOONN : cette ligne doit etre placee avant une quelconque defini-
tion 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.
44.. CCoommmmeenntt ddoonnnneerr uunnee ccoonnffiigguurraattiioonn ppaarr ddeeffaauutt
Ceci est realise individuellement pour chaque console virtuelle a
l'aide de la sequence ANSI : (-- Cette information a ete trouvee en
parcourant le source du noyau. Je ne peux donc dire s'il s'agit d'un
standard.--)
ESC [ 8 ]
qui specifie les valeurs par defaut des couleurs d'avant et arriere-
plan. La sequence ANSI de recomposition des attributs (ESC [ m) per-
met alors de prendre en compte ces couleurs plutot que du blanc sur
fond noir.
La methode decrite ici est supposee etre pour des systemes "isoles",
dans le sens ou les logins ne se font que sur la console. Ceci ne
marche pas forcement 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 sequences. L'interpretation des codes
ANSI est une propriete des consoles Linux et n'existe que dans peu
d'autres programmes de terminal.
Si vous etes sur un systeme "isole", 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 resultat en se delogeant. Generalement (et
en particulier dans les distributions Slackware) ce fichier est lu et
affiche a 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 demarrage ne comprend pas le \033, je dois alors
specifier le code ASCII 27 dans mon script comme indique dans le
premier paragraphe. La ligne ressemble alors a ESCAPE="^[".
Ce code a pour effet de ramener le curseur en debut de fenetre,
changer les couleurs, sauver la selection et effacer l'ecran. Cette
modification n'aura un effet qu'au prochain reboot.
Si votre "boite Linux" n'est pas "isolee", il se peut que certains
problemes apparaissent lors des connexions des utilisateurs distants.
Ceci est du au fait que leur terminal ne comprend pas les sequences
d'echappement ANSI.
Vous devez alors ajouter au niveau de l'utilisateur :
______________________________________________________________________
if [ "\*(dRTERM" = "console" ]; then
echo "\033[37;44m\033[8]"
fi
ou
if ( "\*(dRTERM" == "console" ) then
echo "\033[37;44m\033[8]"
endif
______________________________________________________________________
Si l'on desire que la modification se fasse pour tous les utilisateurs
du systeme, il suffit alors que root modifie les fichiers /etc/profile
ou /etc/csh.login. (Je rappelle une derniere fois que si le shell ne
peut interpreter les \0xx (en particulier l'echappement \033), il
suffit de remplacer ce dernier par "ESC".
55.. CCoommmmeennttaaiirreess eett ccrriittiiqquueess
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!"
[email protected]
<
http://www.imada.ou.dk/~ravn>
et je suis bien d'accord avec lui. Pour la version francaise,
n'hesitez pas une seconde a m'envoyer vos remarques, corrections,
ajouts, bouteilles de vin, etc...
66.. CCooppyyrriigghhtt
Cette version est place sous copyright (c)1995 de Pierre Vassellerie.
Comme tous les documents HOWTO, ce document peut etre reproduit et
distribue dans son integralite ou partiellement, par quelque moyen
physique que ce soit. Il reste malgre tout sujet aux conditions
suivantes :
+o La mention des copyrights doit etre conservee, et la presente
section preservee dans son integralite sur toute copie integrale ou
partielle.
+o Les traductions et travaux derives doivent etre approuves par les
auteurs avant distribution.
+o Si vous distribuez ce ttrraavvaaiill en partie, vous devez mentionnez
comment obtenir une version integrale de ce document et etre en
mesure de la fournir.
+o De petites portions de ce document peuvent etre utilisees comme
illustrations d'une presentation ou comme remarques sans
autorisation prealable si les citations d'usage sont realisees.
Des exceptions a ces regles peuvent etre accordees dans des buts
educatifs, ecrivez a l'auteur et demandez. Ces restrictions ont pour
but unique de proteger les auteurs et leur travail. Toute aide
educative de ce document sera grandement appreciee.