[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Guide d'introduction à Debian GNU-Linux
Chapitre 8 Utiliser le shell


En lisant les chapitres précédents, vous avez déjà interagit avec le shell. Le shell est le programme qui reçoit vos commandes et qui les exécute. Dans ce chapitre, nous allons explorer le shell plus en avant, avec une mention spéciale pour le personnaliser afin de lui faire faire le travail que vous voulez qu'il fasse.


8.1 Les variables d'environnement

Chaque processus a un environnement associé. Un environnement est ensembles de variables d'environnement. Une variable est une valeur modifiable avec un nom déterminé. Par exemple, le nom EMAIL peut se référer à la valeur joe@nowwhere.com. Sa valeur peut changer ; EMAIL peut aussi se référer à jane@somewhere.com.

Puisque le shell n'est qu'un processus parmi d'autres, il possède aussi son environnement. Vous pouvez visualiser votre environnement en entrant la commande printenv. La figure suivante donne un exemple de résultat de sortie de cette commande. Sur votre système, la sortie sera différente bien que similaire.

     PAGER=less
     HOSTNAME=icon
     MAILCHECK=60
     PS1=$
     USER=username
     MACHTYPE=i486-pc-linux-gnu
     EDITOR=emacs
     DISPLAY=:0.0
     LOGNAME=username
     SHELL=/bin/bash
     OSTYPE=linux-gnu
     HISTSIZE=150
     TERM=xterm-debian
     TEXEDIT=jed
     PATH=/usr/sbin:/usr/sbin/:/usr/local/bin/:
     /usr/bin/:/bin/:/usr/bin/X11/:/usr/games
     _=/usr/bin/printenv

Les variables d'environnement sont une façon de configurer le système. Par exemple, la variable EDITOR vous permet de sélectionner votre éditeur préféré pour poster des news, écrire du courrier électronique et ainsi de suite.

Régler ses variables d'environnement est quelque chose de triviale. En pratique, commençons par personnaliser votre prompteur de shell ainsi que votre visualiseur de texte avec les variables d'environnement. Tout d'abord, commençons par un peu d'informations basiques.

     man less

Cette commande vous permet d'accéder au manuel en ligne de la commande less. Pour éviter de dérouler tout le texte d'un seul coup à l'écran, man invoque un pageur qui vous déroule le texte page par page, à chaque fois que vous appuyez sur la touche espace. Par défaut, le pageur utilisé est more.

Continuons et regardons un peu la page de manuel de less, qui est un pageur très puissant. Affichez la page suivante en appuyant sur espace et q pour quitter. more quitte aussi automatiquement la page en arrivant à la fin.

     export PAGER=less

Après avoir lu les avantages de less, il se peut que vous vouliez l'utiliser pour lire les pages de manuel. Pour ce faire, vous devez positionner la variable d'environnement PAGER.

La commande pour ajuster une variable d'environnement dans bash a toujours le format suivant:

     export NOM=valeur

export signifie déplacer la variable du shell dans votre environnement. Cela veut dire que les programmes autres que le shell (par exemple, un visualiseur de textes) seront capables d'y accéder.

     echo $PAGER

C'est la façon la plus aisée d'accéder au contenu de la variable. $PAGER demande en fait au shell d'insérer la valeur de PAGER avant d'invoquer la commande. echo renvoie simplement l'argument: dans ce cas, cela renvoie simplement la valeur du contenu de PAGER, c'est-à-dire less.

     man more

renvoie maintenant la page de manuel de more. Mais maintenant, man utilise less comme pageur.

less a beaucoup plus de fonctionnalités que more. Par exemple, vous pouvez paginer en arrière à l'aide de la touche b. Vous pouvez aussi vous déplacer en avant et en arrière à l'aide des flèches de direction. less ne sort pas lorsque vous avez atteint le bas du fichier de la page de manuel: il attend que vous appuyez sur la touche q.

Vous pouvez essayer quelques spécificités de la commande less, comme b, pour vérifier qu'elles ne fonctionnent pas avec more.

     unset PAGER

Si vous ne désirez pas spécifier un pageur, vous pouvez appliquer la commande unset à la variable. man utilisera alors more par défaut, comme il le faisait avant que vous ne changiez la variable.

     echo $PAGER

Comme la variable PAGER a été détruite, echo ne renverra rien.

     PS1=bonjour:

Pour s'amuser, tentons de modifier le prompteur. $ devrait maintenant être modifié. Voici les étapes en détails:

     $ echo $PS1
     $
     $PS1=bonjour:
     bonjour:echo Mon prompteur est $PS1
     Mon prompteur est bonjour: 
     bonjour:

export n'est pas nécessaire car vous ne modifier que le comportement de votre propre shell. Il n'y a pas de raison d'exporter dans l'environnement de tous les programmes pour faire le test. Techniquement parlant, PS1 est plutôt une variable de shell qu'une variable d'environnement.

Si vous le voulez, vous pouvez exporter la variable de shell, la transformant ainsi en variable d'environnement. Si vous agissez de la sorte, les programmes lancés à partir du shell pourront la voir.


8.2 Où les commandes résident: la variable PATH

Lorsque vous tapez une commande dans votre shell, ce dernier doit trouver le programme correspondant sur votre disque avant de l'exécuter. Si le shell devait examiner l'ensemble du disque dur, cela serait extrêmement lent. À la place, il se contente d'aller chercher dans un ensemble de répertoires contenu dans la variable d'environnement PATH. Cette liste de répertoires est le chemin d'accès du shell. Lorsque vous entrez une commande, le shell va chercher dans chacun des répertoires de ce chemin pour trouver la commande que vous lui avez demandé de lancer.

Il se peut que vous ayez à changer la variable PATH si vous installez vous-même des programmes à des endroits non conventionnels. La valeur du PATH est une liste de répertoires séparés par des « : ».

     /usr/local/bin:/usr/bin/:/bin:/usr/bin/X11:/usr/games

Cette valeur est définie dans le fichier /etc/profile et applicable à tous les utilisateurs. Il est très facile de modifier cette valeur, comme d'ailleurs l'ensemble des variables d'environnement. Si vous tapez la commande ls, le shell va d'abord la chercher dans /usr/local/bin; ls ne s'y trouve pas donc il va continuer et la chercher dans /usr/bin/ ; comme cela échoue encore, il vérifie /bin. Il la trouve enfin et stoppe sa recherche pour exécuter le programme /bin/ls. Si la commande /usr/bin/X11/ls existe (ce n'est pas le cas mais c'est pour l'exemple), elle serait tout simplement ignorée.

