Académique Documents
Professionnel Documents
Culture Documents
Cours Shell Bash
Cours Shell Bash
-1-
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.
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.
-2-
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 !
/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.
-3-
Shell Bash
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.
-4-
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.
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.
-5-
Shell Bash
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.
-6-
Shell Bash
$ commande &
Excution asynchrone :
$ commande1 & commande2
Nous tudierons plus en dtails lutilisation de caractre & dans la partie Pipeline et
paralllisme du cours.
-7-
Shell Bash
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
-8-
Shell Bash
Exemples:
Rcurer les variables globales denvironnement :
$ env
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 .
-9-
Shell Bash
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))
- 10 -
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 ..
- 11 -
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...
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.
- 12 -
Shell Bash
- 13 -
Shell Bash
Exemples:
- 14 -
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
- 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
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 -
Shell Bash
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 :
#! /bin/bash
- 16 -
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
- 17 -