Vous êtes sur la page 1sur 17

G3L Lionel JAMES

Shell Bash

Shell Bash Niveau dbutant Introduction


Les distributions actuelles de GNU/Linux offrent lutilisateur un environnement graphique quivalant aux systmes dexploitation propritaires du march. Mais cette ergonomie et confort dutilisation sous Linux pour lutilisateur dbutant nest rellement prsente que depuis quelques annes. Les distributions actuelles GNU/Linux rivalisent mme denvironnement graphique trs divers et avancs avec lintroduction de la 3D et le support de lacclration des cartes graphiques. Ceci permis aux systmes sous GNU/Linux de se dmocratiser dans le grand public avec lapparition des mini-laptop et sur les postes bureautique pour sa scurit, Linux tant auparavant souvent considr pour des rudits ou experts en informatique. Lhistorique des systmes sous Linux a, au travers des annes, gard cet attachement auprs dune certaine communaut d'rudits ou dexperts, on peut y voir cet attachement au travers de ce que lon appel le Shell o lon voit ces dits experts crire des lignes de textes dans un langage incomprhensif, tout a dans une fentre noire dnue de tout esthtisme, accompagn dune srie de manipulation des doigts sur le clavier digne dun pianiste ! Ce cours est donc fait pour ces personnes dbutants sous un systme GNU/Linux, car ils seront coup sre amens utiliser ce fameux Shell , car certaines choses ne peuvent se faire que via le Shell et parce que Linux besoin d'tre proche de son utilisateur, et son utilisateur proche de son Linux, avec tous les avantages et inconvnients que cela impose ;-). Ce cours ne va clairement pas vous montrer les arcanes dans la manipulations du shell et ses interactions les plus puissantes avec le Kernel Linux, le Shell tant aussi un langage de programmation, des annes de pratiques tant ncessaires. Ce cours va juste permettre aux dbutants dapprhender les principes et les fonctions de bases du Shell en temps que logiciel, pour comprendre un peu mieux ces fameuses lignes textes trouves sur un forum d'rudits Linuxiens et que vous devrez entrer dans votre terminal .

Document sous licence CC (Crative Commons)

-1-

G3L Lionel JAMES

Shell Bash

Dfinition
Le Shell est ce que lon appel un Interprteur de commandes . Il date de lpoque d UNIX, o le seul moyen de communiquer avec sa machine tait dcrire des lignes textes au clavier, dans un langage comprhensible la fois par lhumain et la machine. Le rle de la machine tant d'excuter les commandes de lutilisateur et dafficher le rsultat lcran. Le shell c'est un programme qui se trouve dans le rpertoire /bin. Par dfinition, il doit tre lger et rapide, et reste un service daccs privilgi aux Noyau Linux (Kernel) pour l'excution de primitives systme. Depuis, cette interface avec la machine a perdure car elle est rapide et fiable pour lutilisateur qui la maitrise. Le shell a volue aux travers des annes, plusieurs types de Shell existent : - le /bin/sh shell Bourne - le /bin/bash shell Bourne Again SHell - le /bin/csh C shell - le /bin/ksh Korn shell - le /bin/tcsh C shell amlior mais le principe de base et toujours rest le mme : Les shells sont des interprteurs, ils lisent chaque commande saisie par lutilisateur (ou lue partir dun fichier), vrifient et traitent la syntaxe pour lexcuter. Ici, nous utiliserons le Shell Bash, lun des plus couramment utilis sur les systmes GNU/Linux. Bash est un logiciel libre publi sous GNU GPL.

Les bons cts du shell


