Ceci est une ancienne révision du document !


Article mis en forme par ptitdav69 suite à la séance de formation qui a eu lieue le 27/01/2007 et qui a été dispensée par gapz et FiFouille sur le canal #ubuntu-fr-classroom du réseau IRC freenode.

Initiation à l'utilisation du Shell

Le sujet de ce cours est l'initiation à l'utilisation du Shell. Ce cours est orienté débutant et il devrait donc servir à construire des bases solides pour pouvoir ensuite apprendre plus facilement. Les prérequis pour ce cours sont de savoir ouvrir un terminal, et d'avoir un minimum de vocabulaire (pas grand chose rassurez vous). Pour ceux qui ont déja quelques notions, sachez que ce cours ne présentera pas quelques aspects du Shell et seront abordés dans une prochaine session.

Structure du cours

Le cours sera structuré de la façon suivante : en premier lieu le Shell dans sa généralité, puis des notions fondamentales telles que les entrées/sorties, les pipes, les expressions régulières (présentées par FiFouille) et enfin les variables et les structures de contrôles.

Le Shell vous donne accès à toute une gamme d'outils très performants qui vous permettront d'effectuer des tâches que vous n'auriez pu faire auparavant, mais aussi de les automatiser, et cela d'une manière assez simple. Bien que de nombreuses interfaces graphiques soient disponibles pour GNU/Linux (et autres dérivés d'Unix), le shell reste un très bon outil car léger (donc assez rapide), efficace, accessible… Bien sûr il y a beaucoup d'autres aspects très importants, mais plus spécifiques aux langages, et qui donc demandent certaines connaissances en programmation, c'est pour cela que ces aspects ne seront pas traités ici (mais certainement dans une prochaine session).

C'est (dans une généralité), une interface entre l'utilisateur et le système d'exploitation. L'utilisateur rentrera des commandes, qui ensuite seront interprétées par le Shell, et celui ci retournera un certain résultat. Pour éviter toute confusion, nous allons apprendre quelques termes : quand on parle du Shell on fait souvent référence à l'interpréteur de commande, auparavant celui-ci s'appelait sh (contraction de shell), et qui à donné ensuite à tout un éventail d'interpréteur tel que bash, csh, zsh, ksh… À ne pas confondre avec un émulateur de terminal comme xterm, eterm, gnome-terminal…

Il vous faut un émulateur de terminal (gnome-terminal sous gnome, xterm, aterm…), pour pouvoir taper les commandes. Sachez que toutes les commandes peuvent être regroupées dans un fichier pour former un script, nous aborderons cela un peu plus loin dans le cours. Pour le moment, la plupart des exemples seront directement à taper dans le terminal.

Note sur la différence entre l'émulateur de terminal et tty : Un émulateur de terminal est en quelque sorte l'outil graphique qui vous permet d'avoir accès à votre Shell. En réalité, les vrais terminaux sont accessibles via la combinaison de touche CTRL + ALT + Fx (ou x est un chiffre entre 1 et 7, 7 étant la session graphique). Le tty (pour TéléTYpe), c'est le "terminal en mode caractère".

1 - Les entrées/sorties

En général un programme dispose d'une entrée standard, une sortie standard, et une sortie d'erreur standard, aussi connu sous le nom de stdin, stdout, stderr. Globalement stdin représente le clavier, stdout l'écran et stderr la sortie des messages d'erreur vers l'écran. Bien entendu ce n'est pas exactement cela, c'est simplement pour illustrer. Pour "simplifier", ils sont chacuns associés à un numéro (appelé descripteur de fichier) : stdin 0, stdout 1, stderr 2, cela permettera ensuite de faire ce que l'on appelle des redirections. Par exemple, si vous avez un programme qui est lancé et qu'il est censé faire l'addition de 1+1, le résultat sera retourné sur la sortie standard, et si jamais il y a une quelconque erreur elle sera retournée sur la sortie d'erreur standard. Si par exemple vous tapez "lfdfdfj" dans le terminal, "bash: lfdfdfj: command not found" sera retourné sur stderr. Par contre, si vous tapez ls, le résultat sera retourné sur stdout. Pour l'utilisateur cela se passe de manière totalement transparente.

2 - Les redirections

Les redirections permettent simplement (comme le nom l'indique), de rediriger un des trois descripteurs de fichier vu plus haut vers à peu près tout ce que vous voulez (c'est à dire dans un fichier). Les opérateurs utilisés sont ">", "»", "<", "«".

Redirections "sortie"

Si vous souhaitez rediriger le résultat de ls dans un fichier portant le nom de test il vous suffira de faire : "ls > test". Si vous voulez rediriger la stderr de la commande "lfdfdfj" il faudra faire : "ls 2> test".

Comme vous l'aurez sans doute remarqué dans le premier exemple, on n'indique pas explicitement "1>" car par défaut le descripteur de fichier redirigé est stdout (dans le cas de l'opérateur ">"). Quand vous utiliserez ">" le contenu du fichier vers lequel stdout est redirigé sera écrasé, et si le fichier n'existe pas il sera créé. C'est pour cela qu'existe "»", qui permet de rediriger stdout dans le fichier spécifié mais sans en écraser son contenu. Par exemple : "ls » test", si test n'existe pas il sera créé, si il existe le résultat sera ajouté à son contenu. De la même manière vous pouvez donc rediriger stderr : "lfdfdfj 2» test".

Cela ne s'arrête pas là, si par exemple vous voulez rediriger stderr vers stdout, il vous suffit alors d'utilisez "2>&1" qui signifie littéralement rediriger stderr vers ce que représente stdout. Par exemple "ls >fichier 2>&1" redirigera stdout dans fichier ainsi que stderr. Si vous rencontrez "&>fichier" cela signifie rediriger stdout et stderr dans fichier.

Redirection vers l'entrée standard

Les opérateurs utilisés sont "<" et "«" qui permettent tout les deux de rediriger l'entrée standard. Si l'on utilise le programme wc (qui permet d'afficher le nombre d'octets, de mots et de lignes d'un fichier, cf. man wc), on peut rediriger stdin via "<". Par exemple si l'on veut compter le nombre de ligne dans un fichier : "wc -l < fichier" (revient aussi à faire "wc -l fichier", mais cela est du au fait que wc -l peut prendre en paramètre un nom de fichier).

"«" quand à lui permet aussi de rediriger stdin mais jusqu'à arriver à une chaine de caractère que l'on aura spécifiée. Exemple : "wc -l « EOF" (EOF signifiant End Of File, vous pouvez utiliser de la même manière "FIN", ou encore "FDF" etc…). En utilisant ">" et "«" nous pouvons facilement ajouter du texte dans un fichier de notre choix de la même manière qu'un éditeur de texte : "cat > fichier « EOF" (l'outil cat permet de concaténer des fichiers et les afficher sur la sortie standard).

null - un fichier spécial

Même si cela ne traite pas directement des redirections, il est important de connaitre un fichier spécial nommé null. Il permet de rediriger un descripteur de fichier vers un fichier qui supprimera toutes les données qui lui seront ajoutées. Il porte le nom d'absorbeur de données. Si par exemple, vous ne voulez pas voir le résultat d'une commande, il vous suffit de rediriger stdout vers /dev/null : "ls >/dev/null". Pour plus d'information sur le fichier null, "man null".

3 - Les commandes de bases pour traiter les fichiers

Comme cela n'est pas le but du cours, cette partie sera assez rapide, mais vous pouvez à tout moment, si vous ne saisissez pas quelques consulter le manuel via la commande "man nom_du_programme" (par exemple "man ls"). L'interêt de cette partie est de vous fournir une gamme d'outil permettant ensuite de présenter des notions concernant directement le shell. Les commandes les plus courament utilisées sont donc : cp, mv, ls, cd, rm, chmod, chown, find Chacune de ces commandes correspondent à directement à un mot. Parexemple cp = copy, mv = move, ls = list, cd = change directory

REMISE EN FORME EN COURS

  • projets/ecole/scripting/initiation_au_shell.1175850637.txt.gz
  • Dernière modification: Le 24/05/2007, 19:12
  • (modification externe)