Vous êtes sur la page 1sur 17

Shell Bash

G3L Lionel JAMES

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

Shell Bash

$ commande &

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
0
Stdin  clavier
Stdout  ecran
1
2
Stderr  ecran
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

Shell Bash

$ echo a & echo b

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:

#! /bin/bash

Rendre ce fichier executable en utilisant la commande:

$ 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

Shell Bash

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

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 -

Vous aimerez peut-être aussi