Linux - Le shell

Août 2015

Introduction au shell

L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille».

Le shell, une coquille entre l\



Le shell est ainsi chargé de faire l'intermédiaire le système d'exploitation et l'utilisateur grâce aux lignes de commandes saisies par ce dernier. Son rôle consiste ainsi à lire la ligne de commande, interpréter sa signification, exécuter la commande, puis retourner le résultat sur les sorties.

Le shell est ainsi un fichier exécutable chargé d'interpréter les commandes, de
les transmettre au système et de retourner le résultat. Il existe plusieurs shells, les plus courants étant sh (appelé «Bourne shell»),
bashBourne again shell»), cshC Shell»), TcshTenex C shell»), kshKorn shell») et zshZero shell»). Leur nom correspond généralement au nom de l'exécutable.

Chaque utilisateur possède un shell par défaut, qui sera lancé à l'ouverture
d'une invite de commande. Le shell par défaut est précisé dans le fichier de configuration /etc/passwd dans le dernier champ de la ligne correspondant à l'utilisateur. Il est possible de changer de shell dans une session en exécutant tout simplement le fichier exécutable correspondant, par exemple :

/bin/bash

Invite de commande (prompt)

Le shell s'initialise en lisant sa configuration globale (dans un fichier du répertoire /etc/), puis en lisant la configuration propre à l'utilisateur (dans un fichier caché, dont le nom commence par un point, situé dans le répertoire de base de l'utilisateur, c'est-à-dire /home/nom_de_l_utilisateur/.fichier_de_configuration), puis il affiche une invite de commande (en anglais prompt) comme suit :

machine:/repertoire/courant$

Par défaut dans la plupart des shells le prompt est composé du nom de la machine,
suivi de deux points (:), du répertoire courant, puis d'un caractère indiquant le type
d'utilisateur connecté :
  • «$» indique qu'il s'agit d'un utilisateur normal
  • «#» indique qu'il s'agit de l'administrateur, appelé «root»

Notion de ligne de commande

Une ligne de commande est une chaîne de caractère constituée d'une commande,
correspondant à un fichier exécutable du système ou bien d'une commande du shell ainsi que des arguments (paramètres) optionnels :

ls -al /home/jf/


Dans la commande ci-dessus, ls est le nom de la commande, -al et /home/jean-francois/ sont des arguments. Les arguments commençant par - sont appelés options.

Pour chaque commande il existe généralement un certain nombre d'options pouvant
être détaillées en tapant une des commandes suivantes :
commande --help
commande -?
man commande

Entrées-sorties standard

Lors de l'exécution d'une commande, un processus est créé.
Celui-ci va alors ouvrir trois flux :

  • stdin, appelée entrée standard, dans lequel le processus va lire les données d'entrée. Par défaut stdin correspond au clavier ; STDIN est identifié par le numéro 0 ;
  • stdout, appelée sortie standard, dans lequel le processus va écrire les données de sortie. Par défaut stdin correspond à l'écran ; STDOUT est identifié par le numéro 1 ;
  • stderr, appelée erreur standard, dans lequel le processus va écrire les messages d'erreur. Par défaut stderr correspond à l'écran. STDERR est identifié par le numéro 2 ;
entrées-sorties standard : STDOUT, STDIN, STDERR


Par défaut lorsque l'on exécute un programme, les données sont donc lues à partir du clavier et le programme envoie sa sortie et ses erreurs sur l'écran, mais il est possible de lire les données à partir de n'importe quel périphérique d'entrée, voire à partir d'un fichier et d'envoyer la sortie sur un périphérique d'affichage, un fichier, etc.

Redirections

Linux, comme tout système de type Unix, possède des mécanismes permettant de rediriger les entrées-sorties standards vers des fichiers.

Ainsi, l'utilisation du caractère «>» permet de rediriger
la sortie standard d'une commande située à gauche vers le fichier situé
à droite :

ls -al /home/jf/ > toto.txt
echo "Toto" > /etc/monfichierdeconfiguration


La commande suivante est équivalente à une copie de fichiers :
cat toto > toto2


La redirection «>» a pour but de créer un nouveau fichier. Ainsi, si un fichier du
même nom existait, celui-ci sera écrasé. La commande suivante crée tout simplement un
fichier vide :
> fichier


L'emploi d'un double caractère «>>» permet de concaténer
la sortie standard vers le fichier, c'est-à-dire ajouter la sortie à la suite du fichier, sans l'écraser.


De manière analogue, le caractère «<» indique une redirection
de l'entrée standard. La commande suivante envoie le contenu du fichier toto.txt en entrée de la commande cat, dont le seul but est d'afficher le contenu sur la sortie standard (exemple inutile mais formateur) :

cat < toto.txt



Enfin l'emploi de la redirection «<<» permet de lire sur l'entrée standard
jusqu'à ce que la chaîne située à droite soit rencontrée. Ainsi, l'exemple suivant va
lire l'entrée standard jusqu'à ce que le mot STOP soit rencontré, puis va afficher le résultat :

cat << STOP

Tubes de communication (pipes)

Les tubes (en anglais «pipes", littéralement tuyaux) constituent un mécanisme de communication propre à tous les systèmes UNIX. Un tube, symbolisé par une barre verticale (caractère «|»), permet d'affecter la sortie standard d'une commande à l'entrée standard d'une autre, comme un tuyau permettant de faire communiquer l'entrée standard d'une commande avec la sortie standard d'une autre.

Ainsi dans l'exemple suivant, la sortie standard de la commande ls -al est envoyée sur le programme sort chargé de trier le résultat par ordre alphabétique :

ls -al | sort


Il est possible de cette façon de chaîner un certain nombre de commandes par tubes successifs. Dans l'exemple suivant la commande affiche tous les fichiers du répertoire courant, sélectionne les lignes contenant le mot "zip" (grâce à la commande grep)
et compte le nombre de lignes total :

ls -l | grep zip | wc -l
Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Linux-le-shell .pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.


A voir également


Linux - The shell
Linux - The shell
Linux - Shell
Linux - Shell
Linux - Die Shell
Linux - Die Shell
Linux - La shell
Linux - La shell
Linux - O shell
Linux - O shell
Ce document intitulé «  Linux - Le shell  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.