Vous êtes sur la page 1sur 58

Cours utilisateur UNIX

V1.1 du 15 avril 2004


Par Olivier Hoarau (olivier.hoarau@funix.org)
Cours utilisateur UNIX 1/58 http://www.funix.org
Table des matires
1Historique du document.....................................................................................................................5
2Prambule et licence...........................................................................................................................5
3Principes de base UNIX.....................................................................................................................5
3.1Les processus ou process............................................................................................................5
3.2Dfinition d'un systme d'exploitation........................................................................................5
3.3Environnement............................................................................................................................6
4Prsentation du systme UNIX...........................................................................................................6
4.1Les utilisateurs UNIX.................................................................................................................6
4.2Les fonctions principales............................................................................................................6
4.2.1Partage des ressources quitables........................................................................................6
4.2.2Interface avec le matriel....................................................................................................7
4.2.3Gestion de la mmoire........................................................................................................7
4.2.4Gestion des fichiers.............................................................................................................7
4.3Structure du systme UNIX........................................................................................................8
4.4Le shell........................................................................................................................................8
5Ouverture et fermeture de session......................................................................................................9
5.1Ouverture de session...................................................................................................................9
5.2Changement de password...........................................................................................................9
5.3Fermeture de session.................................................................................................................10
6Commandes UNIX et redirection.....................................................................................................10
6.1Syntaxe d'une commande..........................................................................................................10
6.2Les entres sorties.....................................................................................................................10
6.3Redirection des entres sorties..................................................................................................11
6.4Redirection des erreurs.............................................................................................................12
6.5Les pipes...................................................................................................................................12
7Le systme de fichiers......................................................................................................................13
7.1Les types de fichier...................................................................................................................13
7.2Atteindre un fichier...................................................................................................................14
7.2.1Nommer un fichier............................................................................................................14
7.2.2Le chemin d'accs.............................................................................................................14
7.2.3Les commandes.................................................................................................................15
7.3Visualiser les fichiers................................................................................................................16
7.4Commandes de gestion des rpertoires.....................................................................................17
7.5Commandes de gestion des fichiers..........................................................................................17
7.6Les liens....................................................................................................................................17
7.7Les inodes.................................................................................................................................18
7.8Les mtacaractres....................................................................................................................18
8Les droits d'accs..............................................................................................................................19
8.1Identification de l'utilisateur.....................................................................................................19
8.2Dfinition des droits d'utilisateur..............................................................................................19
8.2.1Cas d'un fichier classique..................................................................................................19
8.2.2Cas d'un rpertoire............................................................................................................20
8.2.3Cas d'un lien......................................................................................................................20
8.3Commandes associes...............................................................................................................20
Cours utilisateur UNIX 2/58 http://www.funix.org
8.3.1Changer les droits : chmod................................................................................................20
8.3.2Changer les droits par dfaut : umask...............................................................................21
8.3.3Changer le propritaire et le groupe..................................................................................22
9Gestion des processus.......................................................................................................................22
9.1Les caractristiques d'un processus...........................................................................................22
9.2Visualiser les processus............................................................................................................22
9.3Commandes de gestion des processus......................................................................................23
9.3.1Changer la priorit d'un processus....................................................................................23
9.3.2Arrter un processus..........................................................................................................24
9.4Lancer en processus en tche de fond.......................................................................................24
10Les filtres UNIX.............................................................................................................................25
10.1Modifier les donnes d'un fichier............................................................................................25
10.1.1Coupe un fichier en morceau : split................................................................................25
10.1.2Trier des fichiers : sort....................................................................................................25
10.1.3Conversion de chane de caractre :tr.............................................................................26
10.2Edition de fichiers avec critres..............................................................................................27
10.2.1Editer un fichier par la fin : tail.......................................................................................27
10.2.2Editer un fichier par le dbut : head................................................................................27
10.2.3Compter les lignes d'un fichier : wc................................................................................28
10.2.4Edition de champ d'un fichier : cut.................................................................................28
10.2.5Fusion de fichier : paste..................................................................................................29
10.2.6Extraction de lignes communes de deux fichiers : comm...............................................30
10.3Comparaison de fichiers.........................................................................................................30
10.3.1Comparer deux fichiers : cmp.........................................................................................30
10.3.2Edition des diffrences entre deux fichiers : diff............................................................31
11Les commandes grep et find...........................................................................................................31
11.1Les expressions rgulires......................................................................................................31
11.2La commande grep..................................................................................................................32
11.3La commande find..................................................................................................................33
11.3.1Prsentation.....................................................................................................................33
11.3.2Recherche par nom de fichier..........................................................................................33
11.3.3Recherche suivant la date de dernire modification........................................................34
11.3.4Recherche suivant la taille..............................................................................................34
11.3.5Recherche combine.......................................................................................................34
11.3.6Redirection des messages d'erreur..................................................................................34
11.3.7Les commandes en option...............................................................................................35
11.3.8Autres subtilits...............................................................................................................35
12Expressions rgulires et sed..........................................................................................................35
12.1Les expressions rgulires......................................................................................................35
12.1.1Prsentation.....................................................................................................................35
12.1.2Le mtacaractre ............................................................................................................36
12.1.3Les mtacaractres [ ]......................................................................................................36
12.1.4Les mtacaractres ^ et $.................................................................................................36
12.1.5Le mtacaractre *..........................................................................................................37
12.1.6Les mtacaractres \ ( \)..................................................................................................37
12.2La commande sed...................................................................................................................37
Cours utilisateur UNIX 3/58 http://www.funix.org
12.2.1Prsentation.....................................................................................................................37
12.2.2La fonction de substitution s...........................................................................................38
12.2.3La fonction de suppression d...........................................................................................38
12.2.4Les fonctions p, l, et =.....................................................................................................39
12.2.5Les fonctions q, r et w.....................................................................................................39
12.2.6Les fonctions a et i..........................................................................................................39
12.2.7sed et les sous chanes.....................................................................................................40
13La commande awk..........................................................................................................................40
13.1Prsentation.............................................................................................................................40
13.1.1Prsentation et syntaxe....................................................................................................40
13.1.2Enregistrements et champs..............................................................................................41
13.2Critres de slection................................................................................................................42
13.2.1Prsentation.....................................................................................................................42
13.2.2Les expressions rgulires...............................................................................................42
13.2.3Les expressions relationnelles.........................................................................................43
13.2.4Combinaison de critres..................................................................................................43
13.2.5Plage d'enregistrement dlimites par des critres..........................................................43
13.3Les actions..............................................................................................................................43
13.3.1Prsentation.....................................................................................................................43
13.3.2Fonctions prdfinies traitant des numriques................................................................44
13.3.3Fonctions prdfinies traitant de chanes de caractres..................................................44
13.3.4Fonctions dfinies par l'utilisateur..................................................................................45
13.4Les variables et oprations sur les variables...........................................................................45
13.4.1Prsentation.....................................................................................................................45
13.4.2Les variables utilisateur...................................................................................................45
13.4.3Les variables prdfinies (systme)................................................................................46
13.4.4Oprations sur les variables............................................................................................46
13.4.5Les variables de champ...................................................................................................47
13.5Les structures de contrle.......................................................................................................47
13.5.1Prsentation.....................................................................................................................47
13.5.2Les dcisions (if, else).....................................................................................................47
13.5.3Les boucles (while, for, do-while)..................................................................................48
13.5.4Sauts controls (break, continue, next, exit)...................................................................49
13.6Les tableaux............................................................................................................................49
13.6.1Prsentation.....................................................................................................................49
13.6.2Les tableaux unidimensionnels.......................................................................................49
13.6.3Les tableaux associatifs...................................................................................................50
13.6.4Les tableaux multidimensionnels....................................................................................50
14Exercices.........................................................................................................................................50
14.1Critres pour les noms de fichier............................................................................................50
15Les droits d'accs............................................................................................................................51
15.1Grep........................................................................................................................................53
15.2Les filtres................................................................................................................................54
15.3find..........................................................................................................................................55
15.4awk..........................................................................................................................................56
Cours utilisateur UNIX 4/58 http://www.funix.org
1Historique du document
15.04.2004 V1.1 Reprise du document sous OpenOffice
27.12.1999 V1.0 Cration du document
2Prambule et licence
Ce document est un essai de vulgarisation d'UNIX. Il est destin ceux qui l'utilisent dj mais
aussi aux dbutants qui voudraient en apprendre plus sur ce systme d'exploitation qui est en train
de se populariser vitesse grand V avec l'explosion de Linux.
La dernire version de ce document est tlchargeable l'URL http://www.funix.org. Ce document
peut tre reproduit et distribu librement ds lors qu'il n'est pas modifi et qu'il soit toujours fait
mention de son origine et de son auteur, si vous avez l'intention de le modifier ou d'y apporter des
rajouts, contactez l'auteur (olivier.hoarau@funix.org) pour en faire profiter tout le monde.
Ce document ne peut pas tre utilis dans un but commercial sans le consentement de son auteur.
Ce document vous est fourni "dans l'tat" sans aucune garantie de toute sorte, l'auteur ne saurait tre
tenu responsable des quelconques misres qui pourraient vous arriver lors des manipulations
dcrites dans ce document.
3Principes de base UNIX
3.1Les 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.
Par exemple le logiciel Winword sous Windows est en fait un bte programme crit dans un langage
abscons qui a t ensuite compil pour le rendre comprhensible par la machine, ce n'est
uniquement que quand vous le lancez, que vous avez alors affaire au process Winword.
3.2Dfinition d'un systme d'exploitation
Un systme d'exploitation est un ensemble de programmes charg de faire l'interface entre
l'utilisateur et le matriel. C'est dire que quand un utilisateur tape une commande au niveau d'un
logiciel (ou application), le logiciel interprte la commande, la transmet au systme d'exploitation
qui la transmet au matriel dans un format comprhensible.
Un exemple vaut mieux qu'un grand discours, quand vous ouvrez un fichier dans votre traitement de
texte favori, vous avez appuy sur l'icne qui va bien, votre traitement de texte interprte l'action
Cours utilisateur UNIX 5/58 http://www.funix.org
d'ouverture de fichier et transmet l'ordre au systme d'exploitation, ce dernier va alors commander
au contrleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent
au fichier en question. 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.
3.3Environnement
Un environnement est dit fentr quand il y a possibilit de pouvoir faire apparatre plusieurs
fentres, il va de pair avec l'utilisation d'une souris, Windows est par exemple un exemple
d'environnement fentr. On parle aussi d'environnement graphique.
A l'oppos on trouve aussi des environnements textuels non graphiques, DOS en est un bel
exemple.
4Prsentation du systme UNIX
4.1Les 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 elle 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 charg 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).
4.2Les fonctions principales
UNIX est un systme d'exploitation dont voici les tches principales :
4.2.1Partage des ressources quitables
UNIX veille ce que toutes les ressources de l'ordinateur (imprimante, mmoire, ...) soient
partages quitablement entre tous les processus.
Cours utilisateur UNIX 6/58 http://www.funix.org
Par exemple si vous travaillez sur une appli du genre base de donnes, vous lancez une requte
(commande dans le langage base de donnes) coteuse en temps, pour patienter rien ne vous
empche de vous lancer un Doom de derrire les fagots. Vous 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.
4.2.2Interface 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 dans le lecteur de 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.
4.2.3Gestion 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, la
mmoire statique dans le disque dur. Dans le vocabulaire Unix, quand on parle de mmoire on sous
entend mmoire volatile ou RAM, c'est la convention qui sera adopte pour la suite du cours.
Tout programme qui s'excute, ou process, a besoin de mmoire pour y stocker notamment les
donnes qui 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, un process ne doit pas s'accaparer toute la mmoire, sans quoi les autres
process ne pourraient plus fonctionner.
La mmoire est vue comme une ressource matrielle, UNIX doit donc vrifier qu'aucun process
accde la mmoire directement ou ne se rserve une zone de la mmoire.
4.2.4Gestion des fichiers
UNIX fournit les outils ncessaires pour stocker les donnes et pour pouvoir les rcuprer
rapidement et facilement. Il fournit les outils pour pouvoir visualiser l'ensemble des fichiers de
manire simple. Ces fichiers se trouvent sur le disque dur, on nomme cela un systme de fichiers ou
File System en anglais.
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.
Cours utilisateur UNIX 7/58 http://www.funix.org
4.3Structure du systme UNIX
App1ca11ohs
]
-----------------------------------------------------------
] Appes sys1me bhTX ]
-----------------------------------------------------------
] ]
------------------------------ ---------------------------
] Ces11oh de pJocessus ] ] Sys1me de ges11oh de ]
] ] ] 11ch1eJs ]
----------------------------- ---------------------------
] ]
] ---------------------------
] ] dJ1veJ pJ1phJ1que ]
] ---------------------------
] ]
-------------------------------------------------------------
] Coh1Je ma1J1e ]
------------------------------------------------------------
]
------------------------------
] ha1J1e ]
------------------------------
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 process ne pouvaient pas accder directement aux ressources matriels,
en fait les process 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
process 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.
4.4Le 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, ils se diffrencient par la syntaxe et la richesse des commandes. Le
plus commun est le Bourne-Shell, on trouve aussi le C-Shell qui s'apparente au langage de
programmation C, le Korn Shell, le Posix Shell, et sous Linux le bash-shell.
Cours utilisateur UNIX 8/58 http://www.funix.org
5Ouverture et fermeture de session
5.1Ouverture 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.
A la mise sous tension, apparaissent l'cran toute une liste de termes plus ou moins barbares, vous
pouvez ignorer tout a. Au bout d'un certain temps apparat enfin le message login: avec un curseur
qui clignote. Le systme attend que vous rentriez votre login. Rentrez votre login. Puis tapez Enter,
apparat alors le message Password, tapez votre mot de passe, vous pouvez vous rendre compte que
votre mot de passe n'apparat pas en clair l'cran, il est remplac pour des raisons de scurit
vidente par des *.
A la mise sous tension, vous pouvez aussi disposer d'une interface graphique de connexion, au lieu
d'avoir un simple login: avec le curseur qui clignote, vous avez une fentre ou bannire qui vous
invite saisir votre login et votre mot de passe. C'est notamment le cas pour la configuration par
dfaut de la Mandrake 6.0, mais aussi pour les versions rcentes de HP-UX et de Solaris.
Une fois le login et le mot de passe saisi, deux possiblits 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:
|og1h_ocahos1 og1h]$
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.
5.2Changement de password
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.
ATTENTION : Evitez de vous servir du pav numrique, car d'un poste un autre, il peut y avoir
des grosses diffrences ce niveau l.
Si vous avez oubli votre mot de passe, vous devez vous adresser l'administrateur du systme
(root) qui est le seul habilit vous dbloquer.
>passwd
0d passwd .******
Se111hg passwoJd 1oJ useJ . o1v1eJ
hew passwoJd .******
Cours utilisateur UNIX 9/58 http://www.funix.org
Reeh1eJ passwoJd .******
>
ATTENTION : Sur certains systmes, on ne doit pas taper passwd mais yppasswd, demandez le
votre administrateur. Pour informations, on utilise yppasswd pour les client NIS.
5.3Fermeture 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 vous retrouvez
alors avec le prompt de login, un autre utilisateur pourra alors utiliser la machine.
Dans un environnement graphique, vous avec une commande Exit, ou Logout, qui a strictement le
mme effet.
Vous devez veiller vous dconnecter quand vous n'utilisez plus le systme, pour des raisons de
scurit, mais aussi tout simplement pour librer le poste de travail.
6Commandes UNIX et redirection
6.1Syntaxe d'une commande
La syntaxe standard d'une commande UNIX est la suivante :
commahde -op11ohs aJg1 aJg2 aJg3
Les options varient en fonction de la commande, le nombre des arguments qui suivent dpend aussi
de la commande, par exemple la commande :
soJ1 -J moh-11ch1eJ
sort (trier) permet de trier un fichier, l'option r (reverse), permet de trier en sens inverse le fichier.
L'argument unique de la commande est le nom du fichier. Avec
cp -R moh-JepeJ1o1Je houveau-JepeJ1o1Je
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 (voir plus loin la
signification de la commande).
A noter que pour introduire une option on met -, ce n'est pas ncessaire pour certaines commandes
(tar par exemple).
6.2Les 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
Cours utilisateur UNIX 10/58 http://www.funix.org
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.
6.3Redirection des entres sorties
Quand vous lancez une commande dans un shell, il peut y avoir du texte qui s'affiche suite
l'excution de la commande, ce texte par dfaut, s'affiche dans le shell. On dit que le shell (ou
terminal) est la sortie standard, c'est l o va s'afficher tous les commentaires d'une commande.
Vous pouvez changer ce comportement, en tapant :
ma-commahde > moh-11ch1eJ
Tous les commentaires, les sorties, de la commande, ne vont pas apparatre au shell mais tre crits
dans un fichier. En d'autres termes, la standard 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, la terminaison de la commande.
La redirection > a pour effet de crer le fichier mon-fichier, si ce fichier existait dj, il est tout
simplement cras (supprim et recr), ce qui peut tre gnant si vous ne voulez pas perdre ce qu'il
contient, vous disposez donc de la redirection >>. En tapant :
ma-commahde >> moh-11ch1eJ
Le fichier mon-fichier n'est pas cras, mais la sortie standard (les commentaires de la commande)
sont ajouts en fin de fichier, la suite du texte qui tait dj dans le fichier.
Les redirections marchent dans les deux sens, par exemple en tapant la commande suivante :
soJ1 < moh-11ch1eJ
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie), celle-ci va donc trier
le contenu du fichier, par dfaut le rsultat sort sur la sortie standard, c'est dire l'cran, plus
prcisment sur le shell. Avec :
soJ1 < moh-11ch1eJ > 11ch1eJ-1J1e
On a vu que sort < mon-fichier avait pour effet de trier le fichier mon-fichier, l'expression
>fichier-trie a pour effet d'envoyer le rsultat (le fichier tri) dans un fichier fichier-trie, le rsultat
n'apparat plus l'cran, mais est sauvegard dans un fichier.
Avec la redirection << la commande va lire les caractres jusqu' la rencontre d'une certaine chane
de caractres. Exemple avec la commande cat (catalogue, permet d'diter le contenu d'un fichier).
>ca1 << 11h e 1ape du 1ex1e usqu` a cha1he de caJac1Je 11h >
En tapant la commande, vous revenez la ligne, mais perdez le prompt, cat va lire (et diter) les
caractres que vous saisissez jusqu' qu'il rencontre la chane fin, ce moment l, le prompt apparat
nouveau. Si vous voulez crer un fichier avec un peu de texte l'intrieur, vous ferez :
Cours utilisateur UNIX 11/58 http://www.funix.org
>ca1 << 11h > moh-11ch1eJ e 1ape du 1ex1e qu1 seJa sauvegaJd dahs moh-11ch1eJ,
pouJ 1eJm1heJ e 1ex1e 11h >
Le texte que vous venez de saisir, se trouve donc dans mon-fichier.
Avec la commande :
>11ch1eJ-v1de
Vous crez un fichier vide fichier-vide.
6.4Redirection des erreurs
Par dfaut les messages d'erreur s'affichent l'cran (sortie standard par dfaut), vous pouvez
modifier ce comportement. On rappelle que la sortie d'erreur a pour code 2. Vous pouvez
sauvegarder dans un fichier vos messages d'erreur, pour analyse ultrieure, en tapant :
ca1 moh-11ch1eJ 2>11ch1eJ-eJJeuJ
Si on rencontre une erreur pendant l'excutionde la commande d'dition cat de mon-fichier
(absence du fichier par exemple), le message d'erreur sera sauvegard dans le fichier fichier-erreur.
En tapant :
soJ1 moh-11ch1eJ > 11ch1eJ-1J1e
Vous redirigez le rsultat de la commande sort mon-fichier vers le fichierfichier-trie, la sortie
standard (descripteur 1) n'est donc plus l'cran (plus prcisment le shell ou terminal) mais le fichier
fichier-trie.
Par dfaut les messages d'erreur s'affichent dans le shell, vous pouvez faire en sorte qu'ils s'affichent
dans le fichier fichier-trie, en tapant :
soJ1 moh-11ch1eJ > 11ch1eJ-1J1e 2>&1
Avec la syntaxe >& vous indiquez que les messages d'erreurs seront redirigs vers la sortie standard
qui est le fichier fichier-trie.
6.5Les pipes
Un pipe (en franais tube de communication) permet de rediriger la sortie d'une commande vers une
autre. En d'autres termes, pour rediriger les rsultats (la sortie) d'une commande, on a vu qu'on
pouvait taper :
commahde1 > soJ11e1
On redirige cette sortie vers une autre commande, a devient donc une entre pour cette dernire
commande, pour cela vous tapez :
commahde2 < soJ11e1
Cours utilisateur UNIX 12/58 http://www.funix.org
En fait la syntaxe commande1|commande2 (| tant le symbole de pipe) est totalement quivalente
aux deux lignes de commandes prcdentes.
Exemple : ls permet la visualisation de fichiers, en tapant ls, on obtient :
11ch1eJ1 11ch1eJ2 1o1o11ch1eJ
grep permet la recherche d'une chane de caractre dans une liste donne, en tapant grep toto * (*
signifie tous les fichiers, grep recherche la chane de caractre toto dans les noms de tous les
fichiers), on obtient :
1o1o11ch1eJ
On a le mme rsultat avec le |, en tapant :
s ] gJep 1o1o
La premire commande aura pour effet de lister le nom des fichiers se trouvant l'endroit o l'on a
tap la commande, 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 toto. Le
rsultat est donc aussi:
1o1o11ch1eJ
7Le systme de fichiers
7.1Les types de fichier
Il existe trois types de fichier, le fichier qu'on pourrait qualifi de normal, le rpertoire ou catalogue
(en anglais directory) et les fichiers spciaux.
Un fichier normal contient des donnes, ce fichier peut tre lisible, c'est dire contenir des
informations comprhensibles crites en claire, ce fichier peut tre aussi totalement illisible.
Concrtement un fichier texte qui comme son nom l'indique contient du texte est lisible, alors qu'un
excutable ne l'est pas, si vous cherchez l'diter vous ne verrez rien de comprhensible, dans ce
dernier cas, on dit aussi qu'on a affaire un fichier binaire.
Un rpertoire peut tre considr comme un classeur, dans lequel on met des fichiers, c'est un
lment d'organisation de l'espace du disque dur. Les fichiers ayant les mmes " affinits " peuvent
ranger sous un mme rpertoire, de mme on peut trouver des sous rpertoires dans un rpertoire,
qui eux mmes contiennent des fichiers et d'autres sous rpertoires. Ce systme hirarchique fait
penser un arbre, d'o le terme d'arborescence.
Cours utilisateur UNIX 13/58 http://www.funix.org
]--------- 1b ----- X11
] ]
] ]------- X11R5
]-------------usJ
] ]
] ]
] ]------------sJc --- samba
] ]
] ]----- Xaw
]-------]
/-]
]-------]
]
]
]
] ]----------o1v1eJ----1hux
] ] ]
] ] ]-------1emp
]-------------home
]
]
]----------maJce---- ma1
]
]------- doc
Il existe un " anctre " tous les rpertoires, c'est la racine ou le / (slash) sur le shma. Tout
rpertoire, qui n'est pas la racine elle mme, possde un rpertoire qui le contient (appel rpertoire
pre) et peut possder des sous-rpertoires (rpertoires fils) et des fichiers .
Quand on cre un rpertoire, le systme cre automatiquement deux " fichiers " sous le rpertoire, le
premier est un " . ", qui reprsente le rpertoire lui-mme, le deuxime est un " .. " qui reprsente le
rpertoire pre.
Le troisime type de fichier est le fichier dit spcial, qu'on a abord brivement auparavant,
rappelons que l'on doit passer par eux si on veut dialoguer avec un priphrique matriel.
7.2Atteindre un fichier
7.2.1Nommer un fichier
Tout fichier, qu'elle que soit son type, doit pouvoir tre identifi, c'est pourquoi on les nomme avec
un nom en rapport avec le fichier. Ce nom comporte au maximum 255 caractres, sachant qu'il
existe une distinction entre les lettres minuscules et majuscules, et que certains caractres sont
interdits, ce sont par exemple le /, les parenthses (), l'espace ou *.
7.2.2Le chemin d'accs
Ce fichier est rang dans un rpertoire du systme de fichiers, on doit pouvoir y accder, en suivant
un chemin dans l'arborescence.
Cours utilisateur UNIX 14/58 http://www.funix.org
]--------- 1b ----- X11
] ]
] ]------- X11R5
]-------------usJ
] ]
] ]
] ]------------sJc --- samba
] ]
] ]----- Xaw
]-------]
/-]
]-------]
]
]
]
] ]----------o1v1eJ----1hux----h0W-T0ppp
] ] ]
] ] ]
] ] ]-------1emp
]-------------home
]
]
]----------maJce---- ma1
]
]------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple), 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/o1v1eJ/1hux
En indiquant /home/olivier/linux/HOW-TOppp le fichier est parfaitement identifi, en effet on
sait o le trouver puisqu'on a son chemin, et le nom du fichier HOW-TOppp.
A noter qu'on peut avoir des fichiers portant le mme nom dans le systme de fichiers ds lors qu'ils
n'ont pas le mme chemin, et donc qu'ils ne se trouvent pas au mme endroit.
On dit que le chemin du fichier est absolu parce qu' la vue de son chemin d'accs, en partant de la
racine, on sait exactement o se trouve le fichier.
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/olivier, si l'on veut accder notre fichier HOW-TOppp,
le chemin relatif au rpertoire courant est ./linux, le point reprsentant le rpertoire courant comme
on l'a vu auparavant. Ce qui donne en chemin absolu /home/olivier/linux.
7.2.3Les commandes
La commande pour se dplacer dans l'arborescence est cd. Si l'on est au niveau de la racine, pour
aller notre rpertoire /home/olivier/linux on doit taper :
cd /home/o1v1eJ/1hux
Cours utilisateur UNIX 15/58 http://www.funix.org
On a tap un chemin absolu, on se trouve maintenant sous /home/olivier/linux, si l'on veut aller
sous /home/olivier, on doit taper :
cd ..
En effet .. reprsente le rpertoire pre, /home/olivier tant le rpertoire pre de /home/oliver/linux,
en tapant cette commande, on se retrouve l'endroit dsir.
Si vous voulez connatre ou vous vous trouvez, vous disposez de la commande pwd, ainsi si vous
tapez pwd juste aprs la squence de commandes prcdentes, vous obtenez :
/home/o1v1eJ
7.3Visualiser les fichiers
La commande ls permet de visualiser le contenu de rpertoires, vous voyez les noms des fichiers
prsents sous le rpertoire.
]--------- 1b ----- X11
] ]
] ]------- X11R5
]-------------usJ
] ]
] ]
] ]------------sJc --- samba
] ]
] ]----- Xaw
]-------]
/-]
]-------]
]
]
]
] ]----------o1v1eJ----1hux----h0W-T0ppp
] ] ] ]-----Readme
] ] ]
] ] ]-------1emp
]-------------home
]
]
]----------maJce---- ma1
]
]------- doc
Si vous allez sous /home/olivier/linux (commande cd /home/olivier/linux), si vous voulez
visualiser les fichiers contenus, vous tapez ls, vous obtenez :
h0W-T0ppp Readme
La commande ls peut tre utilise avec des options, si prcdemment vous aviez tapez ls -l, vous
auriez obtenu:
-Jw-Jw-Jw- 1 o1v1eJ useJs 17356 0ec 3 12.11 h0W-T0ppp
-Jw-J--J-- 1 o1v1eJ useJs 7432 hov 21 02.21 Readme
Cours utilisateur UNIX 16/58 http://www.funix.org
La signification des champs est la suivante:
-rw-rw-rw- type de fichier et ses caractristiques de protection
1 le nombre de lien
olivier le nom du propritaire
users le groupe d'utilisateurs auquel appartient le propritaire
17356 la taille du fichier (en octets)
Dec 3 le jour de dernire modification
12 :11 l'heure de dernire modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement d'un fichier, vous taperez :
s - hom-du-11ch1eJ
A noter que sur beaucoup de systme la commande ll est quivalent ls -l.
7.4Commandes 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
7.5Commandes 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,
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.
7.6Les liens
Dans l'arborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peu
particulire.
Cours utilisateur UNIX 17/58 http://www.funix.org
JwxJwxJwx 1 Joo1 Joo1 14 Aug 1 01.58 ha1 -> ../../b1h/ma1*
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le rpertoire /bin, 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. Sous
Windows on retrouve peu prs l'quivalent avec la notion de raccourci.
La commande ln (pour link) sert crer des liens. Par exemple:
h -s /home/o1v1eJ/1hux/Jeadme /1mp/1sezmo1
Le fichier source est readme sous /home/olivier/linux, le lien cr est lisezmoi sous /tmp. En
faisant un man ln, vous dcouvrirez qu'il existe des liens hards et softs, sans rentrer dans les dtails,
je vous conseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards
ne permettents pas de visualiser directement le lien (la petite flche -> quand on tape ls -l).
7.7Les inodes
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:
s -1 moh-11ch1eJ
7.8Les mtacaractres
Si vous tes la recherche d'un fichier qui commence par la lettre a, en faisant ls, vous voudriez
voir que les fichiers commenant par a. De mme si vous voulez appliquer une commande
certains fichiers mais pas d'autres. C'est le but des mtacaractres, ils vous permettent de faire une
slection de fichiers suivant certains critres.
Le mtacaractre le plus frquemment utilis est *, il remplace une chane de longueur non dfinie.
Avec le critre *, vous slectionnez tous les fichiers. Par le critre a*, vous slectionnez tous les
fichiers commenant par a.
s a*
Va lister que les fichiers commenant par a. De mme *a opre une slection des noms de fichiers
se terminant par a. Le critre *a* va faire une slection sur les noms de fichiers qui ont le caractre
a dans leur nom, quelque soit sa place.
Le mtacaractre ? remplace un caractre unique. Avec le critre a??, vous slectionnez les fichiers
Cours utilisateur UNIX 18/58 http://www.funix.org
dont le nom commence par a, mais qui contiennent au total trois caractres, exactement.
Les mtacaractres [ ] reprsente une srie de caractres. Le critre [aA]* permet la slection des
fichiers dont le nom commence par un a ou A (minuscule ou majuscule). Le critre [a-d]* fait la
slection des fichiers dont le nom commence par a jusqu' d. Le critre *[de] fait la slection des
fichiers dont le nom se termine par d ou e.
Vous voyez donc que les caractres [],* et ? sont des caractres spciaux, qu'on ne peut utiliser
comme des simples caractres, parce qu'ils sont interprts par le shell, comme des mtacaractres.
Vous pouvez cependant inhiber leur fonctionnement. En tapant :
s moh-11ch1eJ?
Le shell va interprter le ? comme un mtacaractre et afficher tous les fichiers qui commencent par
mon-fichier et qui se termine par un caractre unique quelconque. Si vous ne voulez pas que le ?
soit interprt vous devez taper.
s moh-11ch1eJ\ ?
8Les droits d'accs
8.1Identification 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.
8.2Dfinition des droits d'utilisateur
8.2.1Cas 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 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 :
-JwxJw-J-- 1 o1v1eJ useJs 34568 0ec 3 14 .34 moh-11ch1eJ
La signification des lettres rwx et la suivante :
Cours utilisateur UNIX 19/58 http://www.funix.org
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) - aucun droit autoris
Le champ -rwxrw-r-- regroupe les droits du propritaire du fichier, du groupe auquel appartient le
propritaire et les autres utilisateurs.
- on a affaire un fichier classique (c'est ni un rpertoire, ni un fichier spcial) 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 olivier 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 info 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.
8.2.2Cas d'un rpertoire
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 :
dJwxJ-x--- 1 o1v1eJ useJs 13242 0ec 2 13 .14 moh-JpeJ1o1Je
d signifie qu'on a affaire un rpertoire, rwx sont les droits du propritaire olivier qui est autoris
en lecture, criture et droit d'accs au rpertoirer-x droits du groupe users, autoris en lecture, droit
d'accs au rpertoire, pas de droit en criture --- droits des autres utilisateurs, aucun droit dans le cas
prsent
8.2.3Cas 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.
JwxJwxJwx 1 Joo1 Joo1 14 Aug 1 01.58 ha1 -> ../../b1h/ma1*
8.3Commandes associes
8.3.1Changer 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 en tre le propritaire. La syntaxe est la
suivante :
chmod u111sa1euJ opJa11oh dJo11 d`accs
u pJopJ11a1Je {useJ) +aou1 d`uh dJo11 J dJo11 eh ec1uJe
g gJoupe {gJoup) -suppJess1oh d`uh dJo11 w dJo11 eh cJ11uJe
Cours utilisateur UNIX 20/58 http://www.funix.org
o es au1Jes {o1heJ) =he J1eh 1a1Je 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 moh-11ch1eJ
Pour supprimer le droit d'accs du rpertoire mon-rpertoire aux autres utilisateurs (autres que
propritaire et utilisateurs du groupe)
chmod o-x moh-JepeJ1o1Je
En tapant
chmod u+x,g-w moh-11ch1eJ
Vous ajoutez le droit en excution pour le propritaire, et enlevez le droit en criture pour le groupe
du fichier.
Vous avez une autre mthode pour vous servir de la commande chmod. On considre que 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 rwxrw-r-- est quivalent 754.
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper :
chmod 444 moh-11ch1eJ
On appelle ce systme de notation, la notation octale.
8.3.2Changer 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 est l pour a.
Pour un fichier :
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--).
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 (-rw--w--w-).
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).
Si vous tapez umask 244, vous partez des droits maximum 777 et vous retranchez 244, on obtient
donc 533, par dfaut les fichiers auront comme droit 422 (-rwx-wx-wx).
Cours utilisateur UNIX 21/58 http://www.funix.org
umask n'est utilisatable que si on est propritaire du fichier.
8.3.3Changer le propritaire et le groupe
Vous pouvez " donner " un fichier vous appartenant un autre utilisateur, c'est dire qu'il deviendra
propritaire du fichier, et que vous n'aurez plus que les droits que le nouveau propritaire voudra
bien vous donner sur le fichier.
chowh houveau-pJopJ11a1Je hom-11ch1eJ
Dans le mme ordre d'ide vous pouvez changer le groupe.
chgJp houveau-gJoupe hom-11ch1eJ
Ces deux commandes ne sont utilisables que si on est propritaire du fichier.
NOTA : Sur certains UNIX suivant leur configuration, on peut interdire l'usage de ces commandes
pour des raisons de scurit.
9Gestion des processus
9.1Les caractristiques d'un processus
On a vu auparavant, qu'on pouvait un moment donn avoir plusieurs processus en cours, un
temps donn. Le systme doit tre capable de les identifier. Pour cela il attribue chacun d'entre
eux, un numro appel PID (Process Identification).
Un processus peut lui mme crer un autre processus, il devient donc un processus parent ou pre,
et le nouveau processus, un processus enfant. Ce dernier est identifi par son PID, et le processus
pre par son numro de processus appel PPID (Parent Process Identification).
Tous les processus sont ainsi identifis par leur PID, mais aussi par le PPID du processus qui la
cr, car tous les processus ont t crs par un autre processus. Oui mais dans tout a, c'est qui a
cr le premier processus ? 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.
9.2Visualiser les processus
On peut visualiser les processus qui tournent sur une machine avec la commande : ps (options), les
options les plus intressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichage
dtaille). La commande ps -ef donne un truc du genre :
bT0 PT0 PPT0 C STThE TTY TThE C0hhAh0
Joo1 1 0 0 0ec 6 ? 1.02 1h11
...
eah 319 300 0 10.30.30 ? 0.02 /usJ/d1/b1h/d1sess1oh
o1v1eJ 321 319 0 10.30.34 11yp1 0.02 csh
o1v1eJ 324 321 0 10.32.12 11yp1 0.00 ps -e1
Cours utilisateur UNIX 22/58 http://www.funix.org
La s1gh111ca11oh des d111Jeh1es coohhes es1 a su1vah1e.
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.
Pour l'exemple donn, partir d'un shell vous avez lanc la commande ps -ef, 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 process des daemons, le terme dmon est
une francisation, daemon sont des abrviations.
Pour voir les process d'un seul utilisateur, vous pouvez taper :
ps -u o1v1eJ
D'un UNIX l'autre la sortie peut changer. Sous LINUX par exemple ps -Al permet une sortie assez
riche, en faisant un man ps, vous aurez l'ventail de tous les paramtres possibles.
9.3Commandes de gestion des processus
9.3.1Changer la priorit d'un processus
Les processus tournent avec un certain degr de priorit, un processus plus prioritaire aura tendance
s'accaparer plus souvent les ressources du systme pour arriver le plus vite possible au terme de
son excution. C'est le rle du systme d'exploitation de grer ces priorits.
Vous disposez de la commande nice pour modifier la priorit d'un processus. La syntaxe est la
suivante :
h1ce -vaeuJ commahde
Plus le nombre est grand, plus la priorit est faible. Par exemple une valeur de 0 donne, la priorit la
plus haute 20 donne la priorit la plus faible.
La fourchette de valeur dpend de l'UNIX qu'on utilise.
Par exemple :
h1ce -5 ps -e1
Gnralement on utilise nice sur des commandes qui prennent du temps, sur des commandes
courantes l'effet de nice est imperceptible. On l'utilisera par exemple pour compiler un programme.
Cours utilisateur UNIX 23/58 http://www.funix.org
h1ce -5 cc mohpJogJamme.c
9.3.2Arrter un processus
Vous disposez de la commande kill pour arrter un processus, on doit aussi tuer un processus. Si
vous voulez arrter un processus, vous devez connatre son PID (commande ps), puis vous tapez :
k1 -9 PT0
Un utilisateur ne peut arrter que les processus qui lui appartient (qu'il a lanc). Seul
l'administrateur systme a le droit d'arrter un processus ne lui appartenant pas.
9.4Lancer en processus en tche de fond
Pour lancer une commande quelconque, vous en saisissez le nom aprs le prompt du shell, tant que
la commande n'est pas termine, vous n'avez plus la main au niveau du shell, vous ne disposez plus
du prompt. Si la commande prend un certain temps, votre shell ne vous donnera pas la main tant
que la commande n'est pas termine, vous tes oblig de lancer un autre shell, pour taper une autre
commande.
Vous disposez d'une technique simple qui permet de lancer une commande partir d'un shell, et de
reprendre aussitt la main. Il vous suffit de rajouter un & la fin de commande. Celle-ci se lancera
en " tche de fond ", et vous reviendrez directement au prompt du shell.
En tapant une commande en tche de fond, vous aurez l'affichage :
> ps e1 &
|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.
En lanant une commande partir du shell sans le & la fin, et si celle-ci prend du temps vous
rendre la main, vous pouvez faire en sorte qu'elle bascule en tche de fond, pour que vous repreniez
la main.
>he1scape
Vous voulez basculer netscape en tche de fond tapez, CTRL+Z, il va afficher
311 s1opped +
311 tant le PID du process netscape. Tapez ensuite bg (pour background), vous voyez s'afficher
|311]
Ca y est votre processus netscape est en tche de fond et le shell vous rend la main.
Cours utilisateur UNIX 24/58 http://www.funix.org
10Les filtres UNIX
10.1Modifier les donnes d'un fichier
10.1.1Coupe un fichier en morceau : split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers), en tapant :
sp11 -10 moh-11ch1eJ 11ch1eJ
Vous allez crer les fichiers fichieraa, fichierab, fichierac, ... qui contiendront tous 10 lignes. Le
premier fichieraa contient les 10 premires lignes, ainsi de suite.
10.1.2Trier des fichiers : sort
Soit le fichier carnet-adresse suivant :
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.0133444335.Paa1seau
Le premier champ reprsente le nom, le deuxime le dpartement, le troisime le numro de
tlphone et le dernier la ville. Attention le premier champ est not 0, le deuxime 1, ainsi de suite.
En faisant sort sans argument :
soJ1 caJhe1-adJesse
Par dfaut il va trier sur le premier caractre et ranger donc dans l'ordre alphabtique :
maJce.13.0466342233.haJse1e
mauJ1ce.29.0298334432.CJozoh
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
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 ;
soJ1 -h -1 . +1 -2 caJhe1-adJesse
On obtient :
maJce.13.0466342233.haJse1e
mauJ1ce.29.0298334432.CJozoh
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
Cours utilisateur UNIX 25/58 http://www.funix.org
Avec la commande :
soJ1 -1 . +3 -4 +0 caJhe1-adJesse
Vous allez trier suivant le quatrime champ (numro 3), c'est dire la ville (tri par ordre
alphabtique sur le premier caractre), en mettant +0, il va effectuer un deuxime tri pour les villes
qui commencent par le mme caractre, le deuxime tri porte sur le prnom (le premier caractre).
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
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
En tapant la commande suivante :
soJ1 -1 . +3.2 +0 caJhe1-adJesse
Vous allez effectuer le tri sur le troisime caractre (numro 2, le premier a pour numro 0) du
quatrime champ (numro 3). En cas d'galit du premier tri, on fait un dernier tri sur le premier
caractre du prnom. Soit le rsultat :
yvohhe.92.013344433.Paa1seau
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
JobeJ1.75.0144234452.PaJ1s
10.1.3Conversion 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
-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 carnet-adresse :
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
Cours utilisateur UNIX 26/58 http://www.funix.org
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
Pour remplacer le : par un #, nous taperons :
1J " . " " # " < caJhe1-adJesse
Pour faire la mme chose on peut aussi bien diter le fichier avec cat et rediriger par pipe vers tr, en
tapant :
ca1 caJhe1-adJesse ] 1J " . " " # "
On peut utiliser des mtacaractres. En tapant :
ca1 caJhe1-adJesse ] 1J " |a-1] " " |A-F] "
Vous allez remplacer les caractres de a f de minuscule en majuscule. Soit:
mAuJ1CE.29.0298334432.CJozoh
mAJCE.13.0466342233.hAJsE1E
JobEJ1.75.0144234452.PAJ1s
yvohhE.92.013344433.PAA1sEAu
10.2Edition de fichiers avec critres
10.2.1Editer un fichier par la fin : tail
Si vous avez un fichier trs long, et que vous voulez visualiser que la fin, vous disposez de la
commande tail :
La syntaxe est la suivante, si vous tapez :
1a1 +10 moh-11ch1eJ
Vous obtenez toutes les lignes du fichier de la 10eme jusqu' la fin.
1a1 -10 moh-11ch1eJ
Vous obtenez les 10 dernires lignes partir de la fin.
Vous pouvez indiquer si votre unit est la ligne (par dfaut), le bloc ou le caractre avec l'option -t
1a1 -10 -c moh-11ch1eJ
Vous obtenez les 10 derniers caractres du fichier.
10.2.2Editer 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, si vous tapez :
head +10 moh-11ch1eJ
Cours utilisateur UNIX 27/58 http://www.funix.org
Vous obtenez toutes les lignes du fichier de la 10eme jusqu'au dbut.
head -10 moh-11ch1eJ
Vous obtenez les 10 premires lignes partir du dbut.
Vous pouvez indiquer si votre unit est la ligne (par dfaut), le bloc ou le caractre avec l'option -t
head -10 -c moh-11ch1eJ
Vous obtenez les 10 premiers caractres du fichier.
10.2.3Compter 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 - moh-11ch1eJ
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier. Pour avoir le
nombre de mot l'option est -w, l'option -c compte le nombre de 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 :
s - ] wc -
10.2.4Edition 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, le deuxime 2
est ainsi de suite.
Nous prendrons toujours notre fichier carnet-adresse :
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
La commande :
cu1 -c-10 caJhe1 adJesse
Va extraire les 10 premiers caractres de chaque ligne, on obtient :
mauJ1ce.29
maJce.13.
JobeJ1.75.
Cours utilisateur UNIX 28/58 http://www.funix.org
yvohhe.92.
La commande :
cu1 -c2-5 caJhe1 adJesse
Va extraire les deuxime au cinquime caractre de chaque ligne.
auJ1
aJce
obeJ
vohh
La commande :
cu1 -c25-
Va extraire du 25eme caractre jusqu' la fin de chaque ligne.
La commande :
cu1 -d. -11,4 caJhe1 adJesse
Va extraire le premier et quatrime champ, le : fixant le sparateur de champ. On obtient :
mauJ1ce.CJozoh
maJce.haJse1e
JobeJ1.PaJ1s
yvohhe.Paa1seau
La commande :
cu1 -d . -13- caJhe1 adJesse
Va extraire du troisime champ jusqu'au dernier champ, soit :
0298334432.CJozoh
0466342233.haJse1e
0144234452.PaJ1s
0133444335.Paa1seau
10.2.5Fusion 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 carnet-adresse :
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
Et le fichier travail :
1hgh1euJ
Cours utilisateur UNIX 29/58 http://www.funix.org
p11ss1eJ
1ac1euJ
vehdeuse
En tapant la commande :
pas1e -d . caJhe1-adJesse 1Java1
Vous obtenez :
mauJ1ce.29.0298334432.CJozoh.1hgh1euJ
maJce.13.0466342233.haJse1e.p11ss1eJ
JobeJ1.75.0144234452.PaJ1s.1ac1euJ
yvohhe.92.013344433.Paa1seau.vehdeuse
Vous pouvez videmment rediriger le rsultat vers un fichier.
10.2.6Extraction de lignes communes de deux fichiers : comm
Cette commande permet d'extraire les lignes communes deux fichiers, soit le fichier carnet-
adresse :
mauJ1ce.29.0298334432.CJozoh
maJce.13.0466342233.haJse1e
JobeJ1.75.0144234452.PaJ1s
yvohhe.92.013344433.Paa1seau
Et carnet-adresse2
o1v1eJ.29.0298333242.BJes1
maJce.13.0466342233.haJse1e
myJ1am.30.0434214452.h1mes
yvohhe.92.013344433.Paa1seau
La commande :
comm caJhe1-adJesse caJhe1-adJesse2
Nous donnera :
maJce.13.0466342233.haJse1e
yvohhe.92.013344433.Paa1seau
10.3Comparaison de fichiers
10.3.1Comparer deux fichiers : cmp
La commande cmp indique si deux fichiers sont identiques. En tapant :
cmp 11ch1eJ1 11ch1eJ2
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 :
11ch1eJ1 11ch1eJ2 d111eJ . chaJ 34, 1he 2
Cours utilisateur UNIX 30/58 http://www.funix.org
10.3.2Edition 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. Soit le fichier carnet-adresse :
o1v1eJ.29.0298333242.BJes1
maJce.13.0466342233.haJse1e
myJ1am.30.0434214452.h1mes
yvohhe.92.013344433.Paa1seau
1o1o.12.0434231122.Rodez
et carnet-adresse2
o1v1eJ.29.0298333242.BJes1
maJce.13.0466342233.CaJdaghes
myJ1am.30.0434214452.h1mes
yvohhe.92.013344433.Paa1seau
La commande :
d111 caJhe1-adJesse caJhe1-adJesse2
Gnre comme sortie :
2c2
< maJce.13.0466342233 .haJse1e
---
<maJce.13.0466342233 .CaJdaghes
5d
>1o1o .12 .0434231122 .Rodez
Ce qui nous indique que pour carnet-adresse soit identique carnet-adresse2, il faut que la
deuxime ligne du premier fichier soit change (c pour change) contre la ligne du second. Il faut
aussi supprimer (d pour delete) la cinquime ligne du premier fichier.
Dans d'autres exemples, on pourrait avoir aussi une sortie du genre 10,15c 12,17 ce qui signifie que
pour que le premier fichier soit identique au second, les lignes 10 15 doivent intgralement
changes contre les lignes 12 17 du second fichier.
11Les commandes grep et find
11.1Les expressions rgulires
On a vu auparavant ce qu'taient les mtacaractres. Les expressions rgulires sont aussi des suites
de caractres permettant de faire des slections. Elles fonctionnent avec certaines commandes
comme grep.
Les diffrentes expressions rgulires sont :
^ dbut de ligne
. un caractre quelconque
Cours utilisateur UNIX 31/58 http://www.funix.org
$ fin de ligne
x* zro ou plus d'occurrences du caractre x
x+ une ou plus occurrences du caractre x
x? une occurrence unique du caractre x
[...] plage de caractres permis
[^...] plage de caractres interdits
\ {n\} pour dfinir le nombre de rptition n du caractre plac devant
Exemple l'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractre en
minuscule. [a-z] caractre permis, [a-z]* recherche d'occurrence des lettres permises.
L'expression ^[0-9]\ {4\}$ a pour signification, du dbut la fin du fichier $, recherche les nombres
[0-9] de 4 chiffres \ {4\}.
11.2La commande grep
La commande grep permet de rechercher une chane de caractres dans un fichier. Les options sont
les suivantes :
-v affiche les lignes ne contenant pas la chane
-c compte le nombre de lignes contenant la chane
-n chaque ligne contenant la chane est numrote
-x ligne correspondant exactement la chane
-l affiche le nom des fichiers qui contiennent la chane
Exemple avec le fichier carnet-adresse :
o1v1eJ.29.0298333242.BJes1
maJce.13.0466342233.CaJdaghes
myJ1am.30.0434214452.h1mes
yvohhe.92.013344433.Paa1seau
On peut utiliser les expressions rgulires avec grep. Si on tape la commande :
gJep |a-d] caJhe1-adJesse
On va obtenir tous les lignes commenant par les caractres compris entre a et d. Dans notre
exemple, on n'en a pas, d'o l'absence de sortie.
gJep BJes1 caJhe1-adJesse
Permet d'obtenir les lignes contenant la chane de caractre Brest, soit :
o1v1eJ.29.0298333242.BJes1
Il existe aussi les commandes fgrep et egrep quivalentes.
Cours utilisateur UNIX 32/58 http://www.funix.org
11.3La commande find
11.3.1Prsentation
La commande find permet de retrouver des fichiers partir de certains critres. La syntaxe est la
suivante :
11hd <JpeJ1o1Je de JecheJche> <cJ11Jes de JecheJche>
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,
!critre non logique,
\ (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.
11.3.2Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chane de caractres toto partir du rpertoire /usr,
vous devez tapez :
11hd /usJ -hame 1o1o -pJ1h1
En cas de russite, si le(s) fichier(s) existe(nt), vous aurez comme sortie :
1o1o
En cas d'chec, vous n'avez rien.
Pour rechercher tous les fichiers se terminant par .c dans le rpertoire /usr, vous taperez :
11hd /usJ -hame " *.c " -pJ1h1
Cours utilisateur UNIX 33/58 http://www.funix.org
Vous obtenez toute la liste des fichiers se terminant par .c sous les rpertoires contenus dans /usr (et
dans /usr lui mme).
11.3.3Recherche suivant la date de dernire modification
Pour connatre les derniers fichiers modifis dans les 3 derniers jours dans toute l'arborescence (/),
vous devez taper :
11hd / -m11me 3 -pJ1h1
11.3.4Recherche suivant la taille
Pour connatre dans toute l'arborescence, les fichiers dont la taille dpasse 1Mo (2000 blocs de
512Ko), vous devez taper :
11hd / -s1ze 2000 -pJ1h1
11.3.5Recherche combine
Vous pouvez chercher dans toute l'arborescence, les fichiers ordinaires appartenant olivier, dont la
permission est fixe 755, on obtient :
11hd / -1ype 1 -useJ o1v1eJ -peJm 755 -pJ1h1
11.3.6Redirection des messages d'erreur
Vous vous rendrez compte assez rapidement qu'en tant que simple utilisateur, vous n'avez pas
forcment le droit d'accs un certain nombre de rpertoires, par consquent, la commande find
peut gnrer beaucoup de messages d'erreur (du genre permission denied), qui pourraient noyer
l'information utile. Pour viter ceci, vous pouvez rediriger les messages d'erreur dans un fichier
poubelle (comme /dev/null), les messages d'erreur sont alors perdus (rien ne vous empche de les
sauvegarder dans un fichier, mais a n'a aucune utilit avec la commande find).
11hd . -hame bobo -pJ1h1
Recherche en utilisant les oprateurs logiques
Si vous voulez connatre les fichiers n'appartenant pas l'utilisateur olivier, vous taperez :
11hd . ! -useJ o1v1eJ -pJ1h1
! -user olivier, est la ngation de -user olivier, c'est dire c'est tous les utilisateurs sauf olivier.
Recherche des fichiers qui ont pour nom a.out et des fichiers se terminant par .c. On tape :
11hd . \ { -hame a.ou1 -o -hame " *.c " \ ) -pJ1h1
On recherche donc les fichiers dont le nom est a.out ou les fichiers se terminant par *.c, une
condition ou l'autre.
Recherche des fichiers qui obissent la fois la condition a pour nom core et la condition a une
taille suprieure 1Mo.
Cours utilisateur UNIX 34/58 http://www.funix.org
11hd . \ {-hame coJe -a s1ze +2000 \ ) -pJ1h1
11.3.7Les commandes en option
L'option -print est une commande que l'on passe find pour afficher les rsultats la sortie
standard. En dehors de print, on dispose de l'option -exec. find coupl avec exec permet d'excuter
une commande sur les fichiers trouvs d'aprs les critres de recherche fixs. Cette option attend
comme argument une commande, celle ci doit tre suivi de {}\ ;.
Exemple recherche des fichiers ayant pour nom core, suivi de l'effacement de ces fichiers.
11hd . -hame coJe -exec Jm {}\ ,
Tous les fichiers ayant pour nom core seront dtruits, pour avoir une demande de confirmation
avant l'excution de rm, vous pouvez taper :
11hd . -hame coJe -ok Jm {}\ ,
11.3.8Autres subtilits
Une fonction intressante de find est de pouvoir tre utilis avec d'autres commandes UNIX. Par
exemple:
11hd . -1ype 1 -pJ1h1 ] xaJgs gJep 1o1o
En tapant cette commande vous allez rechercher dans le rpertoire courant tous les fichiers normaux
(sans les rpertoires, fichiers spciaux), et rechercher dans ces fichiers tous ceux contenant la chane
toto.
12Expressions rgulires et sed
12.1Les expressions rgulires
12.1.1Prsentation
Une expression rgulire (en anglais Regular Expression ou RE) sert identifier une chane de
caractre rpondant un certain critre (par exemple chane contenant des lettres minuscules
uniquement). L'avantage d'une expression rgulire est qu'avec une seule commande on peut
raliser un grand nombre de tche qui seraient fastidieuses faire avec des commandes UNIX
classiques.
Les commandes ed, vi, ex, sed, awk, expr et grep utilisent les expressions rgulires.
L'exemple le plus simple d'une expression rgulire est une chane de caractres quelconque toto
par exemple. Cette simple expression rgulire va identifier la prochaine ligne du fichier traiter
contenant une chane de caractre correspondant l'expression rgulire.
Si l'on veut chercher une chane de caractre au sein de laquelle se trouve un caractre spcial (/, *,
$, ., [, ], {, }, !, entre autres) (appel aussi mtacaractre), on peut faire en sorte que ce caractre ne
Cours utilisateur UNIX 35/58 http://www.funix.org
soit pas interprt comme un caractre spcial mais comme un simple caractre. Pour cela vous
devez le faire prcder par \ (backslash). Ainsi si votre chane est /dev, pour que le / ne soit pas
interprt comme un caractre spcial, vous devez tapez \ /dev pour l'expression rgulire.
12.1.2Le mtacaractre .
Le mtacaractre . remplace dans une expression rgulire un caractre unique, l'exception du
caractre retour chariot (\ n). Par exemple chaine. va identifier toutes les lignes contenant la chaine
chaine suivit d'un caractre quelconque unique. Si vous voulez identifier les lignes contenant la
chane .cshrc, l'expression rgulire correspondante est \ .cshrc
12.1.3Les mtacaractres [ ]
Les mtacaractres [] permettent de dsigner des caractres compris dans un certain intervalle de
valeur une position dtermine d'une chane de caractres. Par exemple [Ff]raise va identifier les
chanes Fraise ou fraise, [a-z]toto va identifier une chane de caractre commenant par une lettre
minuscule (intervalle de valeur de a z) et suvi de la chane toto (atoto, btoto, ...., ztoto).
D'une manire plus gnrale voici comment [] peuvent tre utiliss.
[A-D] intervalle de A D (A, B, C, D) par exemple bof[A-D] donne bofA, bofB, bofC, bofD
[2-5] intervalle de 2 5 (2, 3, 4, 5) par exemple 12[2-5]2 donne 1222, 1232, 1242, 1252
[2-56] intervalle de 2 5 et 6 (et non pas 56) (2, 3, 4, 5, 6) par exemple 12[2-56]2 donne 1222,
1232, 1242, 1252, 1262
[a-dA-D] intervalle de a d et A D (a, b, c, d, A, B, C, D) par exemple z[a-dA-D]y donne zay,
zby, zcy, zdy, zAy, zBy, zCy, zDy
[1-3-] intervalle de 1 3 et - (1, 2, 3, -) par exemple [1-3-]3 donne 13, 23, 33, -3
[a-cI-K1-3] intervalle de a c, I K et 1 3 (a, b, c, I, J, K, 1, 2, 3)
On peut utiliser [] avec un pour identifier le complment de l'expression rgulire. En franais pour
identifier l'oppos de l'expression rgulire. Vous avez toujours pas compris ? Voici un exemple:
[^0-9]toto identifie les lignes contenant une chane toto, le caractre juste avant ne doit pas tre un
chiffre (exemple atoto, gtoto mais pas 1toto, 5toto). Autre exemple [^a-zA-Z] n'importe quel
caractre sauf une lettre minuscule ou majuscule. Attention la place de ^, si vous tapez [1-3^],
c'est quivalent aux caractres 1, 2, 3 et ^.
12.1.4Les mtacaractres ^ et $
Le mtacaractre ^ identifie un dbut de ligne. Par exemple l'expression rgulire ^a va identifier
les lignes commenant par le caractre a.
Le mtacaractre $ identifie une fin de ligne. Par exemple l'expression rgulire a$ va identifier les
lignes se terminant par le caractre a.
L'expression rgulire ^chaine$ identifie les lignes qui contiennent strictement la chane chaine.
Cours utilisateur UNIX 36/58 http://www.funix.org
L'expression rgulire ^$ identifie une ligne vide.
12.1.5Le mtacaractre *
Le mtacaractre * est le caractre de rptition.
L'expression rgulire a* correspond aux lignes comportant 0 ou plusieurs caractre a. Son
utilisation est proscrire, car toutes les lignes, mme celles ne contenant pas le caractre a,
rpondent aux critres de recherche. x* est une source de problmes, il vaut mieux viter de
l'employer.
L'expression rgulire aa* correspond aux lignes comportant 1 ou plusieurs caractres a.
L'expression rgulire .* correspond n'importe quelle chane de caractres.
L'expression rgulire [a-z][a-z]* va chercher les chanes de caractres contenant 1 ou plusieurs
lettres minuscules (de a z).
L'expression rgulire [^ ][^ ]* est quivalent tout sauf un blanc.
12.1.6Les mtacaractres \ ( \)
Pour le traitement complexe de fichier, il est utile parfois d'identifier un certain type de chane pour
pouvoir s'en servir dans la suite du traitement comme un sous programme. C'est le principe des sous
chanes, pour mmoriser une sous chane, on utilise la syntaxe \ (expression rgulire)\, cette sous
chane sera identifi par un chiffre compris par 1 et 9 (suivant l'ordre de dfinition).
Par exemple \ ([a-z][a-z]*)\ est une sous chane identifiant les lignes contenant une ou plusieurs
lettres minuscules, pour faire appel cette sous chane, on pourra utiliser \ 1. Voir dans le
paragraphe sed pour un exemple.
12.2La commande sed
12.2.1Prsentation
sed est diteur ligne non interactif, 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.
sed est une volution de l'diteur ed lui mme prcurseur de vi, la syntaxe n'est franchement pas trs
conviviale, mais il permet de raliser des commandes complexes sur des gros fichiers.
La syntaxe de sed est la suivante:
sed -e `pJogJamme sed` 11ch1eJ-a-1Ja11eJ
ou
sed -1 11ch1eJ-pJogJamme 11ch1eJ-a-1Ja11eJ
Vous disposez de l'option -n qui supprime la sortie standard par dfaut, sed va crire uniquement les
Cours utilisateur UNIX 37/58 http://www.funix.org
lignes concernes par le traitement (sinon il crit tout mme les lignes non traites). L'option -e n'est
pas ncessaire quand vous avez une seule fonction d'dition.
La commande sed est une commande trs riche, ne vous sont prsentes ici que les fonctions les
plus courantes, pour plus de dtails faites un man sed et/ou man ed.
12.2.2La fonction de substitution s
La fonction de substitution s permet de changer la premire ou toutes les occurences d'une chane
par une autre. La syntaxe est la suivante:
sed "s/toto/TOTO/" fichier va changer la premire occurence de la chane toto par TOTO (la
premire chane toto rencontre dans le texte uniquement)
sed "s/toto/TOTO/3" fichier va changer la troisime occurence de la chane toto par TOTO (la
troisime chane toto rencontre dans le texte uniquement)
sed "s/toto/TOTO/g" fichier va changer toutes les occurences de la chane toto par TOTO (toutes
les chanes toto rencontres sont changes
sed "s/toto/TOTO/p" fichier en cas de remplacement la ligne concerne est affiche sur la sortie
standard (uniquement en cas de substitution)
sed "s/toto/TOTO/w resultat" fichier en cas de substitution la ligne en entre est inscrite dans un
fichier rsultat
La fonction de substitution peut videmment tre utilise avec une expression rgulire.
sed -e "s/[Ff]raise/FRAISE/g" fichier substitue toutes les chanes Fraise ou fraise par FRAISE
12.2.3La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donn. La syntaxe est
la suivante:
sed "20,30d" 11ch1eJ
Cette commande va supprimer les lignes 20 30 du fichier fichier. On peut utiliser les expressions
rgulires:
sed "/1o1o/d" 11ch1eJ
Cette commande supprime les lignes contenant la chane toto. Si au contraire on ne veut pas effacer
les lignes contenant la chane toto (toutes les autres sont supprimes), on tapera:
sed "/1o1o/!d" 11ch1eJ
En fait les lignes du fichier d'entre ne sont pas supprimes, elles le sont au niveau de la sortie
standard.
Cours utilisateur UNIX 38/58 http://www.funix.org
12.2.4Les fonctions p, l, et =
La commande p (print) affiche la ligne slectionne sur la sortie standard. Elle invalide l'option -n.
La commande l (list) affiche la ligne slectionne sur la sortie standard avec en plus les caractres
de contrles en clair avec leur code ASCII (deux chiffres en octal).
La commande = donne le numro de la ligne slectionne sur la sortie standard.
Ces trois commandes sont utiles pour le dbogage, quand vous mettez au point vos programmes
sed.
sed "/1o1o/=" 11ch1eJ
Cette commande va afficher le numro de la ligne contenant la chane toto.
12.2.5Les fonctions q, r et w
La fonction q (quit) va interrompre l'excution de sed, la ligne en cours de traitement est affiche
sur la sortie standard (uniquement si -n n'a pas t utilise).
La fonction r (read) lit le contenu d'un fichier et crit le contenu sur la sortie standard.
La fonction w (write) crit la ligne slectionne dans un fichier.
sed "/1o1o/w Jesu1a1" 11ch1eJ
Cette commande va crire dans le fichier resultat toutes les lignes du fichier fichier commenant
par la chane toto.
12.2.6Les fonctions a et i
La fonction a (append) va placer un texte aprs la ligne slectionne. La syntaxe est la suivante:
a\
e 1ex1e
La fonction i (insert) va placer un texte avant la ligne slectionne. La syntaxe est la suivante:
1\
e 1ex1e
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante:
1ghe 1 du 1ex1e\
1ghe 2 du 1ex1e \
1ghe h du 1ex1e \
deJh1Je 1ghe
Concrtement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed. Par
exemple, soit votre fichier prog.sed suivant:
11\
dbu1 du 1Ja11emeh1
Cours utilisateur UNIX 39/58 http://www.funix.org
s/|1T]o1o/T0T0/g
$a \ 11h du 1Ja11emeh1\
de ho1Je 11ch1eJ
On excute la commande en tapant:
sed -1 pJog.sed 11ch1eJ-a-1Ja11eJ
prog.sed a pour effet d'inscrire avant la premire ligne (1i) le texte "dbut de traitement", et aprs
la dernire ligne ($a) le texte "fin du traitement (retour la ligne) de notre fichier".
12.2.7sed et les sous chanes
La commande:
sed -e "s/\ {|0-9]|0-9]*\ )/aa\ 1aa/" 11ch1eJ
La sous expression (sous chane) \ ([0-9][0-9]*\) dsigne un ou plusieurs chiffres, chacun sera
entour des caractres aa. La chane to2to deviendra toaa2aato.
13La commande awk
13.1Prsentation
13.1.1Prsentation et syntaxe
awk est une commande trs puissante, c'est un langage de programmation a elle tout seule qui
permet une recherche de chanes et l'excution d'actions sur les lignes slectionnes. Elle est utile
pour rcuperer de l'information, gnrer des rapports, transformer des donnes entre autres.
Une grande partie de la syntaxe a t emprunte au langage c, d'ailleurs awk sont les abrviations de
ces 3 crateurs dont k pour Kernighan, un des inventeurs du c.
La syntaxe de awk est la suivante:
awk |-F] |-v vaJ=vaeuJ] `pJogJamme` 11ch1eJ
ou
awk |-F] |-v vaJ=vaeuJ] -1 11ch1eJ-coh11g 11ch1eJ
L'argument -F doit tre suivi du sparateur de champ (-F: pour un ":" comme sparateur de champ).
L'argument -f suivi du nom du fichier de configuration de awk.
L'argument -v dfinit une variable (var dans l'exemple) qui sera utilise par la suite dans le
programme.
Un programme awk possde la structure suivante: critre de slection d'une chane {action},
quand il n'y a pas de critre c'est que l'action s'applique toutes les lignes du fichier.
Cours utilisateur UNIX 40/58 http://www.funix.org
Exemple:
awk -F"." `{pJ1h1 $hF}` /e1c/passwd
Il n'y a pas de critres, donc l'action s'applique toutes les lignes du fichier /etc/passwd. L'action
consiste afficher le nombre de champ du fichier. NF est une variable prdfinie d'awk, elle est
gale au nombre de champs dans une ligne.
Gnralement on utilisera awk en utilisant un script.
#!/b1h/sh
awk |-F] |-v vaJ=vaeuJ] `pJogJamme` $1
Vous appelerez votre script mon-script.awk, lui donnerez des droits en excution (755 par
exemple), et l'appelerez ainsi:
moh-scJ1p1.awk 11ch1eJ-a-1Ja11eJ
Dans la suite du cours, on utilisera awk en sous entendant que celui-ci est insrer dans un script.
Le quote ' se trouve sur un clavier azerty standard avec le 4 et ventuellement l'accolade gauche.
ATTENTION: ils existent plusieurs "varits" de awk, il se pourrait que certaines fonctions ou
variables systmes qui vous sont prsentes dans ce cours n'existent pas sur votre UNIX. Faites en
sorte si vos scripts awk doivent fonctionner sur des plates-formes diffrentes d'utiliser gawk sous
licence GNU qui est totalement POSIX.
J'ai constat des grosses diffrences de comportement entre le awk natif qu'on soit sous HP-UX,
Solaris et sous LINUX, de mme quand on insre la commande dans un script, on fait appel un
shell, suivant son type (bash shell, csh, ksh, ...), vous pouvez avoir quelques surprises.
13.1.2Enregistrements et champs
awk scinde les donnes d'entre en enregistrements et les enregistrements en champ. Un
enregistrement est une chane d'entre dlimite par un retour chariot, un champ est une chane
dlimite par un espace dans un enregistrement.
Par exemple si le fichier traiter est /etc/passwd, le caractre de sparation tant ":", un
enregistrement est une ligne du fichier, et un champ correspond au chane de caractre spar par un
":" (login:mot de passe crypt:UID:GID:commentaires:home directory:shell).
Dans un enregistrement les champs sont rfrencs par $1, $2, ..., $NF (dernier champ). Par
exemple pour /etc/passwd $1 correspond au login, $2 au mot de passe crypt, $3 l'UID, et $NF
(ou $7) au shell.
L'enregistrement complet (une ligne d'un fichier) est rfrenc par $0.
Par exemple, si l'on veut voir les champs login et home directory de /etc/passwd, on tapera:
awk -F"." `{pJ1h1 $1,$6}` /e1c/passwd
Cours utilisateur UNIX 41/58 http://www.funix.org
13.2Critres de slection
13.2.1Prsentation
Un critre peut tre une expression rgulire, une expression ayant une valeur chane de caractres,
une expression arithmtique, une combinaison des expressions prcdentes.
Le critre est insr entre les chanes BEGIN et END, avec la syntaxe suivante:
awk -F"." `BECTh{1hs1Juc11ohs} cJ11Jes Eh0{1hs1Juc11ohs}` 11ch1eJ
BEGIN peut tre suivi d'instruction comme une ligne de commentaire ou pour dfinir le sparateur.
Exemple BEGIN { print"Vrification d'un fichier"; FS=":"}. Le texte afficher peut tre un
rsum de l'action de awk. De mme pour END on peut avoir END{print "travail termin"} qui
indiquera que la commande a achev son travail. Le END n'est pas obligatoire, de mme que le
BEGIN.
13.2.2Les expressions rgulires
La syntaxe est la suivante:
/expJess1oh Jgu1Je/ {1hs1Juc11ohs}
$0 /expJess1oh Jgu1Je/ {1hs1Juc11ohs}
les instructions sont excutes pour chaque ligne contenant une chane satisfaisant l'expression
rgulire.
expJess1oh /expJess1oh Jgu1Je/{1hs1Juc11ohs}
les instructions sont excutes pour chaque ligne o la valeur chane de l'expression contient une
chane satisfaisant l'expression rgulire.
expJess1oh !/expJess1oh Jgu1Je/ {1hs1Juc11ohs}
les instructions sont excutes pour chaque ligne o la valeur chane de l'expression ne contient pas
une chane satisfaisant l'expression rgulire.
Soit le fichier adresse suivant (nom, numro de tlphone domicile, numro de portable, numro
quelconque):
gwehae ] 0298452223 ] 0638431234 ] 50
maJce ] 0466442312 ] 0638453211 ] 31
ud11h ] 0154674487 ] 0645227937 ] 23
L'exemple suivant vrifie que dans le fichier le numro de tlphone domicile (champ 2) et le
numro de portable (champ 3) sont bien des nombres.
awk `BECTh { pJ1h1 "0h vJ111e es humJos de 1phohe, FS="]"}
$2 ! /|0-9]|0-9]*$/ { pJ1h1 "EJJeuJ suJ e humJo de 1phohe dom1c1e,
1ghe h"hR". \ h"$0}
$3 ! /|0-9]|0-9]*$/ { pJ1h1 "EJJeuJ suJ e humJo de 1phohe du poJ1abe,
1ghe h"hR". \ h"$0}
Eh0 { pJ1h1 "vJ111ca11oh 1eJm1h"} ` adJesse
Cours utilisateur UNIX 42/58 http://www.funix.org
BEGIN est suivi d'une instruction d'affichage qui rsume la fonction de la commande, et de la
dfinition du sparateur de champ. L'expression $2 se rfre au deuxime champ d'une ligne
(enregistrement) de adresse soit le numro de tlphone domicile, on recherche ceux qui ne
contiennent pas de chiffre (ngation de contient des chiffres), en cas de succs on affichera un
message d'erreur, le numro de ligne courante, un retour la ligne, puis le contenu entier de la ligne.
L'expression $3 se rfre au troisime champ d'une ligne (enregistrement) de adresse soit le numro
du portable, on recherche ceux qui ne contiennent pas de chiffre (ngation de contient des chiffres),
en cas de succs on affichera un message d'erreur, le numro de ligne courante, un retour la ligne,
puis le contenu entier de la ligne. END est suivi d'une instruction d'affichage indiquant la fin du
travail.
13.2.3Les expressions relationnelles
Un critre peut contenir des oprateurs de comparaison (- <, <=,==,!=,>=,>). Exemple avec le
fichier adresse suivant:
awk `BECTh { pJ1h1 "0h cheJche 1ghes doh1 e humJo {champ 4) es1 supJ1euJ
30", FS="]"}
$4 > 30 { pJ1h1 "humJo supJ1euJ 30 a 1ghe h"hR". \ h"$0}
Eh0 { pJ1h1 "vJ111ca11oh 1eJm1h"} ` adJesse
13.2.4Combinaison de critres
Un critre peut tre constitu par une combinaison boolenne avec les oprateurs ou (||), et (&&) et
non (!). Exemple:
awk `BECTh { pJ1h1 "0h cheJche a 1ghe avec ud11h ou avec uh humJo 1h1J1euJ
30", FS="]"}
$1 = = "ud11h" ]] $4 < 30 { pJ1h1 "PeJsohhe "$1" humJo "$4" 1ghe h"hR". \
h"$0}
Eh0 { pJ1h1 "vJ111ca11oh 1eJm1h"} ` adJesse
13.2.5Plage d'enregistrement dlimites par des critres
La syntaxe est la suivante critre1,critre2 {instructions}. Les instructions sont excutes pour
toute les lignes entre la ligne rpondant au critre1 et celle au critre2. L'action est excute pour les
lignes comprises entre la ligne 2 et 6.
awk `BECTh hR==2,hR==6 { pJ1h1 "1ghe h"hR".\ h"$0}
Eh0 ` adJesse
13.3Les actions
13.3.1Prsentation
Les actions permettent de transformer ou de manipuler les donnes, elles contiennent une ou
plusieurs instructions. Les actions peuvent tre de diffrents types: fonctions prdfinies, fonctions
de contrle, fonctions d'affectation, fonctions d'affichage.
Cours utilisateur UNIX 43/58 http://www.funix.org
13.3.2Fonctions prdfinies traitant des numriques
atan2(y,x) arctangente de x/y en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle la puissance x
int(x) partie entire
log(x) logarithme naturel
rand(x) nombre alatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carre
srand(x) dfinition d'une valeur de dpart pour gnrer un nombre alatoire
13.3.3Fonctions prdfinies traitant de chanes de caractres
Pour avoir la liste des fonctions prdfinies sur votre plate-forme vous devez faire un man awk,
voici la liste des fonctions les plus courantes sur un systme UNIX.
gsub(expression-rgulire,nouvelle-chaine,chaine-de-caractres) dans chaine-de-caractres tous
les caractres dcrits par l'expression rgulire sont remplacs par nouvelle-chaine. gsub et
quivalent gensub.
gsub(/a/,"ai",oi") Remplace la chaine oi par ai
index(chaine-de-caractres,caractre--rechercher) donne la premire occurence du caractre--
rechercher dans la chaine chaine-de-caractres
n=index("patate","ta") n=3 length(chaine-de-caractres) renvoie la longueur de la chaine-de-
caractres
n=length("patate") n=6
match(chaine-de-caractres,expression-rgulire) renvoie l'indice de la position de la chane
chaine-de-caractres, repositionne RSTART et RLENGTH
n=match("PO1235D",/[0-9][0-9]/) n=3, RSTART=3 et RLENGTH=4
printf(format,valeur) permet d'envoyer des affichages (sorties) formates, la syntaxe est identique
de la mme fonction en C
printf("La variable i est gale %7,2f",i) sortie du chiffre i avec 7 caractres (ventuellement
caractres vides devant) et 2 chiffres aprs la virgule.
printf("La ligne est %s",$0) > "fichier.int" Redirection de la sortie vers un fichier avec >, on
peut utiliser aussi la redirection >>. Veillez ne pas oublier les "" autour du nom du fichier.
split(chaine-de-caractres,tableau,sparateur) scinde la chane chaine-de-caractres dans un
tableau, le sparateur de champ est le troisime argument
Cours utilisateur UNIX 44/58 http://www.funix.org
n=split("zorro est arriv",tab," ") tab[1]="zorro", tab[2]="est", tab[3]="arriv", n=3 correspond
au nombre d'lments dans le tableau
sprintf(format,valeur) printf permet d'afficher l'cran alors que sprintf renvoie la sortie vers une
chane de caractres.
machaine=sprintf("J'ai %d patates",i) machaine="J'ai 3 patates" (si i=3)
substr(chaine-de-caractres,pos,long) Extrait une chaine de longueur long dans la chane chaine-
de-caractres partir de la position pos et l'affecte une chane.
machaine=substr("Zorro est arriv",5,3) machaine="o e"
sub(expression-rgulire,nouvelle-chaine,chaine-de-caractres) idem que gsub sauf que seul la
premire occurence est remplace (gsub=globale sub)
system(chaine-de-caractres) permet de lancer des commandes d'autres programmes
commande=sprintf("ls | grep toto") Excution de la commande UNIX "ls |grep toto"
system(commande)
tolower(chaine-de-caracteres) retourne la chane de caractres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chane de caractres convetie en majuscule
13.3.4Fonctions dfinies par l'utilisateur
Vous pouvez dfinir une fonction utilisateur de telle sorte qu'elle puisse tre considre comme une
fonction prdfinie. La syntaxe est la suivant:
1ohc11oh ma1ohc11oh{1s1e des paJam1Jes)
{
1hs1Juc11ohs
Je1uJh vaeuJ
}
13.4Les variables et oprations sur les variables
13.4.1Prsentation
On trouve les variables systme et les variables utilisateurs. Les variables systmes non modifiables
donnent des informations sur le droulement du programme. Les variables utilisateurs sont dfinies
par l'utilisateur.
13.4.2Les variables utilisateur
Le nom des variables est form de lettres, de chiffres (sauf le premier caractre de la variable),
d'underscore. Ce n'est pas ncessaire d'initialiser une variable, par dfaut, si c'est un numrique, elle
est gale 0, si c'est une chane, elle est gale une chane vide. Une variable peut contenir du
texte, puis un chiffre, en fonction de son utilisation awk va dterminer son type (numrique ou
chane).
Cours utilisateur UNIX 45/58 http://www.funix.org
13.4.3Les variables prdfinies (systme)
Les variables prdfinies sont les suivantes (en italique les valeurs par dfaut):
ARGC nombre d'arguments de la ligne de commande nant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande nant
CONVFMT format de conversion pour les nombres "%.6g"
ENVIRON tableau contenant les valeurs de l'environnement courant
ERRNO contient une chane dcrivant une erreur ""
FIELIWIDTHS variable exprimentale ne pas utiliser
FILENAME nom du fichier d'entre nant
FNR numro d'enregistrement dans le fichier courant nant
FS contrle le sparateur des champs d'entre " "
IGNORECASE contrle les expressions rgulires et les oprations sur les chanes de caractres 0
NF nombre de champs dans l'enregistrement courant nant
NR nombre d'enregistrements lus jusqu'alors nant
OFMT format de sortie des nombres (nombre aprs la virgule) "%.6g"
OFS sparateur des champs de sortie " "
ORS sparateur des enregistrements de sortie
RLENGTH nant longueur de la chane slectionne par le critre "\ n"
RS contrle le sparateur des enregistrements d'entre "\ n"
RSTART dbut de la chane slectionne par le critre nant
SUBSEP sparateur d'indiage "\ 034"
13.4.4Oprations sur les variables
On peut manipuler les variables et leur faire subir certaines oprations. On trouve diffrents types
d'oprateurs, les oprateurs arithmtiques classiques (+, -, *, /, %(modulo, reste de la division),
(puissance)), les oprateurs d'affectation (=, +=, -=, *=, /=, %=, =). Exemples:
var=30 affectation du chiffre 30 var
var="toto" affectation de la chane toto var
var="toto " "est grand" concatnation des chanes
"toto " et "est grand", rsultat dans var
var=var-valeur var-=valeur expressions quivalentes
Cours utilisateur UNIX 46/58 http://www.funix.org
var=var+valeur var+=valeur expressions quivalentes
var=var*valeur var*=valeur expressions quivalentes
var=var/valeur var/=valeur expressions quivalentes
var=var%valeur var%=valeur expressions quivalentes
var=var+1 var++ expressions quivalentes
var=var-1 var-- expressions quivalentes
13.4.5Les variables de champ
Comme on l'a dj vu auparavant les champs d'un enregistrement (ligne) sont dsigns par $1,
$2,...$NF(dernier champ d'une ligne). L'enregistrement complet (ou ligne) est dsign par $0. Une
variable champ est a les mmes proprits que les autres variables. Le signe $ peut tre suivi par
une variable, exemple:
1=3
pJ1h1 ${1+1)
Provoque l'affichage du champ 4
Lorsque $0 est modifi, automatiquement les variables de champs $1,..$NF sont redfinies.
Quand l'une des variables de champ est modife, $0 est modifi. ATTENTION le sparateur ne sera
pas celui dfinit par FS mais celui dfinit par OFS (output field separator). Exemple:
awk `BECTh{pJ1h1" # Tous es u111sa1euJs du gJoupe useJs{CT0 22)bascueJoh1 dahs
e gJoupe bouo1{CT0 24)
",FS=".",0FS="."}
$4 != 22 {pJ1h1 $0} # S1 e gJoupe h`es1 pas useJs oh 1a11 J1eh
$4 ==22 {$4=24,pJ1h1 $0} # S1 e gJoupe es1 22, oh u1 Ja11ec1e 24
Eh0 {pJ1h1"C`es1 11h1"}` /e1c/passwd > passwd.essa1
13.5Les structures de contrle
13.5.1Prsentation
Parmi les structures de contrle, on distingue les dcisions (if, else), les boucles (while, for, do-
while, loop) et les sauts (next, exit, continue, break).
13.5.2Les dcisions (if, else)
La syntaxe est la suivante:
11 {cohd111oh) s1 a cohd111oh es1 sa11s1a11e {vJa1e)
1hs1Juc11oh1 oh excu1e `1hs1Juc11oh
ese s1hoh
1hs1Juc11oh2 oh excu1e `1hs1Juc11oh 2
Cours utilisateur UNIX 47/58 http://www.funix.org
Si vous avez une suite d'instructions excuter, vous devez les regrouper entre deux accolades.
Exemple:
awk ` BECTh{pJ1h1"1es1 de `absehce de mo1 de passe",FS="."}
hF==7
{ #pouJ 1ou1es es 1ghes coh1ehah1 7 champss
11 {$2=="") # s1 e deux1me champ es1 v1de {coJJespohd au mo1 de passe
cJyp1))
{ pJ1h1 $1 " h`a pas de mo1 de passe"} # oh a111che e hom de `u111sa1euJ
{$1=og1h) qu1 h`a pas de mo1 de passe
ese s1hoh
{ pJ1h1 $1 " a uh mo1 de passe"} # oh a111che e hom de `u111sa1euJ possdah1
uh mo1 de passe
}
Eh0{pJ1h1"C`es1 11h1") ` /e1c/passwd
13.5.3Les boucles (while, for, do-while)
while, for et do-while sont issus du langage de programmation C. La syntaxe de while est la
suivante:
wh1e {cohd111oh) 1ah1 que a cohd111oh es1 sa11s1a11e {vJa1e)
1hs1Juc11oh oh excu1e `1hs1Juc11oh
Exemple:
awk ` BECTh{pJ1h1"a111chage de 1ous es champs de passwd",FS="."}
{ 1=11 # 1h111a1sa11oh du comp1euJ 1 {oh commehce paJ e champ 1)
wh1e{1=<hF) # 1ah1 qu`oh h`es1 pas eh 11h de 1ghe
{ pJ1h1 $11 # oh a111che e champ
1+++ # 1hcJmeh1a11oh du comp1euJ pouJ passeJ d`uh champ au su1vah1
}
}
Eh0{pJ1h1"C`es1 11h1") ` /e1c/passwd
La syntaxe de for est la suivante:
for (instruction de dpart; condition; instruction d'incrmentation) On part d'une instruction de
dpart, on incrmente instruction on excute l'instruction jusqu' que la condition soit satisfaite
Exemple:
awk ` BECTh{pJ1h1" a111chage de 1ous es champs de passwd",FS="."}
{
1oJ {1=1,1=><hF,1++) # 1h111a1sa11oh du comp1euJ 1, oh 1hcJmeh1e e comp1euJ
usqu` ce qu`oh a11e1ghe hF {11h de a 1ghe)
{ pJ1h1 $1 } # oh a111che e champ 1ah1 que a cohd111oh h`es1 pas sa11s1a11e
}
Eh0{pJ1h1"C`es1 11h1") ` /e1c/passwd
Avec for on peut travailler avec des tableaux. Soit le tableau suivant: tab[1]="patate", tab[2]
="courgette",tab[3]="poivron". Pour afficher le contenu de chacun des lments du tableau on
crira:
1oJ {1hdex 1h 1ab)
{
pJ1h1 "egume ." 1ab|1hdex]
Cours utilisateur UNIX 48/58 http://www.funix.org
}
La syntaxe de do-while est la suivante:
do
{1hs1Juc11ohs}} oh excu1e es 1hs1Juc11ohs
wh1e {cohd111oh) usqu` que a cohd111oh so11 sa11s1a11e
La diffrence avec while, est qu'on est sr que l'instruction est excute au moins une fois.
13.5.4Sauts controls (break, continue, next, exit)
break permet de sortir d'une boucle, la syntaxe est la suivante:
1oJ {,,,) bouce 1h11h1e
{1hs1Juc11ohs oh excu1e es 1hs1Juc11ohss
11 {cohd111oh) bJeak s1 a cohd111oh es1 sa11s1a11e oh soJ1 de a bouce
1hs1Juc11ohs}
Alors que break permet de sortir d'une boucle, continue force un nouveau passage dans une boucle.
next permet d'interrompre le traitrement sur la ligne courante et de passer la ligne suivante
(enregistrement suivant).
exit permet d'abandonner la commande awk, les instructions suivant END sont excutes (s'il y en
a).
13.6Les tableaux
13.6.1Prsentation
Un tableau est une variable se composant d'un certains nombres d'autres variables (chanes de
caractres, numriques,...), ranges en mmoire les unes la suite des autres. Le tableau est dit
unidimensionnelle quand la variable lment de tableau n'est pas elle mme un tableau. Dans le cas
de tableaux imbriqus on parle de tableau unidimensionnels.
Les termes matrice, vecteur ou table sont quivalents tableau.
13.6.2Les tableaux unidimensionnels
Vous pouvez dfinir un tableau unidimensionnel avec la syntaxe suivante:tab[index]=variable,
l'index est un numrique (mais pas obligatoirement, voir les tableaux associatifs), la variable peut
tre soit un numrique, soit une chane de caractre. Il n'est pas ncessaire de dclarer un tableau, la
valeur initiale des lments est une chane vide ou zro. Exemple de dfinition d'un tableau avec
une boucle for.
vaJ=1
1oJ {1=1,1<=hF,1++)
{ moh-1ab|1]=vaJ++}
Cours utilisateur UNIX 49/58 http://www.funix.org
On dispose de la fonction delete pour supprimer un tableau (delete tab). Pour supprimer un lment
de tableau on tapera delete tab[index].
13.6.3Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel, ceci prs que les index sont des chanes de
caractres. Exemple:
age|"o1v1eJ"]=27
age|"veJoh1que"]=25
age|"beham1h"]=5
age|"veJoh1que"]=3
1oJ {hom 1h age)
{ pJ1h1 hom " a " age|hom] "ahs"
}
On a un tableau age avec une chane de caractres prnom comme index, on lui affecte comme
lments de tableau un numrique (age de la personne mentionne dans le prnom). Dans la boucle
for la variable nom est remplie successivement des chanes de caractres de l'index (olivier,
veronique, ...).
Les valeurs de l'index ne sont pas toujours tries.
13.6.4Les tableaux multidimensionnels
awk n'est pas prvu pour grer les tableaux multidimensionnels (tableaux imbriqus, ou plusieurs
index), nanmoins on peut simuler un tableau deux dimensions de la manire suivante. On utilise
pour cela la variable prdfinie SUBSEP qui, rappelons le, contient le sparateur d'indiage. Le
principe repose sur la cration de deux indices (i, j) qu'on va concatner avec SUBSEP (i:j).
SbBSEP="."
1="A",="B"
1ab|1,]="Coucou"
L'lment de tableau "Coucou" est donc index par la chane "A:B".
14Exercices
14.1Critres pour les noms de fichier
Exercice 1:
Dans votre rpertoire courant, crez en une commande les fichiers suivants:
annee1 Annee2 annee4 annee45 annee41 annee510 annee_saucisse banane
Solution:
touch annee1 Annee2 annee4 annee45 annee41 annee415 annee_saucisse annee_banane
Exercice 2:
Cours utilisateur UNIX 50/58 http://www.funix.org
Crer le rpertoire Year dans votre rpertoire courant, en une commande dplacez les fichiers
prcdemment crs dans le rpertoire Year.
Solution:
mv [aA]nnee* ./Year
Exercice 3:
Lister tous les
fichiers
se terminant par 5
commenant par annee4
commenant par annee4 et de 7 lettres maximum

