Cours Unix-Shell

36
Ann´ ee 2007 Cours Unix-Shell par Karam ALLALI Ecole Sp´ eciale d’Informatique

Transcript of Cours Unix-Shell

Page 1: Cours Unix-Shell

Annee 2007

Cours Unix-Shell

par

Karam ALLALI

Ecole Speciale d’Informatique

Page 2: Cours Unix-Shell

Table des matieres

1 Introduction. 5

1.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.2 Systeme d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.3 Composition du systeme d’exploitation Unix . . . . . . . . . . . . . . . . . 9

1.3.1 Le noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.3.2 Le Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Systeme de fichiers et droits d’acces. 11

2.1 Systeme de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2 Droits d’acces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.2.1 Droits d’acces sous Unix . . . . . . . . . . . . . . . . . . . . . . . . 14

2

Page 3: Cours Unix-Shell

2.2.2 Type de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 Commandes de base et gestion des processus. 18

3.1 Le manuel en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2 Commandes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.1 Creer un repertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.2 Supprimer un repertoire . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.3 Deplacer, changer le nom d’un repertoire . . . . . . . . . . . . . . . 20

3.2.4 Copier tous les fichiers d’un repertoire . . . . . . . . . . . . . . . . 21

3.2.5 Occupation de l’espace disque . . . . . . . . . . . . . . . . . . . . . 21

3.2.6 Autres commandes utiles . . . . . . . . . . . . . . . . . . . . . . . . 22

3.3 Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4 VI et Quelques notions sur le Shell. 26

4.1 L’editeur de texte Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.2 Le Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.3 Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3

Page 4: Cours Unix-Shell

4.4 Lancement de l’execution d’un shellscript . . . . . . . . . . . . . . . . . . . 29

A Exercices. 31

4

Page 5: Cours Unix-Shell

Chapitre 1

Introduction.

5

Page 6: Cours Unix-Shell

1.1 Historique

L’histoire du systeme d’exploitation Unix commence en 1969 aux Bell Labs (labo-

ratoires de recherche en informatique d’A.T.&T.). C’est pour repondre aux besoins des

ingenieurs de la societe que Ken Thompson ecrit un systeme interactif, qui met l’accent

sur les utilitaires de developpement de logiciels, le partage de fichiers et les outils de docu-

mentation qui allait devenir Unix. Ce nom d’Unix a ete attribue par opposition au systeme

Multics (vaste projet du M.I.T.). La premiere evolution interne marquante d’Unix a ete sa

re-ecriture (par Ken Thompson et Denis Ritchie) en langage C, lequel a ete invente pour la

cause en 1971. En 1975, le systeme Unix (v6) est distribue aux universites et aux centres de

recherches. La principale universite qui va travailler sur Unix est l’universite de Berkeley,

qui va produire ses propres versions appelees BSD pour Berkeley Software Distribution.

En 1979, les Bell Labs sortent leur version appelee v7, avec en particulier, l’ajout de nou-

veaux utilitaires et un effort en matiere de portabilite. Cette version est la premiere a etre

diffusee dans le monde industriel. On peut dire qu’elle est a l’origine du developpement

du marche Unix. Au debut des annees 80, une modification de la legislation americaine

autorise A.T.&T. a commercialiser lui-meme ses propres produits qui sont alors appeles

System. C’est a cette epoque que Microsoft propose sa propre version d’Unix appelee

Xenix et destinee aux microordinateurs. A Berkeley, les efforts portent sur l’integration

des protocoles reseaux TCP/IP, la gestion de la memoire avec l’introduction de la pagi-

nation (alors qu’A.T.&T. reste fidele quand a lui a la segmentation), la modification de

certains parametres du systeme (taille des blocs, nombre des signaux...) et l’ajout d’ou-

tils (l’editeur vi, un interpreteur de commandes csh...). Cette proliferation des systemes

6

Page 7: Cours Unix-Shell

¿UnixÀ a engendre un certain nombre de problemes de compatibilite car chacun allant

dans sa propre direction, il y avait alors plusieurs systemes Unix. Plusieurs facteurs vont

alors jouer pour canaliser et recentrer l’offre Unix: la complexite croissante des systemes

et l’action des utilisateurs. En 1983, A.T.&T. sort la version System V, qui est issue de

la v7 et qui sera enrichie au fur et a mesure par de nouvelles versions (releases). Dans le

meme temps, Berkeley, propose sa version 4.2 BSD (avec les fonctionnalites reseau) qui va

servir de base pour de nombreux constructeurs (Sun Microsystems, Digital...) et lui per-

mettre d’entrer dans le monde industriel. Ces deux produits marquent la fin des systemes

Unix-like en raison de leur importance par rapport a la version de reference, la v7. La

fin des annees 80 est marquee par une croissance sans precedent du nombre de systemes

Unix dans le domaine des systemes d’exploitation. Tous les constructeurs proposent une

solution Unix a leur catalogue (on trouve alors trois grandes familles: les versions basees

sur System V, celles issues de BSD et les versions Xenix sur micro). Le debut des annees

90 est marque par le regroupement des constructeurs au sein de deux organisations: l’U.I.

(Unix International) creee a partir de l’accord entre A.T.&T. et Sun Microsystems d’une

part et l’O.S.F. d’autre part. Le premier accord a comme objectif la convergence entre

les versions System V et 4.2 BSD. La premiere realisation est la version System VR4

