Vous êtes sur la page 1sur 53

Collge LaSalle International, Tunis Session Printemps 2010

Systme dexploitation
Code : 420-235-AS

Chapitre 1

INTRODUCTION A UNIX
Historique
La premire version est cre sur le systme GECOS en 1969, ce programme avait des rsultats mdiocres en temps partag alors que lon exigeait des temps de rponse trs courtes. En 1971 Thompson et Ritchier se mit alors transporter UNIX sur une machine (PDP11) plus puissante que PDP7. En 1972 Kermigam et Ritchier ont cre le langage C pour facilit le partage dUnix. En 1973 Kermigam et Ritchier : rcriture dUnix en C (assembleur). En 1990 : Linus Torvalds reprend le dveloppement de Minix => naissance de LINUX.

1 Principes de base UNIX 1.1 Les processus ou process


Tout logiciel est la base un programme constitu d'un ensemble de lignes de commandes crites dans un langage particulier appel langage de programmation. C'est uniquement quand on excute le logiciel que le programme va raliser la tche pour laquelle il a t crit, dans ce cas l on dira qu'on a affaire un processus ou process. En d'autres termes le programme est rsolument statique, c'est des lignes de code, alors que le process est dynamique, c'est le programme qui s'excute. Chaque processus : A un ID de processus (PID) process identifier A un processus pre (PPID). Sexcute dans un contexte de scurit spcifique A un environnement, des fichiers ouverts, une mmoire etc. 1

Le degr de priorit du processus.

La commande ps (process status) affiche la liste des processus en cours dexcution. $ps PID TT Time command 83 tt80 0 :01 sh (bash) 275 tt80 0 :05 ps TT : Terminal auquel est rattach le processus Time : le temps dexcution par le processus Command : nom de la commande associe au processus

1.2 Dfinition d'un systme d'exploitation