Vous pouvez voir quel ls le shell va utiliser grâce à la commande type. type ls va vous renvoyer /bin/ls. Essayez-la vous-même.

     $ type type
     type is a shell builtin[38]

type n'est pas vraiment un programme: c'est une fonctionnalité du shell mais vous pouvez l'utiliser comme un programme extérieur.

Il y a de nombreuses commandes de la même sorte. Tapez man builtins pour visualiser la page les décrivant. De façon générale, il n'est pas nécessaire de savoir si une commande est une fonctionnalité interne ou bien un programme extérieur. Mais il faut garder à l'esprit qu'une fonctionnalité interne ne sera pas visible via un ps ou un top car il ne s'agit pas d'un processus séparé: c'est une partie intégrante du shell.


8.3 Fichiers de configuration

De nombreuses applications sous Linux vous permettent de modifier leur comportement à certains moment en transformant les fichiers contenant leurs informations de configuration. Ces fichiers de configuration peuvent contenir des informations de lancement, des réglages de configuration ou bien des ajustements pour la sortie. En général, un nom de fichier de configuration est basé sur le nom de l'application qu'il est sensé modifier. Cette convention de nom permet de déterminer rapidement à quelle application appartient quel fichier de configuration pour les réglages.


8.3.1 Configuration système contre configuration personnelle

Il est important de se rappeler qu'il y a deux façons différentes de configurer sur un système Debian. La configuration système affecte tous les utilisateurs. Ces configurations se trouve dans le répertoire /etc et donc il est généralement nécessaire d'être root pour modifier ces fichiers. Vous pouvez avoir besoin de configurer la façon dont se connecte le système à Internet par exemple, ou bien configurer les butineurs HTML pour leur faire afficher la page de la société en se lançant. Si vous désirez effectuer le changement pour tous les utilisateurs à la fois, vous devez faire les transformations dans /etc. Des fichiers de configuration simples de /etc sont /etc/X11/XF86Config, /etc/lynx.cfg et /etc/ppp/options. En fait, presque tous les fichiers de /etc sont des fichiers de configuration.

La configuration personnelle n'affecte qu'un simple utilisateur. Les fichiers cachés sont utilisés à cette fin. Par exemple, le fichier ~/.newrc contient une liste d'articles sur USENET (groupes de discussions) que vous avez lus et à quels groupes vous avez souscrit. Cela permet à des lecteurs de news comme trn ou GNUS de n'afficher que les articles non lus dans les groupes qui vous intéressent. Cette information est bien-sûr propre à chaque utilisateur du système et ainsi chacun possède son propre .newrc dans son répertoire de travail personnel.


8.4 Aliases

Si vous utilisez la même commande de nombreuses fois, il se peut que vous vous fatiguiez à la taper. bash vous permet d'écrire un raccourci - on dit alias - de votre commande.

Admettons que vous désiriez toujours utiliser les options --almost-all et --color=auto de ls. Faîtes un alias:

     alias myls='ls --almost-all --color=auto'

Maintenant, il vous suffit de taper myls à la place de la commande complète. Pour voir ce qu'est réellement myls, il suffit de taper type myls. Pour voir la liste complète des aliases que vous avez défini, taper simplement alias tout seul comme commande.


8.5 Contrôler les entrées et les sorties

Au fur et à mesure de vos expériences avec Linux, vous allez comprendre combien manipuler les entrées et sorties des applications est un concept très puissant. Cette partie décrit quelques points de ce que peut vous apportez la redirection des entrées-sorties.


8.5.1 stdin, stdout, tubes et redirection