(System V release 4) qui realise la synthese entre SunOS (version Unix de Sun concue

sur la base BSD), Xenix et System V. L’O.S.F., quand a lui s’est fixe comme objectif de

realiser un systeme, appele OSF/1, construit sur un noyau Unix et integrant les fonction-

nalites apportees par ses membres (multifenetrages, graphismes, bases de donnees...) de

maniere a disposer d’un environnement ouvert commun aux differentes architectures des

constructeurs. La principale realisation a l’heure actuelle de l’O.S.F. est Motif qui definit

7

Page 8: Cours Unix-Shell

un ensemble de normes au niveau de la presentation sur un environnement multifenetre.

1.2 Systeme d’exploitation

L’ensemble de programmes permettant l’utilisation d’une machine s’appelle le systeme

d’exploitation. C’est lui qui doit prendre en charge toute la gamme de complexite trouve

dans des systemes d’ordinateurs : quelques parties interagissent directement avec le materiel,

ou des evenements peuvent se derouler a des vitesses autour de 1/107 secondes (tels que le

changement d’etat d’une porte logique), d’autres parties ont en charge l’interaction avec

les utilisateurs (ou les vitesses sont plutot de l’ordre des secondes). Une simple frappe

sur le clavier peut resulter en 10 appels a des programmes du systeme operatoire, en

1000 instructions machines et en 1000000 changements d’etat des portes logiques. La

strategie adaptee, comme souvent en informatique est d’organiser cette complexite en une

hierarchie d’abstractions, de maniere telle que chaque niveau peut ignorer les details des

autres niveaux.

8

Page 9: Cours Unix-Shell

1.3 Composition du systeme d’exploitation Unix

1.3.1 Le noyau

Le noyau est la partie centrale d’Unix. Il est resident, il se charge en memoire au

demarrage. Sa structure est modulaire, ce qui rend aisees ses manipulations en termes de

portabilite et l’utilisation des services qu’il offre via les primitives (ou appels systemes).

Ce fonctionnement par primitives permet de resoudre les problemes d’acces concurrents

aux informations du systeme. En effet, les appels systemes font entrer l’execution en

mode noyau. Dans ce mode, le processus est assure de garder le processeur jusqu’au

retour au mode utilisateur lorsque l’appel systeme est termine. Les differents noyaux

Unix ont ete reecrits afin de pouvoir s’adapter aux nouvelles machines multi-processeurs

et de supporter le travail en temps reel. Ils sont le plus souvent reecrits en couches: les

differentes fonctions du noyau sont implementees dans des couches logicielles differentes

qui communiquent entre elles par messages. La tendance actuelle est egalement de garder

le moins de fonctions possibles dans le noyau afin de constituer un micro-noyau. Les

fonctions ecartees sont rejetees dans les modules executes en mode utilisateur. L’interface

entre le noyau Unix et les applications est definit par une bibliotheque (libc.a pour le

langage C par exemple). Elle contient les modules permettant d’utiliser les primitives mais

aussi des fonctions plus evoluees combinant plusieurs primitives. D’autres bibliotheques

sont utilisees pour des services specialises (fonctions graphiques,...).

9

Page 10: Cours Unix-Shell

1.3.2 Le Shell

L’interface utilisateur sous Unix est appelee shell. Lorsqu’un utilisateur tape des com-

mandes Unix, ces commandes sont recues par le shell qui les interprete avant de lancer

l’execution de cette commande. Le shell est une couche logicielle bien separee du noyau.

Il joue un double role celui d’interpreteur de commandes et celui de langage de program-

mation. Ce dernier role semblant parfois hermetique a des neophytes. Il existe plusieurs

shells dont les plus repandus sont:

– le Bourne Shell (sh): le shell de base sous Unix A.T.&T., le C-shell (csh): le shell

Unix BSD,

– le Korn-Shell (ksh) qui est une extension du Bourne shell. Il possede toutes les

commandes de son predecesseur, ainsi que des commandes qui facilitent le travail

de l’utilisateur comme des outils de gestion des historiques des commandes tapees...

– le Z-shell (zsh): extension de ksh, qui offre en particulier des modules de completions

des nom de programme, de fichiers, de variables utilisateur et systeme, l’envoie de

message a l’utilisateur de correction en cas d’erreur de frappe.

L’utilisateur, a l’aide des commandes qu’il a a sa disposition, peut ecrire ses propres

fonctions et programmes en langage shell, ce sont alors des shellscripts. Une fois ceux-ci

realises, ils peuvent etre utilises par l’utilisateur comme n’importe quelle commande du

shell lui meme.

10

Page 11: Cours Unix-Shell

Chapitre 2

Systeme de fichiers et droits d’acces.

11

Page 12: Cours Unix-Shell

2.1 Systeme de fichiers

Sous UNIX, les fichiers sont enregistres dans une structure hierarchisee en arbre. Ce

systeme de fichiers est donc compose d’une racine et de noeuds qui sont des repertoires et

des feuilles qui sont des fichiers ordinaires qui contiennent les donnees et les programmes.

Au niveau de l’utilisateur, les entrees-sorties sont vues de facon uniforme c’est-a-dire

avec les memes commandes, la meme syntaxe et les memes attributs qu’il s’agisse d’un

fichier ou d’un peripherique. Par exemple, la redirection d’une commande sur un fichier ou