Un systme d'exploitation est un ensemble de programmes charg de faire l'interface entre l'utilisateur (logicielle) et le matriel. C'est dire quand un utilisateur tape une commande au niveau d'un logiciel (ou application) ou vous avez appuy sur une icne dun logiciel, le logiciel interprte la commande, la transmet au systme d'exploitation qui la transmet au matriel dans un format comprhensible. (Normalement un logiciel ne devrait jamais " discuter " avec le matriel, le systme d'exploitation se place entre les deux pour transmettre et ventuellement rejeter des commandes illicites.)

1.3 Gestion de la mmoire


Il existe deux types de mmoire, la mmoire volatile et la mmoire statique, quand on teint et rallume l'ordinateur, toutes les donnes prsentes dans la premire ont disparu, et les donnes dans la seconde sont toujours prsentes. (Concrtement la mmoire volatile se trouve dans la RAM). Dans le vocabulaire Unix, quand on parle de mmoire on sous entend mmoire volatile ou RAM. Tout programme qui s'excute, ou process, a besoin de mmoire pour y stocker les donnes quils manipulent. Malheureusement l'ordinateur dispose gnralement d'une quantit de mmoire limite et non extensible. UNIX doit donc faire en sorte que la mmoire soit bien partage entre tous les process, pour cela ont recours a un espace mmoire plus grand on parle de mmoire virtuel ou bien le swap (swapping : va et vient entre 2

disque dur et mmoire) qui est gale 2 fois la RAM. (sert stoker des processus et non de stocke des informations.)

CPU Disque dur


RAM

Swap

1.4 Gestion des fichiers


Sous UNIX tout est fichier y compris le matriel. UNIX fournit les outils ncessaires (utilitaires) pour stocker les donnes et pour pouvoir les rcuprer rapidement et facilement. Ces fichiers se trouvent sur le disque dur, on nomme cela un systme de fichiers ou File System. UNIX fournit, en outre, un mcanisme de protection des fichiers. Plusieurs utilisateurs peuvent travailler en mme temps sur la mme machine, c'est la notion de multi-utilisateurs. Chaque utilisateur du systme dispose de ses fichiers, UNIX lui donne le moyen de protger ses fichiers, et d'accorder le droit ou non d'autres utilisateurs d'accder ses fichiers.

2 Les utilisateurs UNIX


Sur un systme UNIX, on trouve deux types de personnes, celle qui va utiliser le systme dans le but de produire quelque chose, le systme UNIX est pour eux un moyen, un outil. Cette personne est l'utilisateur UNIX, on peut trouver dans cette catgorie, le programmeur, l'utilisateur de base de donnes, etc. La deuxime catgorie de personnes est charge de l'installation, de la configuration et de la

bonne marche du systme UNIX, ce sont les administrateurs systmes UNIX. Sur un systme UNIX, les utilisateurs UNIX ont des droits limits, c'est dire que certaines commandes leurs sont interdites et ils n'ont pas accs certaines parties du systme. Les administrateurs systmes ont par contre tous les droits sur le systme. Gnralement sur un systme UNIX, on limite volontairement le nombre d'administrateur (appel ROOT ou super utilisateur). UNIX est un systme dexploitation multi-utilisateurs. Cela signifie que plus dune personne peuvent tre connectes un mme ordinateur au mme moment. (videmment, chaque utilisateur doit travail sur son propre terminal) Un utilisateur pourrait mme tre connect son compte depuis plus dun terminal en mme temps. Ensembles des Utilisateurs

0n

Classe obligatoire le root Administrateur du systme, il a tous les droits

Classe facultative classe des utilisateurs droits limits restreints

3 Les fonctions principales


UNIX est un systme d'exploitation dont voici les tches principales :

3.1 Partage des ressources quitables


UNIX veille ce que toutes les ressources de l'ordinateur (imprimante, mmoire, ...) soient partages quitablement entre tous les processus. Par exemple si vous travaillez sur une application du genre base de donnes, et vous lancez une connexion Internet. Vous retrouvez donc avec deux process

lancs en mme temps, c'est le systme d'exploitation qui est charg de faire en sorte que les deux process puissent utiliser les ressources de manire quitable et que le deuxime process lanc n'attende pas la terminaison du premier pour se lancer. Le fait de pouvoir excuter plusieurs process ou tches en mme temps, en parallle, est appel multitches. UNIX est multitches.(Windows NT 4.0)

3.2 Interface avec le matriel


UNIX par dfinition des systmes d'exploitation fait en sorte qu'aucun process accde directement une ressource matriel (disque dur, lecteur de disquette,...). Pour accder ces ressources on passe par l'intermdiaire de fichiers spciaux, un fichier spcial est vu pour un utilisateur comme un fichier classique, pour crire sur une disquette, on n'a qu' crire dans le fichier spcial du lecteur de disquette. De mme pour lire dans un disque dur, on va lire le fichier spcial du disque dur. (Tout est fichier)

3.3 Structure du systme UNIX ----------------------------------------------------Utilisateur (utilisation de l'environnement) ----------------------------------------------------Shells (gestion de programmes) ----------------------------------------------------Programmes (systme ou utilisateurs) ----------------------------------------------------Noyau (ou micronoyau multitche, ventuellement multithread) ----------------------------------------------------Matriel (processeur(s), disques, imprimantes, clavier, cran)

Concrtement le systme d'exploitation est lui aussi un ensemble de programme et de sous programmes regroups dans ce qu'on appelle un noyau (kernel en anglais). On a vu auparavant que les processus ne pouvaient pas accder directement aux ressources matrielles, en fait les processus passent par le noyau pour y accder, pour cela ils disposent d'un ensemble de commandes appeles " appels systme "

UNIX. Ces appels systmes commandent deux composantes principales du noyau, le gestionnaire de processus et le systme de gestion de fichiers. Le premier a pour rle de faire en sorte que les processus s'excutent et accdent la mmoire de manire quitable (, on le nomme aussi scheduler). Le deuxime a pour rle la gestion du systme de fichiers, notamment pour ce qui concerne les droits d'accs. Ce sont ces deux derniers composants du noyau qui accdent directement au matriel.

3.4 Le shell
Pour faire marcher l'ordinateur, l'utilisateur dispose des logiciels ou d'un utilitaire qui lui permet la saisie directe de commandes. On appelle cet utilitaire le shell (coquille en franais). Son rle est d'interprter les commandes de l'utilisateur avant transmission au noyau, c'est pourquoi on parle aussi d'interprteur de commandes. On trouve l'quivalent sous DOS qui peut tre considr comme un shell. Il existe plusieurs types de shell (sh, ksh, csh), ils se diffrencient par la syntaxe et la richesse des commandes. Le plus commun est le Bourne-Shell, on trouve aussi le CShell qui s'apparente au langage de programmation C, le Korn Shell, le Posix Shell, et sous Linux le bash-shell. Le shell est aussi un langage de programmation comportant une syntaxe particulire, des variables locales ou globales, des structures de contrle similaires celles de C. Le shell reconnat les commandes entres au clavier et galement celles provenant dun fichier (script).

3.5 Modle de scurit dUNIX


Les utilisateurs et les groupes sont utiliss pour contrler laccs aux fichiers et aux ressources du systme. Chaque processus a un propritaire et ne peut avoir accs quaux ressources auxquelles son propritaire a accs. Chaque fichier du systme est la proprit dun utilisateur. De plus, les utilisateurs ne peuvent changer, pas mme lire, les fichiers des autres sans avoir la permission. Cela signifie que UNIX est virtuellement immunis contre les virus informatique.(sous Windows les utilisateurs ont un accs total

lensemble du systme, ce qui donne une libert complte aux programmes destructeurs.). Les utilisateurs se connectent au systme laide de leur nom dutilisateur et de leur mot de passe.

Chapitre 2

UTILISATEURS ET FICHIER SOUS UNIX


1 Utilisateurs 1.1 Utilisateur normal (uid suprieur 0(User identification))
La plupart des utilisateurs Linux ont un compte dutilisateur normal. Les comptes dutilisateur ont plein accs leur rpertoire et sous rpertoires mais ils nont pas accs aux rpertoires du systme et aux rpertoires personnels des autres utilisateurs. Les utilisateurs appartiennent un ou plusieurs groupes. Un groupe peut avoir un ou plusieurs utilisateurs. Les fichiers appartiennent un utilisateur et un groupe. Les autorisations daccs un fichier peuvent tre moins restrictives pour les membres du mme groupe que pour les autres utilisateurs, le propritaire du fichier est libre de configurer les niveaux daccs. Remarque : Les gid sont stocks dans le fichier /etc/group.

1.2 Super Utilisateur (uid 0)


Linux prvoit un compte utilisateur spcial qui jouit dun accs illimit tous les fichiers, priphriques, programmes du systme et toutes les commandes. Ce type de compte est connu sous le nom de compte root ou compte super utilisateur gnralement est attribu au administrateur systme Linux. Remarque : Les noms dutilisateurs et les UID sont stocks dans le fichier /etc/passwd.

2 Cration dun nouvel utilisateur

Pour cre un nouveau utilisateur il faut entrez comme super utilisateur (root) et tapez la commande : $useradd nom_utilisateur $passwd nom_utilisateur $su nom_utilisateur $userdel //changer dutilisateur.

3 Cration de groupe priv dutilisateurs :


Certains utilisateurs ont parfois besoin de collaborer entre eux lors dun projet. Il est alors possible dutiliser des groupes pour y parvenir. Ladministrateur systme cre un nouveau groupe et y ajoute ensuite ces utilisateurs. $groupadd works_gestion_de_projet $usermod G works_gestion_de_projet hatem // ajouter un utilisateur au nouveau groupe.

4 Ouverture et fermeture de session 4.1 Ouverture de session


Avant de tenter une connexion, il faut d'abord vous assurer que vous ayez t dclar sur la machine, c'est dire que vous possdiez un compte utilisateur caractris par un nom ou login et un mot de passe associ. Une fois le login et le mot de passe saisi, deux possibilits peuvent s'offrir vous, vous pouvez retrouver un cran noir, avec tout simplement un caractre du genre $ ou > (appel prompt) suivi du curseur qui clignote apparat. Vous tes dans un shell prt taper des commandes. Par exemple, sous Linux le prompt par dfaut est le suivant: [login@localhost login]$ Ou alors vous pouvez trouver un environnement fentr avec utilisation de la souris, o il vous sera possible de lancer un shell pour pouvoir taper des commandes UNIX.

4.2 Changement de mot de passe


En vous dclarant sur la machine, on vous a impos un mot de passe, vous pouvez le changer, pour cela vous disposez de la commande passwd. Certains UNIX font en sorte que vous ne puissiez pas saisir un mot de passe simple, il faudra mettre au

moins 6 caractres, avec au moins un, voie deux, caractre non alphabtique. Rappelons que quand vous saisissez votre mot de passe, il ne parat pas en clair, aussi par prcaution, le systme vous demande de le saisir deux fois.

$passwd Old passwd :****** Setting password for user : salem New password : ****** Reenter password :****** $

ATTENTION : Si vous avez oubli votre mot de passe, vous devez vous adresser l'administrateur du systme (root) qui est le seul habilit vous dbloquer. Certains systmes UNIX utilisent yppasswd.

4.3 Fermeture de session


Quand on a fini d'utiliser le systme, on doit se dconnecter ou fermer la session. Si vous tes dans un environnement non graphique, il vous suffit au prompt de taper logout. Vous retrouvez alors avec le prompt de login, un autre utilisateur pourra alors utiliser la machine.

5 Commandes UNIX 5.1 Syntaxe d'une commande


La syntaxe standard d'une commande UNIX est la suivante : Commande -options arg1 arg2 arg3 Les options varient en fonction de la commande, le nombre des arguments qui suivent dpend aussi de la commande, par exemple la commande : sort -r mon_fichier sort (trier) permet de trier un fichier, l'option r (reverse), permet de trier en sens inverse le fichier. cp -R mon_repertoire nouveau_repertoire

10

La commande cp (copy) copie un rpertoire (option R) vers un autre rpertoire, on a ici deux arguments. On peut coupler deux options : ps -ef, avec cette commande on a l'option e et f. A noter que pour introduire une option on met certaines commandes (tar par exemple)).

(, ce n'est pas ncessaire pour

5.2 Autres commandes intressantes:


$ls //permet la visualisation de fichier, ls est lquivalent de Dir sous Dos.

$ls l // (ll) permet de lister et de connatre les droits daccs aux fichiers et rpertoires. $ls /home/salem //visualisez le continu du rpertoire salem.

$ls a* // si vous chercher un fichier qui commence par la lettre a. $pwd // Affiche le chemin daccs absolu au rpertoire courant.

$cd // changer de rpertoire courant. $cd..

Par un chemin daccs absolu :

$cd /home/salem/linux/works //changer le rpertoire courant par /home/salem/linux/works.

Par un chemin daccs relatif :

$cd work $cd ../bin // si vous tes sous dev $cd ../../work // retour de deux rpertoire. La commande cd peut galement tre utilis pour revenir au rpertoire prcdent en tapant cd- .

Remarque : Vous pouvez excute plusieurs commande ensemble dparez par un point virgule ; Ex : $ls ; ps

11

Pour trouvez laide dune commande il suffit de tapez man suivi du nom de la commande ou bien le nom de la commande suivi du mot help Ex : $man ls $ls --help $info ls

6 Les droits d'accs 6.1 Identification de l'utilisateur


On a vu auparavant que pour pouvoir se connecter sur une machine, on doit tre dclar sur la machine. Tout utilisateur appartient un groupe, concrtement dans une universit par exemple vous aurez les professeurs dans le groupe enseignant et les lves dans le groupe lve. Chaque utilisateur est identifi par un numro unique UID (User identification), de mme chaque groupe est identifi par un numro unique GID (Group identification). Vous pouvez voir votre UID et GID en ditant le fichier /etc/passwd, (c'est respectivement troisime et quatrime champ, aprs le nom (le login), et le mot de passe crypt.).

6.2 Dfinition des droits d'utilisateur


UNIX distingue 6 types de fichiers : Les fichiers ordinaires (ordinary file) //pour stocke les donnes. Les fichiers rpertoires (directory files) et sous rpertoires. Les fichiers spciaux (spcial files ou devices) ou les pilotes. Les fichiers dentre sortie (named pipes) //communication inter-processus. Les fichiers Socket communication simultane entre des programmes. Les fichiers de lien (links) liaison logique //fichier mail.

6.3 Cas d'un fichier classique


Avec UNIX les fichiers bnficient d'une protection en lecture, criture et excution, c'est dire vous pouvez choisir si vous voulez que vos fichiers soient lisibles et/ou modifiables par d'autres, vous pouvez empcher que d'autres utilisateurs lancent vos

12

excutables. C'est le principe des droits d'accs. Nous avons vu qu'en tapant ls -l le premier champ correspondait au droit d'accs, on avait une sortie de ce type: -rwxrw-r-- 1 user users 34568 Dec 3 14 :34 mon-fichier La signification des lettres rwx et la suivante : r (read) on peut lire le fichier w (write) on peut modifier le fichier x (excutable) on peut excuter le fichier (c'est donc un excutable) . Le champ -rwxrw-r-- regroupe les droits du propritaire du fichier, du groupe auquel appartiennent le propritaire et les autres utilisateurs. Ont a donc : F

U Utilisateur

r w x

G r Groupe w

O Other

Donc rwx rw- r-U G all

rwx :droits sur le fichier du propritaire. rw- :droits sur le fichier du groupe auquel appartient le propritaire (users). r-- droits sur le fichier des autres utilisateurs (ceux n'appartenant au groupe users).

(Par exemple pour notre fichier le propritaire user a des droits en criture, lecture et excution, le groupe a un droit en lecture et criture mais aucun droit en excution, les autres utilisateurs ont uniquement le droit en lecture du fichier.) (Pour information le 1 aprs les droits signifie que le fichier mon-fichier n'a aucun lien qui pointe vers lui, si on avait eu 2, cela signifiait que quelque part dans l'arborescence, il y a un lien qui pointe vers lui, ce nombre s'incrmentant avec le nombre de lien).

6.4 Cas d'un rpertoire

13

Pour un rpertoire le x n'est pas un droit en excution, mais un droit d'accs au rpertoire, sans ce droit, on ne peut pas accder au rpertoire et voir ce qu'il y a dedans. En tapant ls -l sur un rpertoire, vous obtenez : drwxr-x--- 1 mohamed users 13242 Dec 2 13 :14 mon-rpertoire d signifie qu'on a affaire un rpertoire, rwx sont les droits du propritaire mohamed qui est autoris en lecture, criture et droit d'accs au rpertoire, droits du groupe users, autoris en lecture, droit d'accs au rpertoire, pas de droit en criture et les autres utilisateurs ---, aucun droit dans le cas prsent.

6.5 Cas d'un lien


Pour un lien, la signification est similaire celle d'un fichier classique, la diffrence que vous avez un l la place du - en tout dbut de ligne. lrwxrwxrwx 1 root root 14 Aug 1 01:58 Mail -> ../../bin/mail*

7 Commandes associes 7.1 Changer les droits : chmod


La commande chmod permet de modifier les droits d'accs d'un fichier (ou rpertoire). Pour pouvoir l'utiliser sur un fichier (ou un rpertoire), il faut tre le propritaire du fichier. u : propritaire (user). g : groupe (group). o : les autres (other). a : Tous les utilisateurs (all). (x: Droit en excution pour un fichier, droit d'accs pour un rpertoire.)

Exemple vous voulez donner un droit en criture pour le groupe du fichier mon_fichier : chmod g+w mon_fichier Pour supprimer le droit d'accs du rpertoire mon_rpertoire aux autres utilisateurs (autres que propritaire et utilisateurs du groupe). chmod o-x mon_repertoire

En tapant chmod u+x,g-w mon_fichier

14

Vous ajoutez le droit en excution pour le propritaire, et enlevez le droit en criture pour le groupe du fichier. chmod go rw test.txt Cette commande enlve au groupe et aux autres utilisateurs les autorisations de lire et de modifier le fichier test.txt. Remarque : lune de options trs utiles de chmod est F (rcursif), cette option permet de traverser une arborescence de rpertoire en entier pour changer les autorisations de tous ses fichiers et sous rpertoires.

Mthode numrique : On dfinit le poids des oprations : r=4, w=2 et x=1, si vous avez un fichier avec les droits suivants -rw-rw-rw-, pour les droits utilisateurs vous avez (r=)4+(w=)2=6, de mme pour le groupe et les autres. Donc -rw-rw-rw- est quivalent 666. En suivant la mme rgle rwxr-xr-- est quivalent 754. Pour mettre un fichier avec les droits -r--r--r-- vous pouvez taper : chmod 444 mon_fichier // c1c2c3 = user group other $ls l pour voir les changements. On appelle ce systme de notation, la notation octale.

7.2 Changer le propritaire


Vous pouvez " donner " un fichier vous appartenant un autre utilisateur, c'est dire qu'il deviendra propritaire du fichier. chown nouveau_propritaire nom_fichier Exemple : $chown user2 essai.cpp Lutilisateur u2 devient le propritaire du fichier essai.cpp.

7.3 Changer le groupe


chgrp nouveau_groupe nom_fichier La commande chgrp permet au propritaire dun fichier ou ladministrateur systme de donner la proprit dun fichier un autre groupe dutilisateurs. $chgrp formateur essai.jsp //le fichier essai appartient au gropue formateur. Remarque :

15

(-Ces deux commandes ne sont utilisables que si on est propritaire du fichier.) -Sur certains UNIX suivant leur configuration, on peut interdire l'usage de ces commandes pour des raisons de scurit.

7.4 Changer les droits par dfaut : umask


Quand vous crer un fichier, par exemple avec la commande touch, ce fichier par dfaut possde certains droits. Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un rpertoire (-rwxrwxrwx), ce sont les droits maximum. Vous pouvez faire en sorte de changer ces paramtres par dfaut. La commande umask permet de changer ces droits. Si vous tapez umask 022, vous partez des droits maximum 666 et vous retranchez 022, on obtient donc 644, par dfaut les fichiers auront comme droit 644 (-rw-r--r--) Au debut $ls l $umask 022 $ls l -rw-rr-- ---------------------. Si vous tapez umask 244, vous partez des droits maximum 666 et vous retranchez 244, on obtient donc 422, par dfaut les fichiers auront comme droit 422 (-r---ww-). Pour un rpertoire : Si vous tapez umask 022, vous partez des droits maximum 777 et vous retranchez 022, on obtient donc 755, par dfaut les fichiers auront comme droit 644 (-rwxr-xr-x). Remarque : umask n'est utilisable que si on est propritaire du fichier. Remarques importantes Lorsque le shell refuse une commande et affiche un message derreur, il est trs important de pouvoir rpondre aux trois questions suivantes. Qui vous tes ? O je suis ? Quels sont mes droits ? whoami pwd ls l -rw-rw-rw- ----------------------

7.5 Commandes dinformations sur les utilisateurs


Pour dcouvrir qui vous tes : whoami

Pour savoir quel groupe vous appartenez : groups, id Pour savoir qui est connect : who, users, w

16

8 Le systme de fichiers 8.1 Le chemin d'accs


Pour indiquer le chemin du fichier, on part de la racine (/), on indique le premier rpertoire travers, puis les autres, en sparant chacun des rpertoires d'un /. Ainsi donc pour notre fichier le chemin d'accs est : /home/mohamed/linux. On dit que le chemin du fichier est absolu, en partant de la racine, on sait exactement o se trouve le fichier. $cd /home/mohamed/divers/ Un chemin est dit relatif, quand il n'est pas ncessaire, d'indiquer le chemin complet, de l'endroit o on se trouve dans l'arborescence il suffit de rajouter le chemin par rapport ce mme endroit. En admettant qu'on se trouve sous /home/mohamed, si l'on veut accder notre fichier help, le chemin relatif au rpertoire courant est ./divers, (le point reprsentant le rpertoire courant). Ce qui donne en chemin absolu /home/mohamed/divers/. Exemple : $pwd /dev je veux passer vers /bin/snd $cd../bin //.. =retour en arrire dun rpertoire.

8.2 Commandes de gestion des fichiers


Pour grer les fichiers vous disposez des commandes suivantes:

touch mon_fichier cration d'un fichier vide, more mon_fichier visualisation d'un fichier page page, rm mon_fichier suppression d'un fichier, mv mon_fichier rpertoire d'accueil dplacement d'un fichier, mv mon_fichier nouveau_nom changement de nom d'un fichier, cp nom_fichier rpertoire_d'accueil/autre_nom copie de fichier,

17

file mon_fichier pour savoir si on a un fichier binaire (excutable) ou un fichier texte. On obtient pour un fichier texte, comme sortie mon_fichier : ascii text. La commande touch actualise la date daccs un fichier. C'est--dire si en applique la commande ls sur le fichier, ont obtient la date de dernier accs. Si ont excute la commande touch sur un fichier inexistant, un fichier vierge sera cre. $touch fourniture

La commande rm efface les fichiers. $rm test.doc Remarque : si on utilise rm avec loption rf elle effacera un rpertoire ainsi que tous les fichiers et sous rpertoires quil contient. $rm rf works La commande mv et utilis pour dplacer et /ou rnommer un fichier. $mv /X/Y/f /X // ici le rpertoire courant est X/Y. //dplacer et renommer le fichier database.

$mv database /tmp/f

$mv f1 f2 //si f2 existe sont ancien contenu sera cras. $mv f* /tmp //tous les fichiers commence par f sera transfrer dans le rpertoire tmp. La commande cp est utilise pour copier les fichiers. Pour copier un rpertoire entier et son contenu on utilise loption a. $cp /X/Y/f /X

$cp /X/Y/f /X/t //si le fichier t nexistait pas il sera cre, si non il sera cras.

8.3 Commandes de gestion des rpertoires


Pour grer les rpertoires, vous disposez des commandes suivantes : mkdir nom_de_rpertoire Cration d'un rpertoire rmdir nom_de_rpertoire Suppression d'un rpertoire vide mv rpertoire rpertoire_d'accueil dplacement d'un rpertoire mv rpertoire nouveau_nom Changement de nom d'un rpertoire Sous Linux, les rpertoires sont cres laide de la commande mkdir. Pour cre un rpertoire work excutez : $mkdir work //(make directory). Pour effacer un rpertoire, utilisez la commande rmdir $rmdir work

18

Remarque : -- La commande rmdir effacera uniquement les rpertoires vides. Pour effacer un rpertoire et son contenu, utilisez la commande rm -r -- Le rpertoire effacer ne doit pas tre le rpertoire courant. $pwd /usr/mdm $rmdir tmp // tmp et le sous rpertoire du mdm.

Chapitre 3

Lditeur vi
Objectifs
Utiliser lditeur vi Commencer et terminer une session ddition vi Positionner le curseur dans vi Insrer et effacer du texte Editer en utilisant vi Utiliser des recherches de texte par expressions rgulires dans vi

Vue densemble vi est labrviation de visual editor , diteur visuel. Il est lditeur de texte standard de Linux. Il est utilis dans de nombreux systmes dexploitation UNIX.

Lancer vi Syntaxe : vi mon_fichier Si le fichier existe, il est ouvert et son contenu saffiche si non vi cre un nouveau fichier. Modes vi vi opre en deux modes : mode commande (par dfaut) : naviguer, supprimer(x, 5x//efface 5 caractres), couper, coller, rechercher, etc.

Passez en mode commande en appuyant sur ESC.

19

mode insertion : on passe en mode insertion par une commande dinsertion ou de modification de texte (comme a ou i) et on sort par la touche ESC. Il existe de nombreuses faons dentrer en mode insertion. Le tableau ci-dessous prsente les diffrentes mthodes dentrer en mode insertion. i Insrer le texte devant lemplacement du curseur I Insrer le texte au dbut de la ligne en cours a ajouter le texte aprs lemplacement du curseur. A Ajouter le texte la fin de la ligne en cours. o Ouvrir la ligne et dplacer le curseur la ligne au dessous de la ligne en cours. O Ouvrir la ligne et dplacer le curseur la ligne au dessus de la ligne en cours. c Commencer lopration de modification. C Modifier la fin de la ligne. R Entrer remplacement mode insertion (commencer rcrire le texte). s Remplacer un caractre. S Remplacer toute la ligne( effacer la ligne puis aller e mode insertion au dbut de la ligne). Remarque : ESC MC ESC Dplacer le curseur Les commandes les plus utilises pour dplacer le curseur sont les suivantes : h gauche dun caractre I droite dun caractre k en haut dun caractre j en bas dun caractre 0 $ dbut et fin de la ligne en cours. = ou enter ligne suivant w dbut de mot suivant b dbut du mot prcdent e fin du mot suivant gg haut du fichier en cours G fin du fichier en cours MI

20

nG aller la ligne N n du fichier en cours Remarque : La plupart de ces commandes peuvent tre accompagnes dun numro, exemple : 5k

Sauvegarde et sortir de vi Depuis la ligne de commande appuyer sur ESC : :w Ecrire sur le disque. :q Quitter si les modifications ont t sauvegardes. :wq ou :x crire et quitter. Remarque : Si vous devez sauvegarder un exemplaire de votre document dans un autre fichier diffrent, vous tapez la commande :w nom_fichier. Pour contourner les protections et crire dans un fichier en lecture seule (qui vous appartient) :w !

Couper, copier et coller Les deux commandes primaires utilises pour effacer du texte et le placer dans le buffer sont d et x. x efffacer un seul caractre. nx effacer les prochains n caractres. dd effacer la ligne en cours. d$ effacer la fin de la ligne. Pour copier du texte dans le buffer sans leffacer, vous pouvez utiliser des commandes semblables aux commandes deffacement prsentes : yw copier un mot nyw copier les prochains n mots. y$ copier toute la ligne sans considrer lemplacement du curseur. Pour coller du texte depuis le buffer dans votre document, vous pouvez utiliser les commandes suivantes : p coller le texte droite de lemplacement en cours. P coller le texte gauche de lemplacement en cours. 21

Annuler les modifications u annuler la dernire modification en ligne. U annuler toutes les modifications dune ligne avant de dplacer le curseur une autre ligne. :e! pour abandonner toutes les modifications et recharger la dernire version

sauvegarde. Rcuprer un fichier Si votre session vi est termin par la fermeture du Shell ou tout autre vnement inattendu, vous pouvez souvent rcuprer le texte qui risque dtre perdu. Utilisez les commandes suivantes pour voir si vi a sauvegard le contenu de votre buffer de travail : vi r nom_fichier

Rechercher du texte Pour rechercher du texte en mode commande, tapez / (recherche en arrire) ou ? (recherche en avant). :s/ancien_texte/nouveau_texte/g rechercher et remplacer toutes les instances dune ligne avec confirmation. :%s/ancien_texte/nouveau_texte/g rechercher et remplacer toutes les instances dans un fichier entier sans confirmation. :10,20s/ancien_texte/nouveau_texte/g remplacer toutes les instances entre les lignes 10 et 20.

Expressions rgulires Les mta caractres sont des caractres qui ont une signification particulire, comme . Symbole dfinition Tout caractre simple Tous caractre simple dans le [ ] Dbut de la ligne Fin de la ligne Cite le prochain caractre

.
[] ^ $ \

22

Le caractre . correspond un seul caractre texte. correspondrait texte1 ou texte2 et non pas simplement texte. /Step1[0-9] correspondrait autant Step10 qu Step19 mais pas Step20. /^Step 1[0-9] correspondrait Step 15 uniquement sil se trouvait en dbut de ligne. \ supprime le sens spcial du prochain mta caractre. On pourrait utiliser : /\/etc\/rc\.d.

Chapitre 4

Le systme de fichiers Linux

Concepts de hirarchie des fichiers Linux

Les fichiers et rpertoires sont organiss dans une arborescence inverse racine unique. Distinction entre minuscule et majuscule.

/ est le point de dpart de larborescence du systme de fichiers Linux.


Chaque processus de systme a un rpertoire en cours. Les fichiers et rpertoires dont le nom commencent par un . sont cachs.

/(root)

Etc bin sbin lib root usr mnt var

boot

tmp

dev

home

proc lost+found

bin : Stock les commandes de lutilisateurs. sbin : Commande de systme. root : Le rpertoire personnel du super utilisateur. mnt : Contient les points de montage pour les systmes de fichiers. boot : Contient le noyau et dautre fichiers pour la mise en route. dev : Stocke des fichiers de priphrique.

23

etc: Contient les fichiers et rpertoire de configuration. var: Pour les fichiers variables comme les fichiers dinscription, printer. usr: Contient des fichiers et rpertoires directement lis aux utilisateurs du systme. proc: Un systme de fichier virtuel (qui nest pas stock sur le disque). tmp: rpertoire temporaire. home : Emplacement typique des rpertoires des utilisateurs.

Affichage des fichiers de texte

cat et less sont une faon rapide dafficher les fichiers de texte. les commandes head et tail affichent les premires lignes et les dernires lignes des fichiers de texte (10 lignes par dfaut) Remarque : Parmi les diteurs de texte on trouve vi, pico et lditeur de linterface graphique GUI, gedit.

Syntaxe : cat [options] [fichier] le contenu de fichier est affich par squences sans interruption. $cat A nom_fichier //affiche les caractres, y compris les

caractres contrle et non-imprimables. Less [options] [fichier] affiche le contenu dun fichier de texte un cran aprs lautre. $less c nom_fichier //Effacer avant dafficher. $less d nom_fichier //Avance dun demi cran. $less b nom_fichier .//Recule dun cran entier.

Globalisation des fichiers (globbing)

* correspond zro ou plusieurs caractres. ? correspond un seul caractre. [a-z] correspond un ensemble de caractres. [^a-z] correspond tous les caractres sauf de cet ensemble.

Exemple : Si un rpertoire contient les fichiers suivantes : X.txt Y.txt Z.txt m.mp3 n.mp3 $rm *mp3 revient entrer $rm m.mp3 n.mp3 24

$rm nov ?

novembre/

//supprimer tous les fichiers commence par nov et

contient un seul caractre aprs nov. $rm *c[1-3] // effacer les fichiers qui contient la lettre c et 1,2,3.

Monter du matriel mobile

Avant daccder aux donnes dun nouveau matriel mobile (disquette, CD, lecteur zip) le systme de fichier doit tre mont. Exemple : $mount -t vfat /dev/fd0 /mnt/disquette $mount t iso9660 /dev/cdrom /mnt/cdrom $mount t vfat /dev/hda1 /mnt/hda1 //mont le systme de fichier windows.

Les commandes grep et find La commande grep Syntaxe : grep [options] <chane de caractres> <nom de fichier> La commande grep permet de chercher du texte dans un fichier. Exemples : $grep hichem /etc/passwd rpertoire /etc/passwd. $grep -i -n pacifique *.txt affichera toutes les lignes numrotes (option -n) contenant le mot pacifique sans prendre en compte les majuscules (option -i) dans les fichiers finissant par .txt On peut utiliser les expressions rgulires avec grep. Si on tape la commande : $grep ^[a-d] carnet_adresse On va obtenir tous les lignes commenant par les caractres compris entre a et d. (Il existe aussi les commandes fgrep et egrep quivalentes.) //rechercher le nom hichem dans le

La commande find Prsentation La commande find permet de retrouver des fichiers partir de certains critres. La syntaxe est la suivante : find <rpertoire de recherche> <critres de recherche>

25

Les critres de recherche sont les suivants : -name recherche sur le nom du fichier, -perm recherche sur les droits d'accs du fichier, -links recherche sur le nombre de liens du fichier, -user recherche sur le propritaire du fichier, -group recherche sur le groupe auquel appartient le fichier, -type recherche sur le type (d=rpertoire, c=caractre,f=fichier normal), -size recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets), -atime recherche par date de dernier accs en lecture du fichier, -mtime recherche par date de dernire modification du fichier, -ctime recherche par date de cration du fichier. (On peut combiner les critres avec des oprateurs logiques : critre1 critre2 ou critre1 -a critre2 correspond au et logique, l !critre non logique, l \ (critre1 -o critre2\) ou logique.) La commande find doit tre utilis avec l'option -print. Sans l'utilisation de cette option, mme en cas de russite dans la recherche, find n'affiche rien la sortie standard (l'cran, plus prcisment le shell). (La commande find est rcursive, c'est dire o que vous tapiez, il va aller scruter dans les rpertoires, et les sous rpertoires qu'il contient, et ainsi de suite.)

Recherche par nom de fichier

Pour chercher un fichier dont le nom contient la chane de caractres hichem partir du rpertoire /usr, vous devez tapez : $find /usr -name hichem print //nom exacte hichem En cas de russite, si le(s) fichier(s) existe (nt), vous aurez comme sortie : hichem Pour rechercher tous les fichiers se terminant par .c dans le rpertoire /usr, vous taperez : $find /usr name " *.c " -print Vous obtenez toute la liste des fichiers se terminant par .c sous les rpertoires contenus dans /usr (et dans /usr lui mme).

Recherche suivant la date de dernire modification 26

Pour connatre les derniers fichiers modifis dans les 3 derniers jours dans toute l'arborescence (/), vous devez taper : $find / -mtime 3 print

Recherche suivant la taille

Pour connatre dans toute l'arborescence, les fichiers dont la taille dpasse 1Mo (2000 blocs de 512Ko), vous devez taper : $find / -size 2000 print Recherche combine

Vous pouvez chercher dans toute l'arborescence, les fichiers ordinaires appartenant hichem, dont la permission sont fixs 755, on obtient : $find / -type f -user hichem -perm 755 -print

Modifier les donnes d'un fichier Coupe un fichier en morceau : split

La commande split permet de couper un fichier en morceau (en plusieurs fichiers), en tapant : $split -3 fichier_original fichier //fichier est les noms des fichiers. Vous allez crer les fichiers fichieraa, fichierab, fichierac, ... qui contiendront tous 3 lignes.

Trier des fichiers : sort

Soit le fichier test suivant : wady:29:8050:hammamet rafik:13:1000:tunis hichem:75:8000:nabeul salem:92:2200:sousse Attention le premier champ est not 0, ainsi de suite. En faisant sort sans argument : $sort test

27

Par dfaut il va trier sur le premier caractre et ranger donc dans l'ordre alphabtique: hichem:75:8000:nabeul rafik:13:1000:tunis salem:92:2200:sousse wady:29:8050:hammamet Si vous voulez trier sur le deuxime champ (le dpartement), vous devez d'abord indiquer que le : est le caractre qui spare deux champs (par dfaut c'est l'espace), avec l'option -t :. Vous devez ensuite indiquer que vous trier un chiffre avec l'option n (numrique). Pour indiquer qu'on veut trier le deuxime champ, il faut marquer qu'on veut trier partir du second champ (+1) jusqu'au troisime (-2). Soit le rsultat suivant ; $sort -n -t : +1 -2 test On obtient : rafik:13:1000:tunis wady:29:8050:hammamet hichem:75:8000:nabeul salem:92:2200:sousse Les options de sort sont les suivantes : -b ignore les espaces et les tabulations en dbut de champ. (-d tri sur les caractres alphanumriques (caractres, chiffres et espace) uniquement). -r inverse l'ordre de tri -f pas de diffrence entre minuscule et majuscule -tx Le caractre x est considr comme sparateur de champ -u supprime les lignes doublons -n trie sur des chiffres

Conversion de chane de caractre :tr

La commande tr permet de convertir une chane de caractre en une autre de taille gale. Les options sont les suivantes : -c Les caractres qui ne sont pas dans la chane d'origine sont convertis selon les caractres de la chane de destination. 28

-d destruction des caractres appartenant la chane d'origine -s si la chane de destination contient une suite contigu de caractres identiques, cette suite est rduite un caractre unique La commande tr a besoin qu'on lui redirige en entre un fichier, le rsultat de la conversion s'affichant sur la sortie standard. Soit notre fichier test : wady:29:8050:hammamet rafik:13:1000:tunis hichem:75:8000:nabeul salem:92:2200:sousse Pour remplacer le : par un #, nous taperons : $tr " : " " # " < test Pour faire la mme chose on peut aussi bien diter le fichier avec cat et rediriger par pipe vers tr, en tapant : $cat test | tr " : " " # " Le signe | appel pipe (ou tube) permet de relier avantageusement les commandes. L'introduction de la pipe (tube) permet de combiner plusieurs commandes.

$cat test | tr " [a-f] " " [A-F] " Vous allez remplacer les caractres de a f de minuscule en majuscule. Soit: wADy:29:8050:hAmmAmet rAFik:13:1000:tunis hiChEm:75:8000:nABEul sAlEm:92:2200:soussE

Edition de fichiers avec critres Editer un fichier par le dbut : head

Si vous avez un fichier trs long, et que vous voulez visualiser que le dbut, vous disposez de la commande head : La syntaxe est la suivante : $head mon_fichier Affiche les premires lignes (10par dfaut). Utilisez les paramtres n ou lines pour modifier le nombre de lignes affiches. 29

$head -n 20 /tmp/output.txt //Vous obtenez les 20 dernire lignes du fichier.

Editer un fichier par la fin : tail

Affiche les dernires lignes (10 par dfaut) de texte dun fichier. La syntaxe est la suivante: $tail /var/log/messages Utilisez les paramtres n ou lines pour modifier le nombre de lignes affiches. $tail n 20 /var/log/messages Vous obtenez les 20 dernires lignes du fichier.

Compter les lignes d'un fichier : wc

La commande wc permet de compter le nombre de ligne d'un fichier, mais aussi le nombre de mot ou de caractres. $wc -l mon_fichier Cette commande va donner le nombre de lignes contenues dans le fichier. $wc -w mon_fichier Pour avoir le nombre de mot. $wc -c mon_fichier Pour ne compte que les caractres. La commande wc sans option donne la fois le nombre de ligne, le nombre de caractres et le nombre de mots. Si vous voulez connatre le nombre de fichier dans un rpertoire, la commande sera donc : $ls -l | wc -l

Edition de champ d'un fichier : cut

La commande cut permet d'extraire certains champs d'un fichier. Les options sont les suivantes : -c extrait suivant le nombre de caractres -f extrait suivant le nombre de champs -dx Le caractre x est le sparateur de champ Avec la commande cut, contrairement sort, le premier champ a comme numro 1. Soit le fichier test 30

wady:29:8050:hammamet rafik:13:1000:tunis hichem:75:8000:nabeul salem:92:2200:sousse La commande : $cut -c-10 test Va extraire les 10 premiers caractres de chaque ligne, on obtient : wady:29:80 rafik:13:1 hichem:75: salem:92:2 La commande : $cut -c2-5 test Va extraire les deuxime au cinquime caractre de chaque ligne. La commande : $cut -d: -f1,4 test Va extraire le premier et quatrime champ, le : fixant le sparateur de champ. On obtient : wady::hammamet rafik:tunis hichem:nabeul salem: sousse

Fusion de fichier : paste

La commande paste permet la fusion de lignes de fichiers. Les options sont les suivantes : -dx Le caractre x dfinit le sparateur de champ -s Les lignes sont remplaces par des colonnes Soit le fichier test : wady:29:8050:hammamet rafik:13:1000:tunis hichem:75:8000:nabeul salem:92:2200:sousse Et le fichier emploi: Ingnieur Ptissier Facteur 31

Vendeur En tapant la commande : $paste -d: test emploi Vous obtenez : wady:29:8050:hammamet : Ingnieur rafik:13:1000:tunis : Ptissier hichem:75:8000:nabeul : Facteur salem:92:2200:sousse : Vendeur Vous pouvez videmment rediriger le rsultat vers un fichier. $paste d : test emploi > new.txt

Extraction de lignes communes de deux fichiers : comm

Cette commande permet d'extraire les lignes communes deux fichiers. $comm test1 test2 Voir man comm

Comparaison de fichiers Comparer deux fichiers : cmp

La commande cmp indique si deux fichiers sont identiques. En tapant : $cmp fichier1 fichier2 Si les deux sont identiques, la commande ne gnre aucune sortie, s'ils sont diffrents la commande indique la position de la premire diffrence (ligne et caractre), avec une sortie du genre : fichier1 fichier2 differ : char 34, line 2. Voir man cmp

Edition des diffrences entre deux fichiers : diff

Cette commande permet de rechercher les diffrences entre deux fichiers. La syntaxe est la suivante : $diff fichier1 fichier2, diff fait en sorte de vous donner des indications pour que le fichier1 soit identique au fichier2. (c pour change, d pour delete).

La commande sed 32

sed (Stream Editor) : Utilis pour effectuer des ditions sur un extrait de texte. Il lit les lignes d'un fichier une une, (ou provenant de l'entre standard) leur applique un certain nombre de commandes d'dition et renvoie les lignes rsultantes sur la sortie standard. Il ne modifie pas le fichier trait, il crit tout sur la sortie standard.

Adresse sed Les adresses sont utilises avec sed pour dfinir la partie de texte qui doit tre dite. Aucune adresse : diter le fichier entier. Une adresse : diter toutes les lignes correspondant cette adresse. Deux adresse : diter toutes les adresses se trouvent entre les deux adresses.

Les adresses peuvent tre indiques dans les formats suivants : number :Trouve le numro de lignes spcifi. first~step : first est la ligne ou commencer et step le nombre de pas vers la prochaine ligne diter. Si ladresse est 1~2 sed commencera la premire ligne et ditera toutes les secondes lignes suivantes, (toutes les lignes de numro impair). /regexp/ : Trouve toutes les lignes correspondant lexpression rgulire /regexp/ Exemple : Pour changer toutes les instances du mot slow en fast dans le fichier course.txt, la commande est : $sed s/slow/fast/g course.txt > output.txt La commande s/ cherche le mot slow et le remplace par fast, g remplace toutes les occurrences du mot. Sans le g seul la premire occurrence sera remplace. ($cat output.txt) $sed s/slow/fast/3 course.txt // va changer la troisime occurrence slow par fast.. sed "s/slow/fast/p" course.txt en cas de remplacement la ligne concerne est affiche sur la sortie standard (uniquement en cas de substitution). sed -e s/[Ss]low/SLOW/g fichier substitue toutes les chanes Slow ou slow par SLOW.

La commande de suppression d supprime les lignes comprises dans un intervalle donn. La syntaxe est la suivante : $sed "20,30d" fichier 33

Pour en savoir plus $info sed ou $man sed.

La commande awk

awk : Est un langage de programmation pour diter du texte. Recherche un fichier pour les lignes correspondant une ou plusieurs caractristiques. Permet une recherche de chanes et l'excution d'actions sur les lignes slectionnes. La syntaxe de awk est la suivante: $awk options programme fichier (awk [-F] [-v var=valeur] 'programme' fichier) $awk f program_file input_file //pour les programmes les plus longs. Note : le programme est contenu dans des guillemets simples, ceci est trs important pour protger le programme de lexpansion du shell. Exemple: Pour chercher le fichier /etc/passwd dans toutes les lignes contenant bash laide de awk la commande est imprime le rsultat: $awk /bash/ {print} /etc/passwd.

34

Chapitre 5

Redirection de fichier

Les entres sorties


Il y a trois sortes d'entres sorties ou flux de donnes : le premier est l'entre standard, c'est dire ce que vous saisissez au clavier, le deuxime est la sortie standard, c'est dire l'cran, plus prcisment le shell, et le troisime est la sortie standard des messages d'erreurs conscutifs une commande, qui est gnralement l'cran. (Chacun de ces flux de donnes est identifi par un numro descripteur, 0 pour l'entre standard, 1 pour la sortie standard et 2 pour la sortie standard des messages d'erreur.)

Redirection des entres sorties


Lentre et la sortie peuvent tre rediriges vers diffrents emplacements. Les oprateurs (>) de redirections du Shell permettent aux canaux E/S standard dtre redirigs vers, ou depuis, un fichier. En tapant : commande > mon_fichier Dirige lentre standard vers un fichier (En d'autres termes, le standard est redirig vers un fichier. Cela peut tre utile, si vous avez une commande qui gnre normment de commentaire, et que vous voulez les rcuprer, pour les exploiter par la suite), si ce fichier existait dj, il est cras (supprim et recr), si vous ne

35

voulez pas perdre les donnes, vous disposez donc de la redirection >>. En tapant : commande >> mon_fichier. Ajoute la sortie standard la fin dun fichier. Les redirections marchent dans les deux sens, par exemple en tapant la commande suivante : $sort < mon_fichier .Vous envoyez le contenu du fichier mon_fichier ainsi trie vers la sortie standard. Alors la commande $sort < mon_fichier > fichier_trie a pour effet d'envoyer le rsultat (le fichier tri) dans un fichier fichier_trie. $cat fichier_trie //visualisation du fichier.

Redirection des erreurs


Pour rediriger lerreur standard on utilise la commande 2>nom_fichier. Exemples : $cat mon_fichier 2>fichier_erreur. (Si on rencontre une erreur pendant l'excution de la commande d'dition cat de mon_fichier (absence du fichier par exemple), le message d'erreur sera sauvegard dans le fichier fichier-erreur.) $find /etc name passwd 2> fichier_erreur /etc/passwd //sortie standard

/etc/pam.d/passwd Visualisation du fichier fichier_erreur : $cat fichier_erreur find : /etc/default : Permission denied Redirection dautres ereurs standard vers le fichier_erreur $find /tmp name passwd 2>> fichier_erreur $cat fichier_erreur find : /etc/default : Permission denied find : /tmp/orbit-root :Permission denied Il est possible de rediriger la sortie et lerreur standard simultanment: $find / -name passwd 2>errs > result $sort mon_fichier > fichier_trie 2>&1 Avec la syntaxe >& vous indiquez que les messages d'erreurs seront redirigs vers la sortie standard qui est le fichier fichier_trie. $find /etc name passwd 2>fichier_errreur //chercher les fichiers passwd ds le /etc find:/etc/pam.d/passwd

36

/etc/default : Permission denied //erreur Par dfaut, la sortie et lerreur standard sont affiches lcran.

Les pipes
Un pipe (en franais tube de communication) permet de rediriger la sortie d'une commande vers une autre. La syntaxe : commande1|commande2 (| tant le symbole de pipe). Exemple : $ls | grep livre $ls /usr/lib | less

La premire commande aura pour effet de lister le nom des fichiers, la sortie standard (le rsultat de la commande) est donc une liste de nom, elle est redirige vers la commande grep, qui va y chercher une chane de caractre contenant livre. Le rsultat est donc: livre Note : Voici deux des principes de base de la philosophie dUNIX : faire de petites programmes qui excutent bien une fonction prcise et sattendre ce que la sortie de tout programme puisse devenir lentre dun autre programme (pipelines). $cut f1 d : passwd | sort r | less

Les liens
Syntaxe : ln s source destination En tapant la commande ls -l on peut rencontrer cette syntaxe. lrwxrwxrwx 1 root root 14 Aug 1 01:58 Mail -> ../../bin/mail* Ca signifie que le fichier Mail pointe vers le fichier mail, en d'autres termes Mail est un lien vers le fichier mail. (Un lien est cr pour pouvoir accder au mme fichier diffrents endroits de l'arborescence, pour vite la copie des fichiers volumineux dans chaque rpertoire.) Remarque : Sous Windows on retrouve l'quivalent avec la notion de raccourci. La commande ln (pour link) sert crer des liens. Par exemple: $ln -s /home/adel/linux/readme /tmp/lisezmoi Le fichier source est readme, le lien cr est lisezmoi. (En faisant un man ln, vous dcouvrirez qu'il existe des liens hards(->) et softs(-s).)

Les inodes

37

Sous un systme UNIX, un fichier quel que soit son type est identifi par un numro appel numro d'inode, qu'on pourrait traduire en franais par "i-noeud". Ainsi derrire la faade du shell, un rpertoire n'est qu'un fichier, identifi aussi par un inode, contenant une liste d'inode reprsentant chacun un fichier. La diffrence entre un lien hard et symbolique se trouve au niveau de l'inode, un lien hard n'a pas d'inode propre, il a l'inode du fichier vers lequel il pointe. Par contre un lien symbolique possde sa propre inode. A noter que vous ne pouvez pas crer de liens hards entre deux partitions de disque diffrente, vous n'avez pas cette contrainte avec les liens symboliques. Pour connatre le numro d'inode d'un fichier, vous pouvez taper: $ls -i mon-fichier.

38

Chapitre 6 Programmation sous UNIX


Ecrire des scripts

Une script est une suite d'instruction lmentaire qui est excutes de faon squentielle les unes aprs les autres par le langage de script tel que Shell, Perl ou autre. Ds que vous aurez tapez dans un terminal n fois la mme srie de commandes et que vous apercevrez que vous tes amen le refaire de nombreuses fois, dans ce cas on besoin dutilise des scripts pour simplifier et amliorer lutilisation du Shell. Dans ce cours on va se limite lutilisation des scripts sous Shell comme langage, et en particulier bash.

Notions de base

Pour commencer, il faut savoir qu'un script est un fichier texte standard pouvant tre crer par n'importe quel diteur : vi, emacs ou autre. D'autre part, conventionnellement un script commence par une ligne de commentaire contenant le nom du langage utiliser pour interprter ce script, pour le cas qui nous intresse : /bin/sh. Donc un script lmentaire pourrait tre : #!/bin/sh (videmment un tel script ne fait rien ! Changeons cela. La commande qui affiche quelque chose l'cran est echo.)

39

Pour crer une script qui peut afficher un texte nous pouvons crire : bonjour_monde #!/bin/sh echo "Bonjour, Monde !" echo "Un premier script est n."

Pour excut la script il suffit dappele la script par sont non prcde du sh : [user@localhost user]$ sh bonjour_monde Bonjour, Monde ! Un premier script est n. Ou [user@localhost user]$ ./bonjour_monde //sans espace entre le . / et nom_script Bonjour, Monde ! Un premier script est n. C'est possible si vous avez rendu votre script excutable par la commande : [user@localhost user]$ chmod +x bonjour_monde

Dans un Shell-script, tout ce qui suit le caractre # est considr comme un commentaire et ce, jusqu'a la fin de la ligne. Exemple : #!/bin/sh # On veut faire un copie de tous les fichiers for i in * ; do # Sous le nom $i.bak cp $i $i.bak done

Le passage de paramtres

On peut passe un (ou plusieurs) paramtre(s) au script. Soit le script essai01 : #!/bin/sh echo Le paramtre \$1 est \"$1\" echo Le paramtre \$2 est \"$2\" echo Le paramtre \$3 est \"$3\" Il affiche, les uns aprs les autres les trois premiers paramtres du script, donc si l'on tape : $ ./essai01 paramtre un 40

Le paramtre $1 est "paramtre" Le paramtre $2 est "un" Le paramtre $3 est "" Donc, les variables $1, $2, $3 contiennent les "mots". Attention : Le "mot" est un ensemble de caractres ne contenant pas des caractres de sparations (espace, tabulation, le point virgule). On utilise les caractres : \$ la place de $ ainsi que \" la place de " dans le script. Car si on tape : echo "essai" on obtient : essai, si l'on veut obtenir "essai" il faut dire echo que le caractre " n'indique pas le dbut d'une chane de caractre (comme c'est le comportement par dfaut) mais que ce caractre fait partie de la chane : on dit que l'on "chappe" le caractre " en tapant \". En "chappant" le caractre \ (par \\) on obtient le caractre \. Maintenant, essayons de taper : $ ./essai01 * Le paramtre $1 est "Mail" Le paramtre $2 est "essai01" Le paramtre $3 est "nsmail" (Le rsultat doit tre sensiblement diffrent sur votre machine). Le Shell a remplac le caractre * par la liste de tous les fichiers non cachs prsents dans le rpertoire courant. (En fait, toutes les substitutions du Shell sont possibles ! C'est le Shell qui "substitue" aux paramtres des valeurs tendues par les caractres * (toute suite de caractres) et [ab] (l'un des caractres a ou b)). Autre exemple : $ ./essai01 \* Le paramtre $1 est "*" Le paramtre $2 est "" Le paramtre $3 est ""

On a "chapp" le caractre * donc il a perdu sa signification particulire : il est redevenu un simple *. Si on veut utiliser plus de dix paramtres? Il faut utiliser la commande shift (shift sert incrmenter $1), titre Dexemple voici le script essai02 : #!/bin/sh echo Le paramtre 1 est \"$1\" shift 41

echo Le paramtre 2 est \"$1\" shift echo Le paramtre 3 est \"$1\" shift echo Le paramtre 4 est \"$1\" shift echo Le paramtre 5 est \"$1\" shift echo Le paramtre 6 est \"$1\" shift echo Le paramtre 7 est \"$1\" shift echo Le paramtre 8 est \"$1\" shift echo Le paramtre 9 est \"$1\" shift echo Le paramtre 10 est \"$1\" shift echo Le paramtre 11 est \"$1\" Si vous tapez : $ ./essai02 1 2 3 4 5 6 7 8 9 10 11 12 13 Le paramtre 1 est "1" Le paramtre 2 est "2" Le paramtre 3 est "3" Le paramtre 4 est "4" Le paramtre 5 est "5" Le paramtre 6 est "6" Le paramtre 7 est "7" Le paramtre 8 est "8" Le paramtre 9 est "9" Le paramtre 10 est "10" Le paramtre 11 est "11"

A chaque appel de shift les paramtres sont dplacs d'un numro : le paramtre un devient le paramtre deux et ainsi de suite. 42

videmment le paramtre un est perdu par l'appel de shift : vous devez donc vous en servir avant d'appeler shift.

Les variables

Le passage des paramtres nous montrer l'utilisation de "nom" particuliers : $1, $2 etc. ce sont les substitutions des variables 1, 2 ... par leur valeurs. Attention toute fois, ne pas confondre le nom d'une variable (note par exemple machin) et son contenue (note dans cas $machin). La variable PATH (attention le Shell diffrencie les majuscules des minuscules) qui contient la liste des rpertoires (spars par des " :") dans lesquels il doit rechercher les programmes. Si dans un script vous tapez : #!/bin/sh PATH=/bin PATH=PATH:/usr/bin PATH=/bin PATH=$PATH:/usr/bin # PATH contient /bin # PATH contient PATH:/bin # PATH contient /bin # PATH contient /bin:/usr/bin

La ligne 3 est trs certainement une erreur, gauche du signe "=" il faut une variable (donc un nom sans $) mais droite de ce mme signe il faut une valeur, et la valeur que l'on a mis est "PATH :/usr/bin" : il n'y a aucune substitution faire. Par contre la ligne 5 est certainement correcte : droite du "=" on a mis "$PATH :/usr/bin", la valeur de $PATH tant "/bin", la valeur aprs substitution par le Shell de "$PATH :/usr/bin" est "/bin :/usr/bin". Donc, la fin de la ligne 5, la valeur de la variable PATH est "/bin :/usr/bin". Attention : il ne doit y avoir aucun espace de part et d'autre du signe "=". Rsumons : Il y a un certain nombre de variables particulires, voici leur signification : la variable * (dont le contenu est $*) contient l'ensemble de tous les "mots" qui on t pass au script. La variable # contient le nombre de paramtres qui ont t passs au programme. La variable 0 (zro) contient le nom du script (ou du lien si le script a t appel depuis un lien). Il y en a d'autres moins utilises. Il est possible de faire des calculs avec le Shell. En fait, le Shell ne "sait" faire que des calculs sur les nombres entiers (ceux qui n'ont pas de virgules ;-). Pour faire un calcul il faut encadrer celui-ci de : $((Un calcul)) ou $[un calcul]. Exemple, le script essai03 : #!/bin/sh 43

echo 2+3*5 = $((2+3*5))

//Mettre la valeur 17 dans la variable 2+3*5 ; // les parenthses

sont obligatoire entre (2+3*5). MACHIN=12 echo MACHIN*4 = $[$MACHIN*4] Affichage : $ sh essai03 2+3*5 = 17 MACHIN*4 = 48 Remarque : L'oprateur puissance est "**" (ie : 2 puissance 5 s'crit : 2**5). On peut utiliser des parenthses pour modifier l'ordre des calculs.

Les instructions de contrles de scripts

Les instructions de contrles du Shell permettent de modifier l'excution purement squentielle d'un script. Les scripts que nous avons crs n'taient pas trs complexes car nous ne pouvions pas modifier l'ordre des instructions, ni en rpter. L'excution conditionnelle lorsque vous programmerez des scripts, vous voudrez que vos scripts fassent une chose si une certaine condition est remplie et autre chose si elle ne l'est pas. La construction de bash qui permet cela est le test : If then else fi.

Sa syntaxe est la suivante : if <test> ; then <instruction 1> <instruction 2> ... <instruction n> else <instruction n+1> ... <instruction n+p> fi Il faut savoir que tous les programmes renvoient une valeur. Cette valeur est stocke dans la variable, une valeur nulle est synonyme de VRAI et une valeur non nulle est synonyme de

44

FAUX (ceci parce que, en gnral les programmes renvoie zro quand tout c'est bien pass et un numro non nul d'erreur quand il s'en est produit une). Il existe deux programmes particulier : False et True. True renvoie toujours 0 et False renvoie toujours 1. Sachant cela, voyons ce que fait le programme suivant : #!/bin/sh if true ; then echo Le premier test est VRAI($?) else echo Le premier test est FAUX($?) fi if false ; then echo Le second test est VRAI($?) else echo Le second test est FAUX($?) fi Affichera : $ ./test Le premier test est VRAI(0) Le second test est FAUX(1)

Les tests

Un test, n'est rien de plus qu'une commande standard. Une des commandes standard est 'test', sa syntaxe est un peu complexe. Si l'on veut tester l'existence d'un rpertoire, on tapera : test -d Si l'on veut tester l"existence d'un fichier, on tapera : test -f Si l'on veut tester l'existence d'un fichier ou rpertoire, on tapera : test -e Pour plus d'information faites : man test. On peut aussi combiner deux tests par des oprations logiques : ou correspond -o, et correspond a. Exemple : test -x /bin/sh -a -d /etc // Cette instruction teste l'existence de l'excutable /bin/sh (-x

/bin/sh) et (-a) la prsence d'un rpertoire /etc (-d /etc). On peut remplacer la commande test par [ ] 45

Exemple : if [ -x /bin/sh ] ; //Espace obligatoire entre [ et x et fin ] # Ou if test x /bin/sh ; then then echo /bin/sh est executable. C\'est bien. else echo /bin/sh n\'est pas executable. echo Votre systme n\'est pas normal. fi Il y a la commande grep qui peut tre employe, renvoie 0 quand la recherche a russi et 1 quand la recherche a chou. Exemple : if grep -E "^user" /etc/passwd > /dev/null ; then // -E: Interprete le motif comme une expression rgulire, ^ : dbut de chaque ligne les E , " et ^ ne sont pas obligatoire. echo L\'utilisateur user existe. else echo L'utilisateur user n\'existe pas. fi Cette srie d'instruction teste la prsence de l'utilisateur user dans le fichier /etc/passwd. Et affiche le rsultat dans le fichier /dev/null (fichier poubelle). Faire quelque chose de diffrent suivant la valeur d'une variable

Les boucles

L'instruction qui ralise une boucle est for <variable> in <liste de valeurs pour la variable> ; do <instruction 1> ... <instruction n> done Exemple 1: Supposons que nous souhaitions renommer tous nos fichiers *.tar.gz en *.tar.gz.old, nous taperons le script suivant : #!/bin/sh

46

# I prend chacune des valeurs possibles correspondant au motif : *.tar.gz (a.tar.gz et b.tar.gz .) for I in *.tar.gz ; do # Tous les fichier $I sont renomm $I.old echo "$I -> $I.old" mv $I $I.old # On fini notre boucle done Exemple2 : Supposons quont veux parcourir tous les rpertoires du rpertoire courant pour faire cette mme manipulation. #!/bin/sh for REP in `find -type d` ; do // Parcourir les rpertoires et les mettras dans REP for FICH in $REP/*.tar.gz ; do // Chercher dans les rpertoires les fichiers .tar.gz if [ -f $FICH ] ; then # Ou if test f $FICH ; then mv $FICH $FICH.old // renommer else echo On ne renomme pas $FICH car ce n\'est pas un rpertoire // dja avec REP tous les fichiers chercher sont des rpertoires. fi done done (Explications : dans le premier for, on a prcis comme liste : `find -type d` (attention au sens des apostrophes, sur un clavier azerty franais on obtient ce symbole en appyant sur ALTGR+). Lorsque l'on tape une commande entre apostrophes inverses, le Shell excute d'abord cette commande, et remplace l'expression entre apostrophe inverse par la sortie standard de cette commande. find -type d, c'est dire la liste de tous les sous rpertoires du rpertoire courant. Donc en ligne 2 on fait prendre la variable REP le nom de chacun des sous rpertoires du rpertoire courant, puis (en ligne 3) on fait prendre la variable FICH le nom de chacun des fichiers .tat.gz de $REP (un des sous rpertoires), puis si $FICH est un fichier on le renomme, sinon on afficher un avertissement.) // Si la valeur de FICH est un fichier alors

47

Pour faire une certaine chose tant qu'une condition est remplie, on utilise un autre type de boucle : while <un test> ; do <instruction 1> ... <instruction n> done

Exemple : Supposons quont veux afficher les 100 premiers nombres, alors: i=0 while [ $i -lt 100 ] ; do #Ou while test $i lt 100 ; do echo $i i=$[$i+1] done Remarque : -lt signifie "lesser than" ou "plus petit que". Remarquez que 100 ne s'affiche pas.

Fonctions Souvent, vous voudrez refaire ce que vous tapez autre part dans votre script. Dans ce cas il est inutile de retaper la mme chose, on utiliser l'instruction function qui permet de rutiliser une portion de script. Exemple : #!/bin/sh function addpath () { if echo $PATH | grep -v $1 >/dev/null; then PATH=$PATH:$1; fi; PATH=`echo $PATH|sed s/::/:/g` } addpath /opt/apps/bin addpath /opt/office52/program addpath /opt/gnome/bin 48

Au dbut, ont dfini une fonction nomme addpath dont le but est d'ajouter le premier argument ($1) de la fonction addpath la variable PATH si ce premier argument n'est pas dj prsent (grep -v $1) dans la variable PATH, ainsi que supprimer les chemins vide (sed s/ : :/ :/g) de PATH. Ensuite, on excute cette fonction pour trois arguments : /opt/apps/bin, /opt/office52/bin et /opt/gnome/bin.

(En fait, une fonction est seulement un script crit l'intrieur d'une script. Elles permettent surtout de ne pas multiplier les petits scripts, ainsi que de partager des variables sans se proccuper de la clause export mais cela constitue une utilisation avance du Shell.)

Chapitre 7

Processus

Les caractristiques d'un processus

Un processus compte de nombreux composants et proprits : un numro appel PID (Process Identification). Priorit Rfrences de scurit Environnement.

Un processus peut lui mme crer un autre processus, il devient donc un processus parent ou pre, et le nouveau processus sappelle processus enfant. Ce dernier est identifi par son PID, et le processus pre par son numro de processus appel PPID (Parent Process Identification). (PID ne change pas) Tous les processus sont ainsi identifis par leur PID, mais aussi par le PPID. Le seul qui ne suit pas cette rgle est le premier processus lanc sur le systme le processus init qui n'a pas de pre et qui a pour PID 1.

49

La commande $pstree affiche lascendance de tous les processus excuts sur le systme.

Etat des processus

Un processus peut tre dans un des nombreux tats : o R Excutable (dans la file dattente dexcution). o S En veille (le processus nest pas excut. Il attend un vnement pour se mettre en marche. o T Arrt. o D Sommeil irrversible (le processus est en veille et ne peut tre mis en route que aprs une fonction I/O.

Visualiser les processus

On peut visualiser les processus qui tournent sur une machine avec la commande : $ps -options, les options les plus intressantes sont -e (affichage de tous les processus), -f (affichage dtaille), -a (affiche tous les processus), -x (comprend les processus dmon), -l (longue liste) et u (affiche le nom dutilisateur du propritaire du processus). La commande ps ef donne : UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 ? 1:02 init ... azerty 321 319 0 10:30:34 ttyp1 0:02 csh azerty 324 321 0 10:32:12 ttyp1 0:00 ps -ef La signification des diffrentes colonnes est la suivante: UID nom de l'utilisateur qui a lanc le process PID correspond au numro du process PPID correspond au numro du process parent C au facteur de priorit : plus la valeur est grande, plus le processus est prioritaire STIME correspond l'heure de lancement du processus TTY correspond au nom du terminal TIME correspond la dure de traitement du processus COMMAND correspond au nom du processus. 50

Pour l'exemple donn, le premier processus pour PID 321, le deuxime 324. Vous noterez que le PPID du process " ps -ef " est 321 qui correspond au shell, par consquent le shell est le process parent, de la commande qu'on vient de taper.

Certains processus sont permanents, c'est dire qu'ils sont lancs au dmarrage du systme et arrts uniquement l'arrt du systme. On appelle ces processus des daemons. Pour voir les processus d'un seul utilisateur, vous pouvez taper : $ps -u nom_utilisateur $ps x // affiche tous les processus lance par lutilisateur. $ps aux // affiche tous les processus lance par lutilisateur. En faisant un man ps, vous aurez l'ventail de tous les paramtres possibles.

Envoi de signaux aux processus

Syntaxe : kill signal pid $kill l //affiche tous les signaux disponible. $kill -3428 quivalent $kill TERM 3428 // par dfaut TERM. Les signaux peuvent tre spcifis par leur nom, par exemple KILL, ou par leur numro, par exemple 9. $kill KILL 3428 $kill -9 3428 Il existe la commande killall pour envoyer un signal un groupe de commandes. Exemple : Envoi dun signal KILL tous les processus en cours nomms : netscapecommunicator : $killall KILL netscape-communicator Remarque : La meilleure faon de terminer un processus est de le laisser sachever tous seul. Si non utiliser CTRL-C ou envoyer un signal TERM. Si tout le reste choue, envoyer un signal KILL $kill KILL 345

Changer la priorit d'un processus

Au moment de lancer le processus, syntaxe : nice [-n adjustment] command Il a une priorit par dfaut de 0. La valeur de priorit schelonne de -20(plus haut priorit) 19 (la plus basse). Sans loption n, nice utilisera une valeur de 10. 51

Remarque : Lutilitaire top peut tre utiliss pour dterminer quels processus monopolisent les ressources du systme. gtop :contrle puissant des processus. $nice -5 ps -ef Pour changer la priorit dun processus en cours on utilise la syntaxe suivante : $renice # [-p] PID [-u user] $renice 3 u fouzi p 7134 //tablit la priorit de tous les processus de lutilisateur fouzi ainsi que le processus 7134 3.

Excuter un processus en arrire-plan Excuter une commande en arrire plan en ajoutant une esperluette (&) permet un autre processus dtre excut simultanment sur le mme terminal. (Gain du temps dans le cas ou une commande prend largement du temps)

En tapant une commande en tche de fond, vous aurez l'affichage : $ps -ef & [321] $ A la suite de la saisie de la commande suivie d'un &, le shell vous donne immdiatement la main, et affiche le numro du PID du processus lanc. Exemple : $netscape Vous voulez basculer netscape en tche de fond tapez, CTRL+Z, il va afficher 311 stopped + 311 tant le PID du process netscape. Tapez ensuite bg (pour background), vous voyez safficher [311] Le processus netscape est en tche de fond et le shell vous rend la main. $ Pour reprendre une commande au premier plan, il suffit de tapez fg (pour forground) suivie du numro de travail. Syntaxe : $fg job number $fg 1 Pour savoir le numro de travail, utiliss la commande jobs.

52

Chapitre 7

Oprations de base de mise en rseau


Objectifs : Apprendre les commandes de base pour tester un rseau et dceler des pannes. Examiner les r-commandes ainsi que leurs quivalents scuriss. Comprendre lutilisation de rdit et rsync.

53