Space Menu Home Downloads Newbie Area Documentation Knowledge Base E-Training Forum Blogs Chat RPMs Farm Linux Events
HistoryHistory |
View
Code | XML |
Help
XWiki Syntax |



Les fichiers de configuration du shell Bash

Sommaire :

NB : Je ne prétends pas du tout traiter ici de la totalité des questions posées par les fichiers de configuration du shell Bash sous Linux, mais seulement donner quelques éléments partiels qui valent pour mon système Mandriva 2006 dans son état actuel et qui n'apparaissent pas toujours très clairement dans les diverses documentations… Apparemment dans d'autres distributions Linux les choses peuvent être un peu différentes de ce qui est décrit ici. Ce qui suit devrait vous aider à intervenir à bon escient sur votre système et vous permettre de modifier le contenu des fichiers de configuration en étant pleinement conscients de ce que vous faites.

Différences entre les fichiers de configuration

Les fichiers de configuration du shell se distinguent de quatre façons (au moins) :

I. Par les utilisateurs concernés

  • les uns valent pour tous les utilisateurs du système :
  • /etc/profile
  • /etc/bashrc
  • l'ensemble des fichiers dont les noms sont de la forme '*.sh' contenus dans le répertoire /etc/profile.d. A titre d'exemple dans mon système il s'agit de l'ensemble de fichiers suivants : 10lang.sh alias.sh configure_keyboard.sh gconf.sh glib20.sh gnome-ssh-askpass.sh inputrc.sh jre-1.4.2_09.sh kde3.sh keychain.sh less.sh mc.sh menu-xdg.sh msec.sh python.sh qtdir3.sh screen.sh ssh-client.sh tmpdir.sh xhost.sh

    Toute modification apportée à l'un de ces fichiers vaut pour tout utilisateur du système.
  • d'autres sont propres à un utilisateur :
  • ~/.bash_profile
  • ~/.bashrc
  • ~/.bash_logout

    Les modifications apportées à ces fichiers ne concernent qu'un seul utilisateur (une modification de '/home/toto/.bashrc' n'aura de conséquence que pour l'utilisateur 'toto'). Rappel : '~' représente le répertoire personnel d'un utilisateur, en fait la valeur de la variable $HOME, pour l'utilisateur 'toto' on aura par défaut : '~' = '/home/toto/'.

II. Par le type de shell qui les lit en démarrant

- shell interactif ou non interactif

Lorsque le shell exécute un script, il lit des lignes de code dans un fichier, il n'est pas alors, en général, 'à l'écoute' de ce que vous tapez en console : on dit dans ce cas que le shell est non interactif.

Lorsque, au contraire, vous lancez des commandes pour le shell dans n'importe quelle console, vous êtes dans un shell interactif.

Nous nous intéressons ici uniquement aux shells interactifs. Les fichiers de configuration que nous évoquons ne sont pas en général lus par les shells non interactifs.

- shell de connexion (en anglais 'login shell') ou shell sans connexion ('non login shell')

Le shell varie selon le type de la console dans laquelle vous l'invoquez. Il faut distinguer à cet égard :

  • Les consoles 'tty' (que je désigne ainsi parce qu'elles correspondent dans le répertoire '/dev' à des 'fichiers spéciaux' '/dev/ttyn' (où 'n' est un nombre), pour mémoire : 'tty' vient du mot 'TeleTYpe'), ces consoles, donc, excusez la longue parenthèse, sont celles sur lesquelles vous vous rendez par la combinaison de touches Alt+Ctrl+Fn (avec Fn variant de F1 à F6).
    Pour exécuter une commande sur de telles consoles vous devez d'abord vous connecter (vous 'loguer') en tapant votre nom d'utilisateur (le 'login') et votre mot de passe.

    Les shells que vous exécutez alors sont des shells de connexion ('login shells').

  • Les consoles que j'appellerai ici consoles graphiques, que vous invoquez à partir de votre environnement X (autrement dit sous KDE, GNOME, IceWM...) soit en cliquant sur une icône du bureau, soit en cliquant sur une icône ou un élément de menu d'une console du même type déjà ouverte, soit encore en invoquant en ligne de commande à partir d'une console du même type (et non pas d'une consonne 'tty') un utilitaire approprié tel que Konsole, xterm, rXVT etc. Dans '/dev' ces consoles sont représentées par des fichiers '/dev/pts/n' où 'n' est un nombre ('pts' pour 'pseudo-terminaux'='Pseudo-TerminalS' en anglais).
    Lorsque vous ouvrez une telle console vous n'avez pas à vous connecter, à fournir 'login' et mot de passe.

    Les shells qui interprètent des commandes lancées sur de telles consoles sont des shells sans connexion ('non login' shells).