sur un peripherique utilise la meme syntaxe: commande > sortie ou sortie est le nom du

fichier (ordinaire ou special) de redirection. Mais au niveau du noyau, ce dernier effectuera

l’operation de redirection soit sur le systeme de fichiers, soit sur le peripherique selon le

type du fichier sortie. Cette vision uniforme des entrees-sorties est caracterisee par un

descripteur commun a tous ces elements, qui est appele inode. De fait, chaque fichier

Unix a un inode comprenant les attributs suivants:

• un proprietaire: celui qui a cree le fichier,

• un groupe: le groupe auquel appartient le createur au moment ou il cree le fichier,

• des droits d’acces: (voir paragraphe s’y rapportant),

• des informations generales sur la taille, la date de la derniere operation effectuee sur

le fichier, le nombre de liens sur ce fichier,...

L’arborescence unix est unique, quel que soit le nombre des disques, partitions... La

racine de l’arborescence est ¿ / À. Au dessous de cette racine se trouvent differents

12

Page 13: Cours Unix-Shell

repertoires. On trouve sous unix en general les repertoires suivants : /bin (executables),

/tmp (fichiers temporaires), /dev (peripheriques), /etc (parametrages generaux du systeme),

/usr (ressources du systeme), /users (donnees utilisateurs). Cette arborescence est legerement

differente suivant les systemes (et notamment sous linux) pour lequel on trouve cette

structure generale :

/ : racine du systeme de fichiers (appelee aussi root)

/boot : contient le noyau linux

/root : repertoire des donnees de l’administrateur (root)

/home : repertoire des donnees des utilisateurs (contient autant de sous-repertoires

que d’utilisateurs)

/etc (editing text config) : repertoire contenant les fichiers de configuration generaux

du systeme (fichiers de type texte) correspond approximativement a la branche HKLM

du registre windows

/bin (binaries) : contient les binaires de base lies a une librairie /lib (libraries) : contient

13

Page 14: Cours Unix-Shell

les librairies necessaires aux binaires de /bin /lib/modules : contient les modules du noyau

/sbin (static binaries) : contient les binaires statiques (non liees a une librairie)

/usr (unix system ressources) : contient toutes les ressources du systeme

/usr/bin : contient les binaires lies a une librairie /usr/lib : contient les librairies

necessaires aux binaires de /usr/bin /usr/sbin : contient les binaires statiques (non liees

a une librairie) /usr/share : contient les ressources partagees par les logiciels de /usr/bin

/usr/local : contient les programmes installes par une compilation locale ou un script

d’installation

/tmp : contient les fichiers temporaires generaux du systeme

/dev (device) : contient les peripheriques du systeme

/proc : contient les processus en cours d’execution, les parametres courants (dyna-

miques) du systeme /var : repertoire de donnees (courrier, logs, spool..) /mnt : repertoire

servant au montage des systeme de fichiers ¿ externes À (disquette, cdrom, reseau...)

2.2 Droits d’acces

2.2.1 Droits d’acces sous Unix

Les autorisations d’acces sous UNIX sont de trois ordres: acces en lecture (r), en

ecriture (w) et en execution (x). A partir de ces trois options, on pourra effectuer toutes

14

Page 15: Cours Unix-Shell

les operations de base sur les fichiers (creation, copie, destruction,...). Ces droits vont etre

donnes pour trois niveaux d’utilisateurs: pour le proprietaire, pour le groupe auquel ap-

partient le proprietaire et pour le reste des utilisateurs. En ce qui concerne les repertoires,

l’attribut x est necessaire pour pouvoir se deplacer dans ce repertoire ou pour y rechercher

un fichier.

Plus precisement, Chaque fichier beneficie de droits, definis en trois categories : les

droits du proprietaire (u : User), les droits du groupe (g : Group) et les droits des autres

(o : Other). Ces droits peuvent etre la lecture, l’ecriture et l’execution. Pour chaque fichier,

on a donc trois groupes de trois attributs. On designe symboliquement les droits par r

(Read : lecture), w (Write : ecriture), x (eXecute : execution). Ces droits etant definis

pour trois categories : proprietaire, groupe et autres, on note symboliquement les droits

sur les fichiers par trois groupes de trois lettres. Aucun droit est symbolise par un tiret

- Par exemple, un fichier ayant les droits de lecture, d’ecriture et d’execution pour le

proprietaire, le groupe et les autres aura les attributs rwxrwxrwx. Le meme fichier sans

aucun droit d’execution sera note rw-rw-rw-. Si le proprietaire a seul le droit d’execution,

on aura rwxrw-rw-. Si le proprietaire a le droit de lecture/ecriture, le groupe le droit

de lecture seul et les autres aucun droit, on aura rw-r—– Cette notation est la notation

symbolique. Cette notation a le merite d’etre explicite et simplement comprehensible, mais

elle est plus longue a mettre en oeuvre que la notation octale. Celle-ci utilise la conversion

en base 8 (sur trois bits) des trois attributs de droits. Le premier bit (en partant de la

gauche) correspond au droit de lecture. Le second au droit d’ecriture, le troisieme au droit

d’execution. Comment convertir : le bit de gauche vaut 4, celui du milieu vaut 2, celui de

droite vaut 1. Ajouter simplement ces valeurs : vous aurez un nombre octal (de 0 a 7)

15

Page 16: Cours Unix-Shell