Chaque processus a au moins trois connexions avec le monde extérieur. L'entrée standard est une des sources des données du processus. La sortie standard est un des endroits où le processus envoie ses données et l'erreur standard est l'endroit où le processus envoie ses messages d'erreurs (on les abrège généralement par stdin, stdout et stderr).

Les mots « source » et « endroit » sont intentionnellement vagues. Ces lieux d'entrées-sorties standards peuvent changer avec les utilisateurs. Cela peut être l'écran, le clavier, un fichier et même une connexion réseau. Vous pouvez spécifier les endroits à utiliser.

Lorsque vous lancez un programme à partir du shell, l'entrée standard est généralement le clavier et la sortie standard, ainsi que les erreurs, s'affichent sur votre écran. Vous pouvez bien sûr demander à votre shell de modifier ce comportement.

Par exemple, la commande echo envoie son entrée standard sur sa sortie standard, normalement à l'écran. Mais vous pouvez décider de l'envoyer plutôt dans un fichier à l'aide de l'opérateur de redirection de sortie, > . Par exemple, pour écrire le mot « Bonjour » dans le fichier monfichier, utilisez la commande suivante:

     echo Bonjour > monfichier

Utilisez ensuite cat ou bien votre pageur (more ou less) pour visualiser le contenu du fichier monfichier.

     $ echo Bonjour > monfichier
     $ cat monfichier
     Bonjour
     $

Vous pouvez changer l'entrée standard d'une commande avec l'opérateur de redirection d'entrée, < . Par exemple, cat < monfichier. En pratique, ce n'est pas commode. Pour simplifier, cat accepte un fichier pour argument. Ainsi, vous pouvez vous contenter de taper cat monfichier et l'effet sera identique.

Si l'on approfondit un peu, la commande cat <monfichier signifie que le shell ouvre le fichier monfichier et envoie son contenu dans l'entrée standard de cat. cat monfichier, sans l'opérateur de redirection, signifie que la commande cat reçoit un argument unique (monfichier), l'ouvre d'elle-même et ensuite l'affiche à l'écran.

Il y a bien-sûr une raison pour cette double fonctionnalité. Par exemple, il est possible de connecter la sortie standard d'une commande sur l'entrée standard d'une autre commande. Cela s'appelle un tube (pipeline en anglais). Cela utilise l'opérateur tube[39], | .

Peut-être désirez-vous voir la GNU General Public License à l'envers ? Pour le faire, utilisez la commande tac (c'est un cat mais inversé). Essayez:

     tac /usr/doc/copyright/GPL

Malheureusement, cela défile beaucoup trop rapidement pour être lisible. Donc vous ne voulez avoir que quelques paragraphes: la solution est un tube:

     tac /usr/doc/copyright/GPL | less

Cela prend donc la sortie standard de tac, qui est la GPL lue à l'envers, et l'envoie dans l'entrée standard de less.

Vous pouvez enchaîner ainsi autant de commandes que vous le désirez. S'il vous prend une envie inexpliquable de transformer tous les G en Q, il vous suffit d'utiliser la commande tr G Q comme ceci:

     tac /usr/doc/copyright/GPL | tr G Q | less

Vous pouvez obtenir le même résultat en utilisant des fichiers temporaires et des redirections, par exemple:

     tac /usr/doc/copyright/GPL > tmpfile
     tr G Q < tmpfile > tmpfile2
     less < tmpfile2
     rm tmpfile tmpfile2

Il est clair qu'un tube est bien plus pratique.


8.6 Expansion de nom de fichier

Vous désirez souvent utiliser une commande sur tout un groupe de fichiers. Des caractères spéciaux (wildcards) sont utilisés pour créer des termes génériques d'expansion de nom de fichiers. Une série de lettres et des caractères spéciaux permettent ainsi de lister des fichiers. Par exemple, le motif /etc/* remplace la liste de tous[40] les fichiers de /etc.

* est un motif qui remplace n'importe quelle série de caractères et ainsi l'expression /etc/* fournira la liste de tous les fichiers commençant par /etc/.

Cette liste de fichiers est très utile comme un jeu d'arguments pour une commande. Par exemple, le répertoire /etc contient une série de sous-répertoires appelés rc0.d, rc1.d, etc... Normalement, pour visualiser le contenu de ces répertoires, vous devriez taper les commandes suivantes:

     ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d
     ls /etc/rc4.d /etc/rc5.d /etc/rc6.d /ect/rcS.d

C'est particulièrement lourd et pénible. À la place, il suffit d'utiliser le caractère spécial « ? » comme suit:

     ls /etc/rc?.d

/etc/rc?.d renvoie alors une liste de nom de fichiers, commençant par rc, suivant d'un caractère et se terminant pas .d.

Les caractères spéciaux disponibles sont les suivants:

Les motifs d'expansion sont très simples, à partir du moment où vous les voyez dans des exemples concrets:


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Guide d'introduction à Debian GNU-Linux
Traduction du document du 2 octobre 2000
John Goerzen et Ossama Othman
Traduction française de Patrice Karatchentzeff p.karatchentzeff@free.fr