facilit de mise en uvre et install doffice sous tous systme GNU/Linux (pas besoin d'installer un autre langage sur votre systme). le shell manipule essentiellement des chanes de caractres : pas de structures complexes, pointeurs, etc le langage est adapt au prototypage rapide dapplications : excutions dinstructions systmes fiables, rapides et robustes. Le bash se rvle un outil puissant lorsquon le maitrise. cest un langage glu : excuter et agglomrer des composants divers crits dans dautres langages.

Les moins bons cts du shell


Le nombre de commandes et la documentation difficile d'accs pour le dbutant. messages d'erreurs parfois difficiles exploiter, ce qui rend la mise au point des scripts fastidieuse. Temps dapprentissage : la syntaxe est cohrente mais ardue. De nombreuses annes dutilisation sont ncessaires pour tre laise avec la ligne de commande.

Document sous licence CC (Crative Commons)

-2-

G3L Lionel JAMES

Shell Bash

Rappels
Avant de lancer un shell, je pense quil est ncessaire de rappeler quelques bases bien utiles. Le shell permet avant tout d'excuter des commandes, d'explorer l'arborescence du systme, de crer, d'diter et de supprimer des fichiers, etc. Au travers du Shell, vous touchez donc des parties trs importantes et sensibles de votre systme dexploitation, et excuter des commandes que lon ne comprend pas peut vraiment avoir des consquences catastrophiques sur ce dernier ! raison de plus pour faire quelques rappels et dtre laise avec ces commandes. La recommandation principale dans lutilisation du shell est la prudence ! executer des commandes en root ne doit seffectuer que pour des tches bien specifiques dadministration que lutilisateur maitrise parafaitement. Les commandes effectues dans ce cours peuvent seffectuer avec un simple compte utilisateur, pas besoin dtre en root !

Larborescence sous Linux


Sous Linux, on ne le rappellera jamais assez, tout est fichier ! Chacun de ces fichiers est plac quelque part en dessous de la racine / ( root ) Dans /, il faut un ensemble de rpertoires systmes dont la prsence de certains est imprative (*), et pour d'autre, prfrable.

/dev : C'est ici que les priphriques (rels et virtuels) sont accessibles (partitions, disques, cartes son, ports SCSI, ports USB, etc.), mais en mode "donnes brutes". Il est souvent ncessaire d'utiliser des programmes pour interprter ces contenus (par exemple, en montant la partition /dev/hda1 dans /mnt/hda1 pour accder aux fichiers). /mnt : C'est en gnral cet endroit qu'on accde aux autres systmes de fichiers (autres partitions, CD/DVD, cls USB, serveurs de fichiers...) /etc(*) : Ici sont regroups tous les fichiers de configurations des diffrents logiciels installs sur la machine ainsi que des fichiers de configuration systme utiliss au dmarrage de la machine. /media : Certaines distributions montent les priphriques amovibles cet endroit. /var : Fichiers dont le contenu varie o /var/log : On trouve ici les logs des diffrents logiciels et serveurs. Cela permet de voir ce qui s'est pass quand quelque chose ne va pas. o /var/spool : Fichiers en cours de traitement (file d'impression, mails en cours d'envoie...) o /var/tmp : Fichiers temporaires (voir aussi /tmp). /home : Chaque utilisateur possde son propre rpertoire pour y stocker ses fichiers personnels et la configuration des programmes. /usr(*) : Rpertoire contenant les fichiers du systme partageables en rseau et en lecture seule.

Document sous licence CC (Crative Commons)

-3-

G3L Lionel JAMES


Shell Bash

/opt : Rpertoire contenant les applications complmentaires (dites : add-on) nappartenant pas la distribution installe. /tmp : Sont stocks ici les fichiers temporaires (fichiers crs pendant le fonctionnement des logiciels et supprims la fin). (Voir aussi /var/tmp) /boot(*) : Sont stocks ici les fichiers de dmarrage du systme (noyau du systme, etc.). On y trouve aussi certains fichiers de configuration (GRUB...) /lib(*) : Ce sont des bibliothques utilises par divers programme (C'est l'quivalent des DLL Windows). Par exemple, libjpeg.so permet tous les programme de lire et crire des fichiers JPEG. /sbin(*) : Ce rpertoire contient les programmes systmes et les outils d'administration (par exemple les outils permettant de formater un disque). /bin(*) : Ici sont situs les programmes utiliss la fois par les utilisateurs et les administrateurs. Ensemble de fichiers excutables reprsentant les commandes.

Lancer un Shell (mode console ou terminal)


Pour accder la ligne de commande, il est possible d'utiliser un terminal (xterm, kterm, gterm) ou encore une console virtuelle. Pour ce faire, plusieurs possibilits sont offertes :

utiliser le menu du bureau (Gnome, Kde, etc.). Il s'agit de la mthode conseille. utiliser le menu lancer une application. Dans la fentre ainsi ouverte, taper le nom de terminal et valider. La fentre lancer une application peut tre ouverte avec Alt+F2 Utiliser les consoles virtuelles (il y en a 6).

La console virtuelle
La console virtuelle (tty1 tty6) est un cran noir o une invite de commande apparat, de la forme login : Depuis l'interface graphique, il est possible de se connecter une console virtuelle en utilisant la combinaison de touches Ctrl+Alt+FN, o N est un chiffre de 1 6. Pour revenir au mode graphique depuis une console virtuelle, utiliser la combinaison de touches ALT+F7.

Document sous licence CC (Crative Commons)

-4-

G3L Lionel JAMES

Shell Bash

Les utilisateurs
Linux a t pens ds lorigine comme tant scuris, multi-tche et donc multi-utilisateurs (gestion de droits multiples). Rappelez-vous qu une certaine poque, les premiers utilisateurs ne disposaient que dun seul ordinateur sur lequel chacun se partageait des ressources (temps processeur, espace disque, mmoire, etc). Les utilisateurs se connectaient alors via des terminaux (cran, clavier, mme pas de souris !) pour accder lordinateur central distance via un proto-reseau (au dbut, une simple liaison srie suffisait !), do lintert dauthentifier chaque utilisateur et processus qui sy executait. Cest pourquoi lorsquun utilisateur veut utiliser le systme sous GNU/Linux, la premire tape est tout dabord de sauthentifier auprs du systme, se dernier lui attribuant les droits, des espaces propres qui lui ont t prdefinis et attribus lors de la configuration du systme : administrateur, utilisateurs, invit.

Connexion dans une console virtuelle


A l'invite login:, saisir l'identifiant (login) de l'utilisateur, puis valider en appuyant sur Entre, l'invite Password: s'affichera. Saisir le mot de passe de l'utilisateur et valider.

le mot de passe n'est pas affich l'cran pour des raisons de scurit. Le fait de ne pas voir l'cran ce que vous tapez, ne doit pas vous inquiter. Si le mot de passe est valide, une invite de commande comme suite doit s'afficher, indiquant que la connexion a russie.

L'invite de commande du shell aprs la connexion

Document sous licence CC (Crative Commons)

-5-

G3L Lionel JAMES

Shell Bash

Suite la connexion, l'invite de commande (ou prompt) du shell apparat et a en gnral la forme suivante : utilisateur@machine ~ $

utilisateur - reprsente l'identifiant ou le nom de l'utilisateur connect machine- reprsente le nom de la machine sur laquelle l'utilisateur est connect ~ est un raccourci qui signifie le rpertoire personnel /home/utilisateur $ signifie que vous tes connect en tant qu'utilisateur

utilisateur@machine ~ # Si au lieu de $ le signe # apparat, alors vous tes connect en tant que superutilisateur (root). Gardez l'sprit que les systmes GNU/Linux utilisent par convention # pour root et $ pour un utilisateur autre que root. Ce comportement peut tre chang en modifiant la variable d'environnement PS1, mais cela est vivement dconseill! Rappel : root tous les droits, celui aussi de casser votre systme lors de lexecution dune commande hazardeuse pensez donc rester le maximum avec vos droits utilisateur, la simple commande exit devrait vous permettre de vous reloguer sous votre utilisateur.

Changer didentit
Depuis votre shell vous avez la possibilit de prendre l'identit d'un autre utilisateur existant sur votre systme, y compris l'utilisateur "root" (utilisateur qui dispose de tous les privilges). Pour faire cela vous avez votre disposition la commande su ou su Regarder utiliser la commande su pour plus de dtails.

L'utilisation des commandes


Le principe d'excution des commandes repose sur un principe de fonctionnement simple. L'excution est squentielle, les commandes sont excutes les unes la suite des autres. Les commandes peuvent se suivre sur la mme ligne mais il faut les sparer par des ; L'execution de la commande s'effectue pas l'appuie de la touche entre . Exemples:
$ commande1 ; commande2

La suite de commande : % commande1 ; commande2 ; commande3 correspond la squence :


$ commande1 $ commande2 $ commande3

Excution en tache de fond :

Document sous licence CC (Crative Commons)

-6-

G3L Lionel JAMES


$ commande &

Shell Bash

Excution asynchrone :
$ commande1 & commande2

Nous tudierons plus en dtails lutilisation de caractre & dans la partie Pipeline et paralllisme du cours.

Quelques commandes de base


Le catalogue de quelques commandes de bases est dj assez fournit comme vous allez pouvoir le constater. L'intrt tant d'en connatre le maximum sinon la commande man sera toujours l pour vous aider! Toutes ces commandes sont sensibles la case (majuscule/miniuscule), le caractre d'espacement servant de sparateur. cat : Lit (concatne) un ou plusieurs fichier(s), affichage sur la sortie standard cd : ChangeDirectory, change de rpertoire. 'cd' seul permet de revenir dans le home directory chmod : CHangeMODe - change le mode d'accs (permissions d'accs) d'un ou plusieurs fichier(s) chown : CHangeOWNer - change le propritaire d'un ou de plusieurs fichier(s) cp : copier des fichiers crontab : planification de tches cut : Retire des parties prcises de texte dans chaque ligne d'un fichier date : Affiche la date selon le format demand dd : DevicetoDevice - Recopie octet par octet tout ou partie du contenu d'un priphrique (habituellement de stockage) vers un autre pripherique. df : affichage de la quantit d'espace libre disponible sur tous les systmes de fichiers du : DiksUsage - l'utilisation de disque echo : Affiche du texte sur la sortie standard ( l'cran) exit : arrte l'excution du shell find : recherche de fichiers fsck : FileSystemChecK - vrification d'intgralit de systme de fichiers grep : recherche dans un ou plusieurs fichiers les lignes qui correspondent un motif groupadd : Ajouter un groupe d'utilisateurs gunzip : dcompression de fichiers gzip : compression de fichiers head : affiche les premires lignes (par dfaut 10) d'un fichier help : affiche une aide sur les commandes internes de bash history : affiche lhistorique des commandes dj utilises kill : envoyer un signal un processus less : programme d'affichage l'cran ln : cration de liens ls : liste le contenu des rpertoires man : Une des plus importantes! affiche les pages de manuel de la commande qui suit. mkdir : MaKeDIRectory - cre un rpertoire mkfs : MaKeFileSystem - cration de systmes de fichiers more : programme d'affichage l'cran mount : monter un systme de fichiers

Document sous licence CC (Crative Commons)

-7-

G3L Lionel JAMES

Shell Bash

mv : dplacer, renommer un fichier ps : affiche les processus en cours d'excution pwd : Print name of current/working directory - affiche le chemin complet du repertoire courant rm : suppression de fichiers rmdir : Remove empty directories - suppression d'un dossier vide tail : affiche les 10 dernires lignes d'un fichier tar : cration d'archives su : Substitute User identity ou Switch User - prendre l'identit d'un utilisateur uname : Affiche des informations sur le systme. useradd : ajouter un utilisateur whereis : localiser une commande (quivalent which).

Les man pages


Comme on la vu, le nombre de commandes est assez importante, et encore, nous nen avons vu quune toute petite partie ! Accder la documentation en ligne de commande se rvle donc Essentielle tout utilisateur du shell, mme lexpert. La syntaxe pour appeler la documentation dune commande est simple : man commande man n commande n - le numro de la page man (vous le verrez en haut gauche)
$ man crontab

En rgle gnrale dans la partie SEE ALSO d'une page de "man", vous trouverez la liste des commandes qu'il est conseill de consulter ayant un rapport direct avec la commande dont vous lisez le manuel. Regardez la partie SEE ALSO et vous remarquerez les pages qui sont conseilles de consulter. Cela veut dire qu'on peut taper :
$ man 5 crontab $ man 8 cron

la touche "q" pour quitter la page man et revenir l'invite de commande (prompt) Pour obtenir la description succincte d'une commande, on va utiliser l'option "-f" man -f commande whatis commande Pour connatre les rubriques qui contiennent dans leur prsentation un mot cl, l'option "-k" : man -k commande

Document sous licence CC (Crative Commons)

-8-

G3L Lionel JAMES

Shell Bash

Manipuler des variables


Aprs connexion, l'utilisateur est connect dans son environnement. Cela signifie que le shell met sa disposition des variables d'environnement, c'est--dire un conteneur mmoire dans lequel des donnes propre chaque utilisateur ou au systme sont stockes. Pour afficher le contenu d'une variable d'environnement, la commande echo $NOM_VARIABLE peut tre utilise. Le nom des variables d'environnement est par convention en majuscules, il est donc ncessaire de respecter la case pour ces variables.

Variables d'environnement connatre


HOME, USER, GROUPS, UID, PWD, SHELL, PATH, HOSTNAME

HOME contient le rpertoire d'utilisateur USER contient le login d'utilisateur PWD contient le rpertoire courant SHELL contient le nom du shell de connexion PATH contient la liste des rpertoires o se trouvent les commandes que l'utilisateur peut excuter HOSTNAME contient le nom de la machine HISTSIZE contient la taille maximale des commandes excutes contenues dans le fichier historique PS1 contient les paramtres d'affichage de l'invite de commande du shell PS2 contient le prompt

Exemples: Rcurer les variables globales denvironnement :


$ env

Rcurer toutes les variables denvironnement + variables locales :


$ set

Donne linvite de commande du shell :


$ echo $PS1

Donne linvite du prompt :


$ echo $PS2

Variables locales
Ici, nous allons juste voire comment bash peut se transfromer en petite calculatrice ou executer de petites commandes trs simples. Cela nous donnera un aperu de ce quest une variable locale et louverture que cela propose lorsque nous tudierons les scripts .

Document sous licence CC (Crative Commons)

-9-

G3L Lionel JAMES

Shell Bash

Ici, nous effectuerons juste un affichage Hello world et laddition de 2 variables A et B : Exemples: Pour faire afficher au terminal sur lcran la chane Hello world au travers dune variable locale :
$ var=Hello world $ echo bonjour, $var

Maintenant le calcul de A + B :
$ A=1 ;B=2 $ echo $A+$B

ne donne pas ce quoi lon sattend normalement, bash traite les valeurs des variables comme des chanes de caractres. On peut effectuer des calculs sur des nombres entiers, en utilisant la syntaxe $(( ... )) pour dlimiter les expressions arithmtiques:
$ echo $(($A+$B))

Fichiers de configuration du shell


Au moment de la connexion, dans une console virtuelle ou l'ouverture d'un terminal en mode graphique, le shell utilise des informations qui se trouvent dans certains fichiers (.bashrc, .bash_profile, etc) Le comportement du shell peut tre modifi en ditant ces fichiers. Le fichier .bashrc est par exemple utilis dans le chapitre sur les alias. Pour ce qui est de la configuration de votre shell vous devez attendre un peu, a ne sera pas pour tout de suite. Vous apprendrez le faire avec le temps, donc patience

Document sous licence CC (Crative Commons)

- 10 -

G3L Lionel JAMES

Shell Bash

De la navigation lutilisation
Naviguer dans larborescence du systme de fichiers
Dans les systmes de la famille Unix, la racine reprsente le sommet de l'arborescence des rpertoires Elle est reprsente par le caractre / (slash) et signifie "root" (racine en franais). Tous les rpertoires de votre systme sont lis la racine de faon directe ou indirecte. Concernant les syntaxes utiliser pour naviguer dans larborescence du systme de fichiers : O suis-je ? Une chose trs importante savoir quand on est connect dans un shell, c'est de savoir o lon se trouve dans l'arborescence : La commande pwd (PrintWorkingDirectory) affiche votre localisation dans l'arborescence.
$ pwd

Le chemin absolu Le chemin absolu reprsente l'arborescence complte de fichiers, en partant de la racine Exemple : Le fichier b.txt se trouve dans /home/user/doc/text Vous vous trouvez dans /home/user/ascii Le chemin absolu vers b.txt est donc /home/user/doc/text/b.txt Quelque soit votre localisation dans l'arborescence l'utilisation du chemin absolu est le moyen le plus sr pour accder au fichier dsir. Le chemin relatif Le chemin relatif correspond laccs un fichier dans l'arborescence rapport votre localisation dans le shell. On utilise les notations . et/ou .. . nous permet de descendre dans l'arborescence du rpertoire courant : indique le rpertoire courant. .. nous permet dans un 1er temps de monter en arborescence dans le but d'atteindre d'autres rpertoires : indique le rpertoire parent.
$ cd ..

Se deplacer dans laborescence La navigation dans larborescence revient donc utiliser les commandes vues ci-dessus. Mais lcriture des chemins absolus peut tre fastidieux et souvent des erreurs se glissent dans la syntaxe, cest l que la compltion de commande nous vient en aide.

Document sous licence CC (Crative Commons)

- 11 -

G3L Lionel JAMES

Shell Bash

Compltion de commandes
Tapez une commande dans un terminal ou ne serait-ce que de se rappeler de sa syntaxe n'est pas une chose toujours facile. Malgr a, il existe une touche trs pratique sous le shell qui vous permet la compltion des commandes . Supposons que jai a taper /usr/bin/tail La compltion s'obtient en utilisant la touche TAB Pour a on va commencer avec le 1er caractre...

Je tape /u et j'appuie sur TAB o Le shell va complter et il va crire /usr/ o A ce moment j'ajoute un b donc je suis avec /usr/b o J'appuie de nouveau sur TAB et j'aurai /usr/bin/ o A ce moment j'ajoute ta, donc j'aurai /usr/bin/ta o J'appuie 2 fois sur TAB Le shell sur mon systme trouve 4 correspondances tac tack tail tasksel Je vais continuer et je vais ajouter un i donc j'aurai /usr/bin/tai J'appuie de nouveau sur TAB et j'obtiens /usr/bin/tail

Ainsi, la compltion nous permet de faire des conomies en ce qui concerne l'criture de la commande et dans le mme temps la sret de la syntaxe. Donc utiliser sans modration.

Historique des commandes


Les commandes excutes sont enregistres dans un historique. La variable HISTSIZE contient le nombre maximal des commandes enregistrer. Vous pouvez accder l'historique avec la commande history
$ history n | less

n - l'option n permet d'afficher les n dernires commandes (facultatif) less - la commande "less" vous permet de naviguer dans l'historique o les flches haut et bas vous permettent de naviguer dans l'historique o !n - permet d'excuter la commande correspondant au numro "n" dans la liste sans avoir la retaper

Document sous licence CC (Crative Commons)

- 12 -

G3L Lionel JAMES

Shell Bash

Les raccourcis clavier


cd : revenir dans le rpertoire personnel cd - : revenir dans le rpertoire prcdent (uniquement si vous avez excuter un cd) Ctrl+l : effacer l'cran Ctrl+c : arrt d'une commande Ctrl+z : suspendre(mettre en pause) une commande CTRL+t : corrction d'une erreur de frappe en inversant 2 lettres Ctrl+a : aller au dbut de ligne Ctrl+e : aller la fin de ligne Ctrl+s : interruption de la sortie de terminal (masquer la saisie) Ctrl+q : annuler l'interruption de la sortie (afficher la saisie) Ctrl+u : efface tout gauche du curseur Ctrl+w : efface le mot gauche du curseur Ctrl+k : efface le mot droite du curseur Ctrl+y : coller la saisie prcdente Ctrl+d : efface le caractre courant, si la ligne est vide deconnexion Alt+b : se dplacer en avant, mot par mot dans la ligne de commande Alt+f : se dplacer en arrire mot par mot dans la ligne de commande Alt+d : efface le mot suivant Alt+t : change le mot courant avec le mot prcdent Alt+c : met en majuscule la lettre courante, tout le reste dut mot courant en minuscules, puis se deplace au mot suivant Alt+l : met en majuscules partir de la lettre courante jusqu' la fin de mot, puis se deplace au mot suivant Alt+u : met en minuscules partir de la lettre courante jusqu' la fin de mot, puis se deplace au mot suivant Alt+Backspace : effacer le mot prcdent (quivalent Ctrl+w)

Document sous licence CC (Crative Commons)

- 13 -

G3L Lionel JAMES

Shell Bash

Les entres/sorties et redirection


Redirections standards
Une partie qui peut se reveler obscure mais qui est vraiement trs pratique lorsquon la matrise est la notion de redirection des entres / sorties standard. Pour comprendre, il faut visualiser lutilisateur devant son clavier et son cran. Il a donc a sa disposition : Son clavier : qui lui permet dinsrer des commandes, dans le jargon informatique cela correspond stdin Son cran : qui lui permet de voire safficher les commandes traits par son terminal, et qui dans le jargon informatique correspond stdout, voir mme les erreurs eventuelles suite au traitement de commandes par le terminal, correspond stderr. Ensuite, chacun de ces 2 priphriques possde un numro de fichier descripteur de 0 2 clavier 0 Stdin Stdout ecran 1 ecran 2 Stderr La redirection consiste rediriger un flux dinformation ou une commande vers le bon descripteur de fichier en utilisant le symbole > ou < suivant le sens de la direction du flux ou en utilisant d'autres destinations que les descripteurs standards. Pour raliser une redirection on utilise la syntaxe : commande > fichier - redirection en mode criture vers le fichier, le fichier est cr s'il n'existe pas et son contenu sera remplac par le nouveau si le fichier existe dj. commande >> fichier - redirection en mode ajout vers le fichier, le fichier est cr s'il n'existe pas et le rsultat sera ajout la fin de fichier. commande < fichier - la commande lit depuis le fichier Combin des commandes de base, ceci permet de raliser des traitements tonnants ! mais necessite aussi une longue pratique mais des commandes simples peuvent se rvler dj trs utiles pour faire un peu de tout. 2>fichier et/ou 2>>fichier : pour rediriger la sortie d'erreur standard vers fichier. >&2 : redirige la sortie standard vers la sortie d'erreur. 2>&1 : redirige la sortie d'erreur standard vers la sortie standard. n>&m : tout ce qui crit sur le descripteur n sera envoy vers le descripteur m.

Exemples:

Document sous licence CC (Crative Commons)

- 14 -

G3L Lionel JAMES

Shell Bash

- envoyer le contenu de fichier1 dans le fichier2. Si le fichier2 existe son contenu d'origine sera supprim, le fichier2 est cr s'il n'existe pas
$ cat fichier1 > fichier2

- envoyer le contenu de fichier1 dans le fichier2 - mode ajout si le fichier2 existe, le contenu du fichier1 est ajout la fin de fichier2, si le fichier2 n'existe pas, il sera cr
$ cat fichier1 >> fichier2

- Recherche dans la racine le fichier appel fichier.txt, les erreurs au lieu d'tre envoyes sur STDERR ( l'cran) sont envoyes dans /dev/null (sorte de poubelle sans fin)
$ find / -name fichier.txt 2>/dev/null