correspondant aux droits. Par exemple 7 = 4 + 2 + 1 − > droits de lecture, ecriture et

execution 4 = 4 + 0 + 0 − > droits de lecture 5 = 4 + 0 + 1 − > droits de lecture

et d’execution Ceci pour chaque categorie d’utilisateurs (proprietaire, groupe et autres).

Exemples : rwxrwxrwx correspond a 777 rw-r–r– correspond a 644 rw-r—– correspond a

640 Ces droits peuvent etre changes avec la commande chmod Par exemple chmod 640

nom-fichier donnera les droits de lecture/ecriture au proprietaire, lecture seule au groupe

et aucun droit pour les autres. La commande chmod permet egalement le changement

des droits sous forme symbolique. Bien entendu, il est possible de changer les attributs

avec un programme graphique ! Les droits sont en fait notes sur 12 bits. Les neufs bits

de droite correspondent aux droits cidessus, les trois bits de gauche correspondent aux

attributs speciaux decrits ci-dessous. Si ces trois bits sont omis, ils sont consideres comme

egaux a 0 (de maniere generale, les chiffres omis sur la gauche sont consideres comme

nuls : 7 equivaut a 0007, 45 a 0045, 644 a 0644).

2.2.2 Type de fichier

Chaque fichier contient egalement l’information de son type :

d pour un repertoire, - pour un fichier normal, b pour un peripherique en mode bloc

(exemple : disque dur), c pour un peripherique en mode caractere (exemple : imprimante),

l pour un lien symbolique (voir plus loin), p pour un tube nomme (fifo), s pour une socket.

• Ces informations apparaissent avec la commande ls −l Exemple pour un repertoire :

ls −dl test (le d signifie que l’on veut l’info sur le repertoire et non sur son contenu)

16

Page 17: Cours Unix-Shell

drwxr-xr-x ....

Le premier d signifie qu’il s’agit d’un repertoire. On note le x (execution) : pour un

repertoire, cela signifie que l’on peut entrer dans le repertoire ou lister son contenu.

17

Page 18: Cours Unix-Shell

Chapitre 3

Commandes de base et gestion des

processus.

18

Page 19: Cours Unix-Shell

3.1 Le manuel en ligne

Une aide en ligne est disponible sous Unix et la plupart des commandes sont presentes

dans ce manuel. La commande man permet de consulter ce manuel. La syntaxe generale

est la suivante:

man [section] nom-de-la-commande

Si la page existe (si elle est trouvee dans l’une des arborescences definies dans la

variable MANPATH), le systeme la formate et l’affiche a l’ecran. En regle generale, la

reponse a beaucoup de problemes se trouve dans ces pages. N’hesitez donc jamais a les

consulter. Attention toutefois, certaines commandes peuvent apparaıtre plusieurs fois dans

la liste des pages de manuel. En effet, certaines fonctions sont utilisees dans plusieurs cas

de figures; par exemple, la commande if..then..else peut etre aussi bien une commande

Unix, qu’une commande C, ou C++ ou Perl... dans ce cas, il existe donc plusieurs pages

se referant a cette commande (plusieurs sections contiennent des informations sur cette

fonction), il faut faire donc attention a appeler la bonne page de manuel. Pour cela, il

existe un moyen de connaıtre toutes les pages de manuel se referant a un mot cle donne:

man -k mot-cle

l’utilisateur verra une ligne pour chaque entree du manuel concernant ce mot-cle. Par

exemple

man -k file

19

Page 20: Cours Unix-Shell

3.2 Commandes de base

3.2.1 Creer un repertoire

La commande servant a creer des repertoires sous Unix est:

mkdir [options] repertoires...

Il suffit d’avoir le droit d’ecriture dans le repertoire pere. Si on veut creer une arbo-

rescence directement, il faut utiliser l’option −p. Par exemple pour creer l’arborescence

/tp− unix/td1, taper mkdir −p tp− unix/td1.

3.2.2 Supprimer un repertoire

Comme pour les fichiers, la commande rm (avec l’option -r) permet de supprimer des

repertoires. Il existe une autre commande:

rmdir repertoires...

qui elle permet de supprimer les repertoires indiques si ceux-ci sont deja vides.

3.2.3 Deplacer, changer le nom d’un repertoire

Comme pour les fichiers, il s’agit de la commande mv. Ceci n’est possible sous System

V que si les deux repertoires ont le meme parent, et sous BSD que si les deux repertoires

20

Page 21: Cours Unix-Shell

sont dans le meme systeme de fichiers.

3.2.4 Copier tous les fichiers d’un repertoire

La commande a utiliser est:

cp − r repertoire source repertoire destination Toute l’arborescence du repertoire

source est copie dans le repertoire destination. Les nouveaux fichiers se retrouvent dans

le repertoire repertoire-destination/repertoire-source.

3.2.5 Occupation de l’espace disque

Parfois, il arrive que vous receviez des messages du systeme ou meme de l’adminis-

trateur systeme vous indiquant que vous occupez trop de place sur le disque. Il existe

deux commandes qui permettent de savoir la place occupee par une arborescence, ou de

connaıtre la place disponible dans un systeme de fichiers. La commande:

du [options] [fichiers...]

affiche le nombre de kilo-octets occupes par les fichiers (ou repertoires) passes en

parametre. La commande:

df [options] [file-system] [fichier]

Si aucun renseignement n’est specifie, la commande df retourne les informations sur

