Download - Cours Unix-Shell
Annee 2007
Cours Unix-Shell
par
Karam ALLALI
Ecole Speciale d’Informatique
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
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
4.4 Lancement de l’execution d’un shellscript . . . . . . . . . . . . . . . . . . . 29
A Exercices. 31
4
Chapitre 1
Introduction.
5
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
¿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
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
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
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
Chapitre 2
Systeme de fichiers et droits d’acces.
11
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
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
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
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
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
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
Chapitre 3
Commandes de base et gestion des
processus.
18
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
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
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
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
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
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
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
Chapitre 4
VI et Quelques notions sur le Shell.
26
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
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
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
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
Annexe A
Exercices.
31
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
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
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
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
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