- Recherche dans la racine le fichier appell fichier.txt, les erreurs au lieu d'tre envoyes sur STDERR ( l'cran) sont envoyes dans le fichiers erreur.txt
$ find / -name fichier.txt 2>erreurs.txt

- On veut afficher un message d'erreur, donc utiliser la sortie d'erreur.


echo "$0 : vous n'avez pas le droit d'crire dans le fichier $1">$2

Pipeline et paralllisme
Donc en plus des redirection, il existe aussi les commandes pipes ou pipe (tune en anglais), enchanes par un | et des commandes executes en parallle &. Le shell cre les processus associs chaque commande, et dtourne la sortie du premier sur l'entre du second. commande1 | commande2 - le rsultat de la commande1 est utilis par la commande2 commande1 & commande2 - les commandes sont excutes simultanment, commande1 s'excutant en arrire-plan commande1 && commande2 - si la commande1 russi la commande2 est execute commande1 || commande2 - la commande2 s'excute seulement si la commande1 choue commande1;commande2 - les commandes sont excutes dans l'ordre Le pipe : Par exemple, wc est une commande qui calcule le nombre d'octets, de mots, de lignes de son
$ cat *.pas | wc -l

Sans le savoir, cat affiche le contenu sur stdout, mais pas l'cran, sur le stdin de wc. Sans le savoir, wc lit son stdin et cumule les retours la lignes \n. Il affiche alors sur stdout le rsultat, qui est le nombre de ligne de tous les fichiers .pas d'un rpertoire. C'est simple, et pas facile faire dans d'autres environnements. Le paralllisme et la dpendance : On peut lancer une commande en parallle pendant que la principale continue son execution : Document sous licence CC (Crative Commons) - 15 -