tous les systemes de fichiers.

21

Page 22: Cours Unix-Shell

3.2.6 Autres commandes utiles

cd : Change Directory Permet de changer de repertoire courant Syntaxe : cd chemin-

du-repertoire Le chemin peut etre absolu (il commence par le caractere /) ou relatif : il

s’applique alors a partir du repertoire courant. Si aucun chemin n’est fourni, se positionne

dans le repertoire de travail de l’utilisateur (voir pwd ci-dessous, voir variable $HOME)

Exemple : se positionner dans le repertoire /usr cd /usr

echo affiche sur l’ecran syntaxe : echo chose-a-afficher chose a afficher peut etre une

variable, une chaine, le resultat d’une commande... exemple : afficher ¿ hello word À sur

l’ecran : echo ”hello word”

exit quitte le shell courant. Raccourci : Ctrl-D syntaxe : exit export exporte une va-

riable dans l’environnement courant et permet de la definir syntaxe : export VARIABLE

ou export VARIABLE=valeur exemple : rajouter au path courant un path vers /usr/local/bin

export PATH=$PATH : /usr/local/bin

pwd (Print Working Directory) affiche le repertoire de travail de l’utilisateur courant

syntaxe : pwd exemple 1 : affiche le repertoire de travail (pour le superutilisateur) pwd

(renvoie /root) exemple 2 : definit la variable REPUTIL avec le contenu du repertoire

de travail courant : export REPUTIL=‘ pwd‘ (utilisation de l’antiquote pour renvoyer le

resultat de la commande)