commenant par annee avec aucun chiffre
numrique
contenant la chane ana
commenant par a ou A
Solution:
ls *5
ls annee4*
ls annee4?
ls annee[!0-9]*
ls *ana*
ls [aA]*
Exercice 4:
Copier les fichiers dont l'avant dernier caractre est un 4 ou 1 dans le rpertoire /tmp en une seule
commande.
Solution:
cp *[41]? /tmp
15Les droits d'accs
Exercice 1:
Dans votre rpertoire courant, crez un rpertoire courant essai_droit, par dfaut ce rpertoire est
755 (rwxr-xr-x), quelles sont les commandes (en notation symbolique et en base 8) pour lui donner
les droits suivant (on suppose qu'aprs chaque commande on remet le rpertoire 755:

propritaire groupe les autres
droit en
lecture
droit en
criture
droit
d'accs
droit en
lecture
droit en
criture
droit
d'accs
droit en
lecture
droit en
criture
droit
d'accs
commande
1
oui oui oui oui non oui non non oui
commande
2
oui non oui non oui non non non oui
Cours utilisateur UNIX 51/58 http://www.funix.org
commande
3
non oui non non non oui oui non non
commande
4
non non oui oui non oui non non non
Solution:
commande 1
chmod 751 essai_droit
chmod o-rw essai_droit
commande 2
chmod 521 essai_droit
chmod u-w,g-rx,g+w,o-r essai_droit
commande 3
chmod 214 essai_droit
chmod u-rx,g-r,o-x essai_droit
commande 4
chmod 150 essai_droit
chmod u-rw,o-rx essai_droit
Exercice 2:
Crez un fichier droit dans le rpertoire essai_droit, par dfaut ce fichier est 644 (rw-r--r--).En
partant du rpertoire courant, pour chaque commande de l'exercice prcdent, essayez d'accder au
rpertoire essai_droit (commande cd), de faire un ls dans essai_droit et de modifier le fichier avec
un diteur quelconque (vi par exemple).
Solution:
commande
1

on peut accder au rpertoire (droit d'accs x) on peut faire ls (droit en lecture sur le
rpertoire r), et modifier le fichier (droit en criture sur le rpertoire w et le fichier w)
commande
2

on peut accder au rpertoire (droit d'accs x), on peut faire ls (droit en lecture sur le
rpertoire r), et modifier le fichier (le droit en criture sur le rpertoire n'est pas pris
en compte ds lors que vous avez le droit en criture sur le fichier)
commande
3
on ne peut pas accder au rpertoire (pas de droit d'accs x)
commande
4

on peut accder au rpertoire (droit d'accs x), on ne peut pas faire ls (pas de droit de
lecture), on peut diter et modifier le fichier (droit en criture sur le rpertoire et sur
le fichier).
Exercice 3:
Tapez la commande umask, de manire ce que les fichiers lors de leur cration aient par dfaut les
droits 640 (rw-r-----), et les rpertoires 750 (rwxr-x---).
Solution:
Pour un fichier
masque maximum pour un
fichier
666 rw-rw-rw-
retirer 026 ----w-rw-
droit par dfaut 640 rw-r-----
Pour un rpertoire
Cours utilisateur UNIX 52/58 http://www.funix.org
masque maximum pour un
rpertoire
777 rwxrwxrwx
retirer 027 ----w-rwx
droit par dfaut 640 rwxr-x---
Soit la commande:
umask 027
(Pour un fichier retirer 026 ou 027 est quivalent)
15.1Grep
Exercice 1
Crer un rpertoire essai-grep dans votre home directory. Dans ce rpertoire crer les fichiers
suivants:
tomate poire pomme cerise Fraise fraise courgette POMME3 afraise
Editez les fichiers (sortie de la commande ls redirige vers grep) avec les critres sur leur nom
suivant:
Critre 1 Le nom doit tre Fraise ou fraise
Critre 2 se est en fin de nom
Critre 3 ai est prsent dans le nom
Critre 4 Nom contenant un chiffre numrique
Critre 5 Nom contenant la chane mm ou MM
Solution:
mkdir ~/essai-grep
cd ~/essai-grep
touch tomate poire pomme cerise Fraise fraise courgette POMME3
afraise


Critre 1 ls | grep "^[fF]raise$"
Critre 2 ls | grep "se$"
Critre 3 ls | grep "ai"
Critre 4 ls | grep "[0-9]"
Critre 5 ls | grep "[mM]\{2\}"
Nota:
Pour rediriger le rsultat vers un fichier, vous pouvez faire, par exemple pour le critre 1:
grep "^[fF]raise$" mon-fichier
Exercice 2
Copiez le fichier /etc/passwd dans votre home directory. Editez la ligne commenant par votre nom
de login.
Cours utilisateur UNIX 53/58 http://www.funix.org
Solution:
cd
cp /etc/passwd ~
cat passwd | grep "^monnom"
avec login le nom de votre login ( 8
lettres)
Exercice 3
Dans le fichier passwd qui est dans votre home directory, ditez les lignes commenant par des
noms de login ne contenant pas de chiffre.
Soluce:
cat passwd | grep "^[^0-9][^0-9]*:"
ou
cat passwd | grep "^[a-z][a-z]*:"
Exercice 4
Editez les lignes du fichier passwd commenant par des noms de login de 3 ou 4 caractres.
Solution:
cat passwd | grep "^.\{3,4\}:"
15.2Les filtres
Exercice 1
Copiez le fichier /etc/passwd dans votre home directory. Editez uniquement les champs contenant
le login et la home directory.
Solution:
cd
cp /etc/passwd ~
cut -d: -f1,6 passwd
Exercice 2
Triez passwd sur le nom
Solution:
sort -t: +0 -1 passwd
Exercice 3
Extraire les nom de login et UID puis triez suivant les UID, le tout en une seule commande, vous
redirigerez le tout vers un fichier
Solution:
cut -d: -f1,3 passwd | sort -t: -n +1 -2 > lefichier
Exercice 4
Cours utilisateur UNIX 54/58 http://www.funix.org
Dans le fichier de rsultat prcdent remplacer les ":" par des " " (espace).
Solution:
cat lefichier | tr ":" " " > lefichier
Nota:
On aurait pu avoir le mme rsultat en une seule commande:
cut -d: -f1,3 | sort -t: -n +1 -2 | tr ":" " " > lefichier
Exercice 5
Editez les cinq dernires lignes du fichier.
Solution:
tail -5 lefichier
Exercice 6
Editez les cinq premiers caractres du fichier.
Solution:
head -5c lefichier
15.3find
Exercice 1
Cherchez dans toute l'arborescence les fichiers dont le nom se termine par .c, redirigez les erreurs
vers le fichier poubelle /dev/null
Commenant par X ou x.
Dont les noms ne contiennent pas de chiffre.
Solution:
find / -name "*.c" -print 2>/dev/null
find / -name "[Xx]*" -print
2>/dev/null

find / -name "[!0-9]" -print
2>/dev/null
Exercice 2
Chercher dans /usr les fichiers dont la taille dpasse 1Mo (2000 blocs de 500Ko) et dont les droits
sont fixs 755 (-rwxr-xr-x).
Solution:
find /usr (-size +2000 -a -perm 755) -print 2>/dev/null
Exercice 3
Combien il y a de fichiers dans toute l'arborescence vous appartenant et ayant les droits fixs 666
(-rw-rw-rw-).
Cours utilisateur UNIX 55/58 http://www.funix.org
Solution:
find / (-user olivier -a -perm 666 -print) | wc -l
Exercice 4
Trouver tous les fichiers core dans l'arborescence et supprimez les aprs confirmation.
Solution:
find / -name "core" -print -ok rm {}\;
15.4awk
Les exercices portent sur le fichier mesure suivant:
nom de la
mesure
|
lieu de la
mesure
|
date de la
mesure
|
valeur
brute
|
correction
1
|
correction
2
|
correction
3
|
valeur
corrige
|
marcel | brest |
18/12/19
98
| 12.5 | 1.34 | 1.23 | -1.5 | 13.47 |
polo | loctudy |
21/05/19
97
| 11.5 | 1.24 | 1.12 | -1.2 | 12.66 |
otto | camaret |
04/09/19
95
| 9.3 | 0.98 | 1.17 | -1.12 | 10.33 |
Le champ valeur corrige est la somme algbrique de la valeur brute et des 3 corrections.
Exercice 1
Vous vous tes bourrs sur le signe de la correction 1, de mme dans la correction 2, vous avez
dcouvert que vous avez commis une petite erreur et qu'il fallait lui ajouter 0.1. Modifier le fichier
en prenant en compte ces corrections, faites en sorte que la valeur corrige soit modifie en
consquence.
Dans le mme exercice vous afficherez la somme totale des valeurs corriges et la valeur corrige
moyenne. Ces valeurs doivent tre sauvegardes dans un fichier rsultat.
Solution:
#!/bin/bash
awk ' BEGIN { FS="|";OFS="|" }
NR = =1 { printf("%s\n",$0)}
NR>1 { $5*=-1
$6+=0.1
$8=$4+$5+$6+$7
somme+=$8
printf("%s\n",$0)}

END { printf("somme totale des valeurs corriges %f \n",somme) >
"resultat";
printf("valeur corrige moyenne %f \n" (somme/(NR-1)) >> "resultat"}
' $1
Cours utilisateur UNIX 56/58 http://www.funix.org
Appelez votre script exo1.awk, donnez lui les droits 755, et appelez le ainsi:
exo1.awk mesure > mesure.corrigee
Aprs excution, vrifiez l'existence et le contenu du fichier resultat.
Exercice 2
Afficher les mesures ayant une anne paire. Redirigez le rsultat de la recherche vers un fichier
paire.
Solution:
#!/bin/bash
awk ' BEGIN { printf("Mesures ayant une anne paire \n") > "paire";FS="|"}
NR>1 { annee=substr($3,7,4)
if (annee%2= =0)

{ printf("mesure %s ",$1); printf(" anne %s paire\n ",annee) >>
"paire"}
' $1
Appelez votre script exo2.awk, donnez lui les droits 755, et appelez le ainsi:
exo2.awk mesure
Aprs excution, vrifiez l'existence et le contenu du fichier paire.
Exercice 3
Vrifiez que le format de la date jj/mm/aaaa est correcte ainsi que le format du lieu (form que de
lettres de l'alphabet en minuscules ou majuscules).
Solution:
#!/bin/bash
awk ' BEGIN { printf("Vrification du format \n";FS="|" }

NR>1 && $2 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]
$/
{ printf(" Mauvais format de date pour mesure %s \n", $1 }
NR>1 && $2 !~ /^[a-zA-Z][a-zA-Z]*$/
{ printf(" Mauvais format du lieu pour mesure %s \n",$1 }
' $1
Appelez votre script exo3.awk, donnez lui les droits 755, et appelez le ainsi:
exo3.awk mesure
Le fonctionnement du script sous LINUX est un peu foireux, a marche bien par contre sur d'autres
environnements (HP-UX ou Solaris), va savoir pour quoi...
On pourrait amliorer encore plus la vrification en vrifiant bien que la date va de 1 31 et le mois
de 1 12, avec un script du style:
#!/bin/csh
awk ' BEGIN { printf("Vrification du mois et du jour\n");FS="|")
Cours utilisateur UNIX 57/58 http://www.funix.org
NR>1 && $3 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]$/
{ jour=substr($3,1,2)
mois=substr($3,3,2)

if (jour > 31 || mois >12) { printf("mauvais format pour mesure %
s\n",$1)}
}
' $1
C'est un peu lourd comme script, vous de trouver plus simple. Toujours un fonctionnement
capricieux sous LINUX.
Exercice 4
Afficher les noms de mesure et leur valeur corrige associe en vous servant d'un tableau associatif.
Solution:
#!/bin/bash
awk ' BEGIN { printf("Affichage des mesures et de leur valeur corrige \n");FS="|"}
NR>1 { mesure-corrigee[$1]=$8
END
{ for (mesure in mesure-corrigee)

{printf("mesure %s ",mesure); printf(" gale %s \n",mesure-corrigee
[mesure]) }}
' $1
Appelez votre script exo4.awk, donnez lui les droits 755, et appelez le ainsi:
exo4.awk mesure
Cours utilisateur UNIX 58/58 http://www.funix.org

Vous aimerez peut-être aussi