'login shells' et 'non login shells' sont des shells interactifs.

Parmi les fichiers de configuration mentionnés plus haut, les suivants ne sont lus QUE par des 'login shells' :
  • /etc/profile/
  • ~/.bash_profile
  • ~/.bash_logout
Toute modification que vous y introduirez ne sera donc d'aucun effet lorsque vous vous trouverez sous une console graphique, où les commandes que vous lancerez seront toujours lues par un 'non login' shell.

Tous les autres fichiers mentionnés plus haut (/etc/bashrc ou ~/.bashrc et les fichiers '*.sh' de '/etc/profile.d') sont en revanche lus et par les login shells et par les non login shells : toute modification que vous y introduirez vaudra donc quelle que soit la console que vous utiliserez.

III. Par le fait que le shell concerné est lui-même ou non un processus enfant d'une autre instance du shell

Les fichiers '/etc/profile' et '~/.bash_profile' ne sont lus qu'au premier lancement d'un login shell, si ensuite Bash s'appelle lui-même et lance un 'shell enfant' ces fichiers ne sont pas lus une seconde fois. Au contraire '/etc/bashrc' et '~/.bashrc' sont lus à chaque nouvel appel du shell.

De même '~/.bash_logout' est lu en fin de connexion par un shell qui n'est pas lui-même enfant d'un autre shell : il est donc lu au moment où vous quittez le shell complètement (et en général il va effacer le contenu de l'écran).

IV. Par la variété de shell utilisée

Tous les fichiers de configuration dont il est question ici sont lisibles par un shell Bash mais tous ne le sont pas par d'autres types de shells, attention, pensez donc à vérifier ce qu'il en est si vous avez recours à d'autres sortes de shells (Korn shell, C-shell etc.).

Comment se rendre compte de tout cela par soi-même

Pour bien vous rendre compte de tout cela un moyen très intuitif consiste à modifier chacun des fichiers :
/etc/profile
~/.bash_profile
/etc/bashrc
~/.bashrc
~/.bash_logout

de la façon suivante : mettre au tout début de chaque fichier une ligne de ce type

echo /chemin/nom_du_fichier DEBUT

et en dernière ligne ceci :

echo /chemin/nom_du_fichier FIN

(naturellement vous mettrez à la place de '/chemin/nom_du_fichier' l'information appropriée pour chaque fichier, par exemple '/etc/profile' pour le premier fichier, /home/toto/.bash_profile pour le second si votre nom d'utilisateur est 'toto' etc.).

Ensuite, lancez le shell, dans une console 'tty', puis dans une console graphique. Relancez-le plusieurs fois par des commandes 'bash' successives (tapez 'bash' puis ENTREE, ce qui lancera un processus shell enfant), puis sortez par des commandes 'exit' successives, jusqu'à ce que vous vous retrouviez dans l'état initial, regardez bien tout ce qui s'affiche et vérifiez que cela illustre ce qui a été dit plus haut… Passez sous 'root' et voyez (très prudemment) ce qui se passe en console lorsque vous effectuez le même genre d'essais que précédemment.

Qui lance quoi ?

En lisant le contenu des scripts, comme en examinant les messages affichés par les lignes de commande 'echo' que vous avez ajoutées, vous verrez que :

  • '~/.bash_profile' lance '~/.bashrc'
  • '~/.bashrc' lance '/etc/bashrc'.
Les fichiers '*.sh' de '/etc/profile.d' sont lancés dans les shells de connexion par '/etc/profile' et dans les shells sans connexion par '/etc/bashrc', ils sont donc toujours lancés au démarrage d'un shell, que le shell soit 'login' ou 'non login' et qu'il soit ou non enfant d'une autre instance du shell.

Si vous souhaitez définir des alias pour tous les utilisateurs, pensez donc à utiliser /etc/profile.d/alias.sh.

Un mot sur 'inputrc'

Un autre fichier de configuration est important pour le shell : le fichier '/etc/inputrc' qui configure la bibliothèque 'Readline', laquelle est utilisée par le shell pour l'interprétation des touches ou combinaisons de touches du clavier. La Base de Connaissances de Mandriva contient un exemple de configuration personnalisée d'inputrc. Sur des indications pour configurer 'inputrc' voir cette page de la Gazette Linux - Comment créer des raccourcis clavier sur les consoles Linux. Attention, n'essayez pas d'introduire des commandes 'echo' dans ce fichier : les messages ne s'afficheraient pas et 'Readline' tenterait de comprendre les lignes de code que vous auriez ajoutées comme des commandes d'interprétation du clavier qui perturberaient son bon fonctionnement.

Le fichier 'inputrc' contient essentiellement :

  • des lignes du type 'set machin on' ou 'set machin off' qui activent ou désactivent, respectivement, une certaine fonctionnalité machin (vous trouverez la liste de ces fonctionnalités dans la section 'Variables' de cette page)
  • des lignes de la forme "chaîne": machin (attention aux guillemets !) qui disent que la chaîne de caractères 'chaîne' correspondra désormais à la commande 'machin' (vous trouverez la liste de ces commandes dans la section 'Editing commands' de cette page)
  • des lignes de la forme "chaîne": "autre_chaîne" (attention aux guillemets !) qui disent que la chaîne de caractères 'chaîne' doit être remplacée par 'autre_chaîne'.
Dans les deux derniers cas, les caractères à gauche des deux-points sont ceux que renvoient les touches du clavier de façon ordinairement 'invisible'. Pour connaître les caractères renvoyés par une certaine touche, il suffit de taper Ctrl-V (ou Ctrl-Q) suivi de la touche en question. Il faut en outre savoir que Ctrl est représenté dans 'inputrc' par '\C' et que la suite '^[' (envoyée notamment par la touche Echap) est abrégée en '\e'. Illustrons : sous 'Konsole', si vous faites Ctrl-V FIN (il s'agit ici de Contrôle+V suivi de la touche FIN), vous obtenez à l'écran '^[[F', ce qui montre qu'il s'agit là de la chaîne de caractères envoyée par la touche FIN. Nous pouvons comprendre maintenant, par exemple, la ligne suivante, qui se trouve dans mon 'inputrc' :
"\e[F": end-of-line
étant donné que '\e' remplace '^[' cette ligne équivaut à "^[[F": end-of-line et comme nous savons que '^[[F' représente ce que renvoie la touche FIN, il s'ensuit que cette ligne signifie simplement que la touche FIN doit activer la fonction 'end-of-line', c'est-à-dire la fonction 'aller en fin de ligne'.
Noter enfin que, selon les types de console, les caractères renvoyés par certaines touches peuvent différer, par exemple la touche FIN renvoie, comme nous l'avons vu, '^[[F' sous 'Konsole' mais '^[[8~' sous 'rXVT'.

'/etc/inputrc' régit l'ensemble des utilisateurs de votre système, si nécessaire vous pouvez créer un fichier '~/.inputrc' pour un utilisateur particulier.

Muni de ce bagage substantiel, vous pourrez maintenant explorer et éventuellement modifier votre 'inputrc'…

L'historique des commandes

Le fichier '~/.bash_history' contient une liste des commandes précédemment tapées en console. Pour l'utilisation de cette fonctionnalité et des indications permettant de la paramétrer voir L'historique du shell et suivre les différents liens que vous y trouverez.

Modifier l'affichage du contenu d'un répertoire par 'ls'

Les couleurs et divers aspects de l'affichage à l'écran de la sortie de 'ls' sont déterminés par le fichier de configuration /etc/DIR_COLORS pour l'ensemble du système et par ~/.dir_colors pour un utilisateur. Voir là-dessus : Comment modifier les couleurs des listes affichées par 'ls'.

Précautions à prendre lors de modifications de fichiers de configuration

Quelques remarques de bon sens, mais très importantes :

1) Ne faites pas 'n'importe quoi', renseignez-vous aux meilleures sources avant d'agir
2) Si vous voulez faire toute une série de modifications, procédez étape par étape, introduisez une modification, testez-la avec soin et ensuite seulement passez à la suivante
3) Commencez par sauvegarder le fichier dans son état originel en lui donnant un nom facile à repérer (du genre 'nom_de_fichierVieux')
4) Faites en sorte de pouvoir retrouver très facilement vos modifications. Une façon de faire : si vous insérez une ligne faites-la suivre d'un commentaire avec vos initiales, vous pourrez la retrouver très facilement par inspection visuelle du fichier ou avec une fonction de recherche de votre éditeur de texte, pour Toto Dugommier, une ligne de code 'blablabla' ajoutée sera :

blablabla #TD
Procédez de la même façon pour une modification d'une ligne existante en indiquant en commentaire la nature du changement. Enfin si vous voulez désactiver une ligne mettez un commentaire devant plutôt que de l'effacer, pour la ligne 'bliblibli' cela donnera :
# bliblibli #TD

Pour le shell Bash les commentaires sont précédés d'un dièse (#), pour certains autres fichiers de configuration du système les commentaires peuvent être codés différemment, pensez-y à l'occasion...

Si vous suivez systématiquement ces procédures, vous resterez maître de la situation… sinon… j'en frissonne…

Lors d'une mise à jour

Beaucoup d'installations possèdent une partition racine pour le système ("/") et une autre partition pour les comptes utilisateur ("/home"). Vérifiez si c'est le cas pour votre système à l'aide de la commande 'df'. S'il en est ainsi, et si au moment d'installer une nouvelle version de Mandriva vous choisissez de ne mettre à jour que la partition racine en laissant intacte la partition "/home", alors, après mise à jour vous conserverez les modifications que vous aviez introduites dans les fichiers de configuration utilisateur (ceux dont les chemins commencent par "~/"), mais vous perdrez les modifications effectuées sur les autres fichiers. Bien entendu vous ne les perdrez pas vraiment, car je ne vous ferai pas l'injure de penser que vous avez oublié de faire une sauvegarde générale avant la mise à jour… Vous pourrez donc ouvrir les anciens fichiers et rapatrier vos anciennes modifications sur les nouveaux fichiers de configuration. Mais attention ne faites surtout pas un copier-coller général de l'ancien fichier vers le nouveau car, dans la nouvelle version, Mandriva a très bien pu modifier les fichiers de configuration système !! Ne recopiez que vos modifications, si elles vous conviennent encore, et tout ce qui a été dit plus haut reste valable : sauvegardez le fichier originel, faites en sorte de pouvoir retrouver facilement vos modifications à l'intérieur du fichier, et réintroduisez-les progressivement en les testant car dans le nouveau système on ne peut exclure que certaines d'entre elles aient des conséquences différentes… Prudence donc, comme toujours, lorsqu'on modifie les fichiers qui gèrent l'ensemble du système.


Auteur : ptyxs (décembre 2005)

RSS
KB.ConfigShell fr Last Author: ptyxs  Date: 2006/03/13 13:31
Powered by XWiki
Copyright (c) 2006 Mandriva