Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

Systèmes UNIX - Le shell

Le shell Linux Encyclopédie


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'OS et l'utilisateur

Le shell est ainsi chargé de faire l'intermédiaire entre 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ères 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/jf/ 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é 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é sortie standard, dans lequel le processus va écrire les données de sortie. Par défaut stdout correspond à l'écran ; STDOUT est identifié par le numéro 1 ;
  • stderr, appelé 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

Trucs & astuces pertinents trouvés dans la base de connaissances

06/01 10h24 GUIDE D'UTILISATION - Niveau Débutant (Shell)
24/11 15h30 Récupérer son IP publique (Shell)
18/11 16h24 Exécuter un script (Shell)
17/11 11h21 Tester une variable numérique (Shell)
23/09 12h42 Transferer des fichiers via ssh (Shell)
21/09 15h56 Afficher un fichier sans les lignes de commentaires (Bash)
14/11 14h22 Accès aux dernières commandes de l'historique (Shell)
14/11 12h43 Affichage d'un fichier binaire: Terminal illisible (Shell)
08/11 22h33 Création d'un fichier d'une taille précise. (Shell)
03/11 18h56 Créer un fichier vide (Bash)
Shell Plus d'astuces sur « Shell »

Discussions pertinentes trouvées dans le forum

24/01 18h13 programmation shell bash programmation shell (bash) Linux/Unix 26/01 18h10->jipicy18
13/01 13h38 script shell envoyé mot pass script shell pour envoyé un mot de pass Linux/Unix 14/02 10h47->cathan28
17/11 00h22 shell crond eviter emails générer html SHELL - CROND - Eviter emails + générer HTML Linux/Unix 30/11 20h02->HP-Bidouille16
17/01 11h44 shell tester chemin grace contenu [Shell]Tester un chemin grace a 1 contenu Linux/Unix 18/01 14h47->Trezeg15
12/11 01h12 shell envoyer fichier port com quot SHELL - Envoyer un fichier sur "Port COM" Linux/Unix 17/11 00h24->HP-Bidouille14
14/07 16h50 shell unix Shell UNIX Linux/Unix 15/07 15h31->UNIX/VI/SHELL13
05/07 12h55 shell substring [shell] faire un substring Linux/Unix 08/11 17h18->asevere11
29/01 18h12 virus trojan shell.dll virus ou trojan dans shell.dll Virus/Sécurité 10/02 22h24->Kristopher11
03/08 10h57 shell unix date veille [shell/unix] date de la veille Linux/Unix 22/02 12h25->Vag11
04/08 17h54 shell unix date modif fichier [Shell UNIX] Date de modif d'un fichier Linux/Unix 23/10 13h54->Régis9
Discussion fermée Problème résolu Shell Plus de discussions sur « Shell »

Ce document intitulé « Systèmes UNIX - Le shell » issu de l'encyclopédie informatique Comment Ça Marche (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.