G3L Lionel JAMES


$ echo a & echo b

Shell Bash

Pour la dpendance des commandes :


$ commande1 && commande2 && commande3

La commande2 s'excute ssi le code de sortie de commande1 vaut 0. De mme commande3 s'excute ssi le code de sortie de commande2 vaut 0.
$ commande1 || commande2 || commande3

La commande2 s'excute ssi le code de sortie de commande1 est diffrent de 0. De mme commande3 s'excute ssi le code de sortie de commande2 est diffrent de 0. Exemple :
$ echo si ok && echo reussi

avec une erreur :


$ ech si ok && echo reussi

Vous remarquez que dans le 1er cas les 2 commandes s'excutent. En revanche dans le 2me cas j'ai fait volontairement une erreur de syntaxe pour la 1re commande. Le shell ne regarde mme pas le 2me commande et il s'arrte en nous disant que ech n'est pas une commande connue. Pour lalternative :
$ echo si ok || echo reussi

Dans le 1er cas vous remarquez que seulement la 1re commande s'excute. Dans le 2me cas le shell affiche une erreur pour la 1re commande mais il excute quand mme la 2me.

Les scripts
Les shells ne sont pas seulement des interprteurs de commandes mais galement de vritables langages de programmation. Un script correspond une suite de commandes crite dans un fichier. Ceci permet dautomatiser certaines tches rptitives ou de faire de petits programmes adapts aux besoins de lutilisateur. Ici, nous crerons un script pour le shell bash. 3 tapes suffisent : Crer un fichier contenant comme premire ligne la syntaxe suivante: Rendre ce fichier executable en utilisant la commande:

#! /bin/bash $ chmod u+x script

Executer le script en utilisant la commande: $ script (ou le path s'il ne se trouve pas dans $PATH) ou
$ .\script

Document sous licence CC (Crative Commons)

- 16 -

G3L Lionel JAMES Exemple : Crer le fichier test (touch Progtest) et insrer le contenu suivant :
#! /bin/bash______# interprteur commande1 commande2___# mme chose que : commande1; commande2

Shell Bash

Si on ne veut pas que le fin de ligne soit interprt, il suffit de mettre un "\ " en fin de ligne.
#! /bin/bash commande\ Suite de la commande trs longue

Ressources documentaires : http://www.bash-linux.com/unix-man-pipe-francais.html http://www.linux-france.org/article/dalox/unix04.htm http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/index.html http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP2003/tp03.html http://www.commentcamarche.net/faq/sujet-4801-guide-d-utilisation-du-shell-pour-debutant http://www.commentcamarche.net/faq/sujet-6353-l-arborescence-du-systeme-de-fichiers-delinux http://www.framasoft.net/article2425.html http://easynux.org/forum/viewtopic.php?id=389 http://www.commentcamarche.net/contents/linux/linusr.php3 http://www.tuteurs.ens.fr/unix/ http://lifc.univ-fcomte.fr/~dedu/docs/script.html#exemple

Document sous licence CC (Crative Commons)

- 17 -