test permet de tester une condition (existence ou type d’un fichier, comparaison de

chaınes, comparaison de nombres. Renvoie un statut egal a 0 si l’expression est vraie,

22

Page 23: Cours Unix-Shell

1 si elle est fausse. Est utilise dans les expressions conditionnelles, le plus souvent dans

les scripts. Il est souvent remplace par une autre syntaxe [ <expression> ] Syntaxe : test

<expressions> Exemple : efface un fichier <fichier> s’il existe if test −e <fichier> ; then

rm <fichier> ; fi Avec la seconde syntaxe, on aurait If [ -e <fichier> ] ; then rm <fichier> ;

fi

umask definit l’umask (masque des droits par defaut lors de la creation de fichier).

Ne positionne jamais le bit de fichier executable sur les fichiers normaux. Syntaxe : umask

<masque> Exemple : positionne le mode de creation par defaut a 644 umask 022

Chown : changement de proprietaire d’un fichier Syntaxe : chown user[ :group] fichier

Option -R : changement recursif de proprietaire

Mount : montage d’un systeme de fichiers dans l’arborescence unix Syntaxe : mount

-t type peripherique repertoire Ou type est le type du systeme de fichiers, peripherique

le nom du peripherique, repertoire le repertoire de montage. Exemple : monter le systeme

de fichiers windows se trouvant sur la premiere partition du disque maitre sur la nappe

ide 1 au point de montage /mnt/windows

Umount : demontage d’un systeme de fichiers Syntaxe : umount <peripherique> ou

umount <point de montage> On ne peut pas demonter un peripherique s’il est occupe (pas

exemple si on utilise des fichiers sur ce peripherique) Ln : creation d’un lien physique ou

symbolique Syntaxe : ln -option <source> <destination> Pour creer un lien symbolique,

utiliser l’option -s Tar : archivage - desarchivage Syntaxe : voir man tar

Grep : recherche d’expression regulieres Syntaxe : grep -options <motif> [<fichier>]

23

Page 24: Cours Unix-Shell

Cherche le motif <motif> dans le fichier <fichier> (<motif> etant une expression reguliere)

Grep est souvent utilise a la suite d’un tube (voir redirections et tubes)

Find : recherche de fichier Syntaxe extremement simplifiee : find <chemin> -name

<motif> Il y a beaucoup d’autres options. Voir man find Exemple : trouver dans le

repertoire courant les fichiers dont le nom commence par c : find . -name ’c*’

Nice : definition de la priorite d’execution d’un processus Syntaxe :nice -n <valeur>

<commande> Lance la commande <commande> avec la priorite <valeur> La priorite

va de -20 (le plus prioritaire) a 19 (le moins prioritaire). Les priorites negatives (c’est a

dire plus prioritaires) ne peuvent etre definies que par le superutilisateur (root)

More : affichage page par page Syntaxe :more <fichier> Souvent utilise a la suite d’un

tube, auquel cas <fichier> n’est pas indique. Less : affichage par page evolue Syntaxe :

less <fichier> Souvent utilise a la suite d’un tube, auquel cas <fichier> n’est pas indique.

Beaucoup d’option : voir man less

3.3 Processus

Tout programme tournant en memoire s’appelle un processus. Chaque processus possede

un numero d’identification unique, des ressources propres (espace memoire, espace d’entrees-

sortie...). Un processus herite de l’environnement du processus qui l’a lance (variables).

Chaque processus peut etre supprime (tue) par la commande kill.

Syntaxe : kill numero-de-processus, kill -s <signal>

24

Page 25: Cours Unix-Shell

numero-de-processus Exemple : tuer un processus recalcitrant :

kill -s 9 1590 (envoie le signal KILL au processus 1590)

Les ressources utilisees par le processus sont alors restituees au systeme. Chaque pro-

cessus est a l’ecoute de signaux. Ces signaux peuvent etre envoyes a un processus par un

autre, mais aussi avec la commande kill. Le signal le plus courant est le signal SIGTERM,

qui demande au programme de s’arreter. Lors de l’arret du systeme, un signal SIGTERM

est envoye en broadcast a tous les processus pour qu’ils s’arretent correctement.

On ajoute que pour connaıtre les processus qui tournent, on fait appel a la commande

ps

Syntaxe : ps options

25

Page 26: Cours Unix-Shell

Chapitre 4

VI et Quelques notions sur le Shell.

26

Page 27: Cours Unix-Shell

4.1 L’editeur de texte Shell

L’editeur vi est l’editeur standard du systeme d’exploitation UNIX. Vous pouvez uti-

liser l’editeur vi dans une fenetre xterm .

Pour utiliser l’editeur vi, vous n’avez qu’a entrer a votre terminal (ou dans une fenetre

Command Tool) vi, suivi d’une espace puis du nom du fichier que vous voulez editer. Si

le fichier n’existe pas, vi le creera automatiquement (l’exemple qui suit editera le fichier

prog.c) :

station% vi prog.c

On distingue deux modes :

• Mode d’insertion Les caracteres entres sont enregistres directement dans le fichier

en cours d’edition;

• Mode de commandes Les caracteres entres sont interpretes en tant que commandes

servant au positionnement du curseur (pour bouger le curseur, faire defiler le texte, etc.),

a l’edition du texte (pour effacer des caracteres, des mots ou des lignes, etc.), au passage

au mode d’insertion (pour entrer du texte dans le fichier) et a l’entree de commandes

globales (commandes plus complexes qui renvoient le curseur au bas de la fenetre).

27

Page 28: Cours Unix-Shell

4.2 Le Shell

Le shell est l’interface homme/machine. Il permet de taper des commandes transmises

au systeme (noyau et processus). Il y a en fait plusieurs shells. Historiquement, c’est le

shell sh qui etait utilise sous unix. Plusieurs version sont ensuite apparues, apportant

une evolution des fonctionnalites (par exemple shell bourne : bash - shell korn : zsh et

d’autres encore). Ce document se refere au shell bourne (bash). Le shell est un interpreteur

de commandes de la meme maniere que command.com ou cmd sous msdos/windows.

Ceux qui ont connu msdos ne seront pas trop depayses. Ils apprecieront certainement les

fonctionnalites avancees du shell, qui en fait une interface souvent plus rapide et efficace

qu’un environnement graphique, mais qui necessite cependant de connaıtre les commandes

du shell. Tel est le but du present paragraphe. Rappel important : sous unix/linux, la casse

des commandes et des noms de fichiers est importante. En regle generale, les commandes

sont en minuscules, les noms de fichiers le sont souvent, les variables sont souvent en

majuscules. Ce ne sont que des habitudes, pas des obligations. Fichier est different de

fichier ou FICHIER. Il faut s’en souvenir ! Les options des commandes sont specifiees par

un tiret suivi d’une lettre, ou un double tiret suivi de nom de l’option. Le tiret doit etre

separe de la commande par un espace.

4.3 Les variables

La notion de variable sous linux est la meme que sous msdos. Les variables sont propres

a un environnement. Si vous ouvrez deux consoles differentes, chacune beneficie de son

28

Page 29: Cours Unix-Shell

environnement propre. Les commandes lancees a partir d’un environnement heritent de

cet environnement. Souvent, les noms de variables sont en majuscules, mais ce n’est pas

une obligation. Le contenu de la variable est reference en faisant preceder le nom de la

variable du signe $.

Exemple : je cree la variable TRUC et je lui donne la valeur ¿ texte de truc À :

TRUC=”texte de truc” J’affiche le contenu de la variable TRUC : echo $ TRUC (affiche :

texte de truc) par contre, echo TRUC affiche TRUC

Pour afficher l’environnement courant et ses variables : printenv Les variables definies

lors d’une session ne sont pas conservees. Pour que les variables restent definies, il faut

les redefinir a chaque fois. C’est le role des fichiers de configuration.

4.4 Lancement de l’execution d’un shellscript

On appelle shellscript un fichier qui contient des noms de commandes et des instruc-

tions internes au shell. L’utilisateur peut lancer un shellscript commande une commande.

Les commandes contenues dans le shellscript sont alors lancees comme si l’utilisateur les

tapait sur la ligne de commande. On peut lancer l’execution d’un shellscript de trois

manieres differentes

• Lancement par le nom du shellscript: Si l’utilisateur a le droit de lecture et d’execution

sur le shellscript, il peut le lancer en tapant simplement son nom. Il se comporte alors

comme n’importe quelle commande. En particulier, il peut etre utilise par un autre shells-

29

Page 30: Cours Unix-Shell

cript. On peut construire ainsi de nouvelles commandes adaptees a ses propres besoins.

Lors de l’appel, le shell parcours la variable PATH pour trouver le fichier, donc par pru-

dence, il est bon de lancer le script comme suit: ./shellscript, ceci evitera le temps de

recherche du script dans les arborescences de repertoires et surtout l’execution d’un autre

script portant le meme nom.

• Lancement par appel explicite du shell: Si le script porte un attribut de lecture, on

peut le lancer par appel explicite du shell: /bin/ksh nom-script Dans ce cas, un nouveau

shell est lance, celui-ci lit les commandes du script et les fait executer comme si elles

avaient ete tapees au clavier.

• Lancement par appel de la commande interne ¿.À: La derniere solution consiste

a faire preceder le nom du fichier par un ¿.À: . shellscript Dans ce cas, il n’y a pas de

creation d’un nouveau processus, les modifications de l’environnement sont conservees.

En fait, ¿.À est une commande interne au shell qui lit toutes les commandes contenues

dans le shellscript et les execute comme si elles avaient ete tapees au clavier. De la meme

facon, la variable PATH est parcourue pour determiner l’emplacement dans le systeme de

fichiers du script.

30

Page 31: Cours Unix-Shell

Annexe A

Exercices.

31

Page 32: Cours Unix-Shell

Exercices

Exercice 1En utilisant la commande cat, creer un fichier appele V illes et contenant

les lignes suivantes :CasablancaRabatFez

Terminer la saisie par ′Ctrl − d′

Ajouter les lignes suivantes :MohammediaMarakech

Terminer la saisie par ′Ctrl − d′

En utilisant la commande sort, creer un fichier appele V illesTrie quicontient les noms des villes du fichier V illes mais dans l’ordre alphabetique.

Utiliser le meme principe pour creer un fichier qui contient les noms detrois eudiants, apres, vous en ajoutez deux, ensuite, vous trier les nomsdans l’ordre alphabetique.

Exercice 2Creer un fichier appele liste contenant la liste des fichiers du repertoire

et de ses sous-repertoire.Afficher la liste des fichiers presents dans le repertoire dans l’ordre al-

phabetique en tapant une ligne.

Exercice 3Taper une ligne de commande qui affiche le message

′′Le fichier est bien present sur le disque dur′′ seulement lorsqu’un fichier′′toto′′ est present dans le repertoire courant.

N.B. Commandes a utiliser : ls, echo

Exercice 4Afficher tous les fichiers contenants la lettre p.Afficher les fichiers commencants par un l.

Exercice 5Aller dans le repertoire de connexion de votre voisin en utilisant les

chemins absolus.Retourner dans votre repertoire de connexion. Creer un repertoire ′rep1′.Aller dans le repertoire d’un autre voisin en utilisant les chemins relatifs.

Creer un repertoire ′rep2′. Conclure.

Exercice 6Dans votre repertoire, recreer le fichier ′liste′ auquel vous attribuerez

les droits suivants 444. Expliquez les droits que vous avez accordez a votrefichier. Donner une commande equivalente.

Changer le proprietaire du fichier.

32

Page 33: Cours Unix-Shell

Ajouter les droits en ecriture pour tout le monde sur ce fichier. Conclure.

Exercice 7Rechercher a partir de /home tous les fichiers contenants au moins un

chiffre dans leur nom et les afficher.

Exercice 8On veut que les fichiers crees a compter de maintenant soient accessibles

uniquement a leur proprietaire rw −−−−−−−.

Exercice 9Calculer le resultat de la multiplication de 8745 et de 4512 et stocker le

resultat dans la variable multip

Exercice 101. En tant que user1, pouvez vous creer le rep. temporaire /home/temp?

essayer! pourquoi?2. Effectuer cette creation comme root (pensez a la commande su).

3. Accorder les permissions maximales sur /home/temp, verifier.4. totox, toujours lui, tout content d’avoir enfin un droit d’ecriture, dans

/home/temp eesaie de copier les 2 fichiers /ets/hosts et /ets/passwd dans/home/temp? y parrviendra t-il? pourquoi? que donne ll /home/tmp?

5. totox, essaie maintenant de supprimer ces 2 fichiers de /etc. Reussit-il? 6. Effraye a l’idee de se faire pincer par le (ou la) redoutable root, totoxveut masquer sa faute tout en faisant punir user1 a sa place ! Pour cela,il veut que user1 devienne proprietaire du fichier copie passwd. Comments’y prend t-il? Reussit-il? Et vous comment auriez vous fait?

Exercice 111. Comparer les permissions de /ets/passwd et /etc/shadow. Pourquoi

a t-on nomme ainsi ce dernier fichier ? user1 peut-il le lire? et voir sapresence? L’examiner pour savoir son role.

2. Par precaution, en faire une copie sous le nom de shadow.bak dans/home/temp ! verifier les droits de /home/temp/shadow.bak

3. Pensez-vous tout de meme pouvoir supprimer le fichier precedent?Concluez!

4. root fait maintenant une copie de shadow chez vous, dans /home/user1,sous le nom de shadow.bak et vous accorde la propriete de la copie. Com-ment fait-il? user1 verifie le resultat.

5. Avec un editeur de texte, vous modifiez ce fichier, par exemple ensupprimant des lignes, et vous faites une mise a jour. Cette mise a joursera t-elle realisee? pourquoi?

6. Pensez vous que user1 puisse supprimer ce fichier? Essayez et expli-quez!

Exercice 12

33

Page 34: Cours Unix-Shell

1. Afficher la quantite d’espace occupe des systemes de fichiers.2. Afficher l’espace-disque occupe par tous vos repertoires.3. La meme chose, mais en triant les repertoires selon leur taille dans

l’ordre inverse (les plus gros repertoires d’abord, les plus petits finalement).4. La place totale occupee correspond-elle a ce qu’indique la commande

quata?

Exercice 131. Afficher la liste de tous les processus qui vous appartiennent.2. Ouvrez une fenetre horloge avec la commande xclock − update 2

(vous constatez que l’horloge tourne mais que le shell est suspendu), puissuspendez-la (vous constatez que le processus horloge ne tourne plus, maisque le shell est revenu en avant-plan)

3. Voyez l’etat de ce processus avec la commande jobs, relancez-le enarriere-plan (les aiguilles tournent a nouveau). Verifiez avec la commandejobs, puis tuez-le.

4. Relancez cette horloge, mais cette fois-ci directement en arriere-plan(c’est-a-dire de facon detachee du shell). Comment tuer ce processus hor-loge depuis une autre fenetre terminal (depuis un autre shell, ou la com-mande jobs ne voit pas le processus en question)

Exercice 14Faites un alias qui affiche avec la commande more la taille occupee par

tous vos repertoires. Testez cet alias.

Exercice 15Tapez une commande, de maniere a ce que les fichiers lors de leur

creation aient par defaut les droits 640 (rw-r—–), et les repertoires 750(rwxr-x—).

Exercice 16Extraire les noms de login et UID puis triez suivant les UID, le tout en

une seule commande, vous redirigerez le tout vers un fichier.

Exercice 171. Vous avez chez vous un repertoire tmp/ qui contient un fichier bidon.

Creez un lien physique sur tmp/bidon appele blo, dans votre repertoired’acceuil (HOME). Comparez les contenus de tmp/bidon et de blo?

2. Meme question avec un lien symbolique.3. Quelles sont les differences entre les liens durs et les liens symboliques?

4. Dans quel cas ne peut-on pas faire de lien physique? Que faut-il faire?Quel est l’effet de chmod sur un lien?

34

Page 35: Cours Unix-Shell

Exercice 18Pour les nostalgiques du dos, il s’agit de taper a : en ligne de commande

et d’obtenir le contenu du repertoire principale de la disquette. Taper c :pour demonter la disquette et obtenir la liste de /. Pour ceci il faut ecrireun petit script!

Exercice 19Ecrire un script de verification si un utilisateur est connecte.

Exercice 20Ecrire un script (en utilisant la boucle “for”) qui affiche tous les fichier

qui se termine par ∗.c

Exercice 21L’objectif de cette exercice est de savoir que le Shell, peut etre un vrai

language de programmation.1. Ecrire un script, qui teste un nombre entier naturel donne s’il est pair

ou impair, puis affiche le resultat.2. Ecrire un script pour multiplier deux nombres et afficher le resultat.3. Ecrire un script qui transforme un nombre donne en ecriture binaire,

octale ou decimale.

Exercice 22Ecrire un script illustrant le passage des arguments en Shell.

Exercice 23Avec la boucle while ecrire un petit script qui affiche tous les nombres

pairs inferieurs a 100.

Exercice 241. Prerequis: while, les parametres positionnels, set–Conseil : utiliser la construction :cat ¡ user.text — while truedo read ligneif [ “$ligne” = “ “ ]; then break; fi...fi2. Creer un fichier texte user.txt contenant quelques lignes au format

suivant login mot-de-passe nom groupes-secondairesPar exemple : toto moiletoto M. Toto profs3. Ecrire le script essai − comptes.sh qui parcourt ce fichier ligne par

ligne, recupere les champs de chaque ligne dans les parametres positionnels,et les affiche.

35

Page 36: Cours Unix-Shell

Remarque Dans le prochaine exercice, on verra commet creer un scriptcapable de generer des comptes a partir d’un fichier!

Exercice 25• Obtenir la liste de tous les utilisateurs (nom, uid, gid, repertoire per-

sonnel) possedant un compte cree sur le serveur, autrement dit ayant unuid superieur a 500 (uid se trouve au 3eme champ de /etc/passwd)

Indication• Se servir du dernier exercice du TP5 avec les conseils suivant1. Extraire les champs 1, 3 et 4 du fichier /etc/passwd avec la commande

cat /etc/passwd — cut -d: -f 1,3,42. envoyer les lignes precedents vers l’entree de la commande tr, de facon

a remplacer le separateur : par des espaces cat /etc/passwd — cut -d: -f1,3,4 — tr “:” “”

3. Puis on envoie la sortie dans une boucle while qui permet d’en extrairechaque ligne, dont on affectera chaque champ aux parametres positionnelsgrace a set –

4. Il suffira alors de comparer la valeur uid a 500 et d’afficher si uid ¿=500

Exercice 26• Il s’agit de creer le script test-fichier, qui precidera le type du fichier

passe en parametre, ses permissions d’accees pour l’utilisateur• prerequis : passage de parametres, instructions : test et if .. then .. else• Appel : ./test-fichier nomFichier• Exemple de resultats attendusLe Fichier /ets est un repertoire

“/etc” est eccessible par root en lecture ecriture execution

Le fichier /etc/smb.conf est un fichier ordinaire qui n’est pas vide“/etc/smb.conf” est accessible par jean en lecture.

Exercice 27• Il s’agit de creer un ensemble de comptes constituant un nouveau

groupe.• Les noms doivent s’ecrire comme un nom generique (par ex. stage,

eleve ..) suivit d’un numero.• Le script demande d’abord le nom generique et celui du groupe secon-

daire dans lequel tous les comptes sont crees. Par defaut le nom du groupesera le nom generique.

36