Next Previous Contents
Cours utilisateur UNIX
Olivier HoarauV10 27 deacutecembre 1999
Ce document est un essai de vulgarisation dUNIX Il est destineacute agrave ceux qui lutilisent deacutejagrave mais aussiaux deacutebutants qui voudraient en apprendre plus sur ce systegraveme dexploitation qui est en train de sepopulariser agrave vitesse grand V avec lexplosion de Linux La derniegravere version de ce document estconsultable sur le site officiel httpwwwlinux-franceorgarticleohoarau La version en constructionse trouve sur le site httpfunixfreefr Toutes remarques et suggestions concernant ce document sontagrave expeacutedier agrave Olivier Hoarau mailtoolivierhoaraufnacnet
1 Historique du document
2 Preacuteambule
3 Principes de base UNIX
31 Les processus ou process
32 Deacutefinition dun systegraveme dexploitation
33 Environnement
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIX
42 Les fonctions principales
43 Structure du systegraveme UNIX
44 Le shell
5 Ouverture et fermeture de session
51 Ouverture de session
52 Changement de password
53 Fermeture de session
6 Commandes UNIX et redirection
61 Syntaxe dune commande
62 Les entreacutees sorties
63 Redirection des entreacutees sorties
64 Redirection des erreurs
65 Les pipes
7 Le systegraveme de fichiers
71 Les types de fichier
72 Atteindre un fichier
73 Visualiser les fichiers
74 Commandes de gestion des reacutepertoires
75 Commandes de gestion des fichiers
76 Les liens
77 Les inodes
78 Les meacutetacaractegraveres
8 Les droits daccegraves
81 Identification de lutilisateur
82 Deacutefinition des droits dutilisateur
83 Commandes associeacutees
9 Gestion des processus
91 Les caracteacuteristiques dun processus
92 Visualiser les processus
93 Commandes de gestion des processus
94 Lancer en processus en tacircche de fond
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
102 Edition de fichiers avec critegraveres
103 Comparaison de fichiers
11 Les commandes grep et find
111 Les expressions reacuteguliegraveres
112 La commande grep
113 La commande find
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
122 La commande sed
13 La commande awk
131 Preacutesentation
132 Critegraveres de seacutelection
133 Les actions
134 Les variables et opeacuterations sur les variables
135 Les structures de controcircle
136 Les tableaux
Next Previous Contents
Next Previous Contents
1 Historique du document27 deacutecembre 1999 version 10 du document
Next Previous Contents
Next Previous Contents
2 PreacuteambuleUNIX est un systegraveme dexploitation dune richesse incroyable il serait bien preacutetentieux dessayer enquelques pages den faire le tour Cest pourquoi je me suis fixeacute comme objectif de ne preacutesenter queles commandes les plus courantes qui permettront agrave un utilisateur de se deacutebrouiller avec nimportequel systegraveme UNIX de HP-UX agrave Solaris en passant par Linux sans oublier les autres
Ce document sadresse agrave toute personne ayant une petite expeacuterience dun systegraveme informatique ilsadresse aussi agrave ceux connaissant deacutejagrave UNIX qui voudraient approfondir certaines notions
Le but de ce document nest pas de traiter de ladministration dun systegraveme UNIX
Next Previous Contents
Next Previous Contents
3 Principes de base UNIX
31 Les processus ou processTout logiciel est agrave la base un programme constitueacute dun ensemble de lignes de commandes eacutecritesdans un langage particulier appeleacute langage de programmation Cest uniquement quand on exeacutecute lelogiciel que le programme va reacutealiser la tacircche pour laquelle il a eacuteteacute eacutecrit dans ce cas lagrave on dira quon aaffaire agrave un processus ou process En dautres termes le programme est reacutesolument statique cest deslignes de code alors que le process est dynamique cest le programme qui sexeacutecute
Par exemple le logiciel Winword sous Windows est en fait un becircte programme eacutecrit dans un langageabscons qui a eacuteteacute ensuite compileacute pour le rendre compreacutehensible par la machine ce nest uniquementque quand vous le lancez que vous avez alors affaire au process Winword
32 Deacutefinition dun systegraveme dexploitationUn systegraveme dexploitation est un ensemble de programmes chargeacute de faire linterface entre lutilisateuret le mateacuteriel Cest agrave dire que quand un utilisateur tape une commande au niveau dun logiciel (ouapplication) le logiciel interpregravete la commande la transmet au systegraveme dexploitation qui la transmetau mateacuteriel dans un format compreacutehensible
Un exemple vaut mieux quun grand discours quand vous ouvrez un fichier dans votre traitement detexte favori vous avez appuyeacute sur licocircne qui va bien votre traitement de texte interpregravete lactiondouverture de fichier et transmet lordre au systegraveme dexploitation ce dernier va alors commander aucontrocircleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent aufichier en question Normalement un logiciel ne devrait jamais discuter avec le mateacuteriel le systegravemedexploitation se place entre les deux pour transmettre et eacuteventuellement rejeter des commandesillicites
33 EnvironnementUn environnement est dit fenecirctreacute quand il y a possibiliteacute de pouvoir faire apparaicirctre plusieurs fenecirctresil va de pair avec lutilisation dune souris Windows est par exemple un exemple denvironnementfenecirctreacute On parle aussi denvironnement graphique
A lopposeacute on trouve aussi des environnements textuels non graphiques DOS en est un bel exemple
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commande
62 Les entreacutees sorties
63 Redirection des entreacutees sorties
64 Redirection des erreurs
65 Les pipes
7 Le systegraveme de fichiers
71 Les types de fichier
72 Atteindre un fichier
73 Visualiser les fichiers
74 Commandes de gestion des reacutepertoires
75 Commandes de gestion des fichiers
76 Les liens
77 Les inodes
78 Les meacutetacaractegraveres
8 Les droits daccegraves
81 Identification de lutilisateur
82 Deacutefinition des droits dutilisateur
83 Commandes associeacutees
9 Gestion des processus
91 Les caracteacuteristiques dun processus
92 Visualiser les processus
93 Commandes de gestion des processus
94 Lancer en processus en tacircche de fond
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
102 Edition de fichiers avec critegraveres
103 Comparaison de fichiers
11 Les commandes grep et find
111 Les expressions reacuteguliegraveres
112 La commande grep
113 La commande find
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
122 La commande sed
13 La commande awk
131 Preacutesentation
132 Critegraveres de seacutelection
133 Les actions
134 Les variables et opeacuterations sur les variables
135 Les structures de controcircle
136 Les tableaux
Next Previous Contents
Next Previous Contents
1 Historique du document27 deacutecembre 1999 version 10 du document
Next Previous Contents
Next Previous Contents
2 PreacuteambuleUNIX est un systegraveme dexploitation dune richesse incroyable il serait bien preacutetentieux dessayer enquelques pages den faire le tour Cest pourquoi je me suis fixeacute comme objectif de ne preacutesenter queles commandes les plus courantes qui permettront agrave un utilisateur de se deacutebrouiller avec nimportequel systegraveme UNIX de HP-UX agrave Solaris en passant par Linux sans oublier les autres
Ce document sadresse agrave toute personne ayant une petite expeacuterience dun systegraveme informatique ilsadresse aussi agrave ceux connaissant deacutejagrave UNIX qui voudraient approfondir certaines notions
Le but de ce document nest pas de traiter de ladministration dun systegraveme UNIX
Next Previous Contents
Next Previous Contents
3 Principes de base UNIX
31 Les processus ou processTout logiciel est agrave la base un programme constitueacute dun ensemble de lignes de commandes eacutecritesdans un langage particulier appeleacute langage de programmation Cest uniquement quand on exeacutecute lelogiciel que le programme va reacutealiser la tacircche pour laquelle il a eacuteteacute eacutecrit dans ce cas lagrave on dira quon aaffaire agrave un processus ou process En dautres termes le programme est reacutesolument statique cest deslignes de code alors que le process est dynamique cest le programme qui sexeacutecute
Par exemple le logiciel Winword sous Windows est en fait un becircte programme eacutecrit dans un langageabscons qui a eacuteteacute ensuite compileacute pour le rendre compreacutehensible par la machine ce nest uniquementque quand vous le lancez que vous avez alors affaire au process Winword
32 Deacutefinition dun systegraveme dexploitationUn systegraveme dexploitation est un ensemble de programmes chargeacute de faire linterface entre lutilisateuret le mateacuteriel Cest agrave dire que quand un utilisateur tape une commande au niveau dun logiciel (ouapplication) le logiciel interpregravete la commande la transmet au systegraveme dexploitation qui la transmetau mateacuteriel dans un format compreacutehensible
Un exemple vaut mieux quun grand discours quand vous ouvrez un fichier dans votre traitement detexte favori vous avez appuyeacute sur licocircne qui va bien votre traitement de texte interpregravete lactiondouverture de fichier et transmet lordre au systegraveme dexploitation ce dernier va alors commander aucontrocircleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent aufichier en question Normalement un logiciel ne devrait jamais discuter avec le mateacuteriel le systegravemedexploitation se place entre les deux pour transmettre et eacuteventuellement rejeter des commandesillicites
33 EnvironnementUn environnement est dit fenecirctreacute quand il y a possibiliteacute de pouvoir faire apparaicirctre plusieurs fenecirctresil va de pair avec lutilisation dune souris Windows est par exemple un exemple denvironnementfenecirctreacute On parle aussi denvironnement graphique
A lopposeacute on trouve aussi des environnements textuels non graphiques DOS en est un bel exemple
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveres
112 La commande grep
113 La commande find
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
122 La commande sed
13 La commande awk
131 Preacutesentation
132 Critegraveres de seacutelection
133 Les actions
134 Les variables et opeacuterations sur les variables
135 Les structures de controcircle
136 Les tableaux
Next Previous Contents
Next Previous Contents
1 Historique du document27 deacutecembre 1999 version 10 du document
Next Previous Contents
Next Previous Contents
2 PreacuteambuleUNIX est un systegraveme dexploitation dune richesse incroyable il serait bien preacutetentieux dessayer enquelques pages den faire le tour Cest pourquoi je me suis fixeacute comme objectif de ne preacutesenter queles commandes les plus courantes qui permettront agrave un utilisateur de se deacutebrouiller avec nimportequel systegraveme UNIX de HP-UX agrave Solaris en passant par Linux sans oublier les autres
Ce document sadresse agrave toute personne ayant une petite expeacuterience dun systegraveme informatique ilsadresse aussi agrave ceux connaissant deacutejagrave UNIX qui voudraient approfondir certaines notions
Le but de ce document nest pas de traiter de ladministration dun systegraveme UNIX
Next Previous Contents
Next Previous Contents
3 Principes de base UNIX
31 Les processus ou processTout logiciel est agrave la base un programme constitueacute dun ensemble de lignes de commandes eacutecritesdans un langage particulier appeleacute langage de programmation Cest uniquement quand on exeacutecute lelogiciel que le programme va reacutealiser la tacircche pour laquelle il a eacuteteacute eacutecrit dans ce cas lagrave on dira quon aaffaire agrave un processus ou process En dautres termes le programme est reacutesolument statique cest deslignes de code alors que le process est dynamique cest le programme qui sexeacutecute
Par exemple le logiciel Winword sous Windows est en fait un becircte programme eacutecrit dans un langageabscons qui a eacuteteacute ensuite compileacute pour le rendre compreacutehensible par la machine ce nest uniquementque quand vous le lancez que vous avez alors affaire au process Winword
32 Deacutefinition dun systegraveme dexploitationUn systegraveme dexploitation est un ensemble de programmes chargeacute de faire linterface entre lutilisateuret le mateacuteriel Cest agrave dire que quand un utilisateur tape une commande au niveau dun logiciel (ouapplication) le logiciel interpregravete la commande la transmet au systegraveme dexploitation qui la transmetau mateacuteriel dans un format compreacutehensible
Un exemple vaut mieux quun grand discours quand vous ouvrez un fichier dans votre traitement detexte favori vous avez appuyeacute sur licocircne qui va bien votre traitement de texte interpregravete lactiondouverture de fichier et transmet lordre au systegraveme dexploitation ce dernier va alors commander aucontrocircleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent aufichier en question Normalement un logiciel ne devrait jamais discuter avec le mateacuteriel le systegravemedexploitation se place entre les deux pour transmettre et eacuteventuellement rejeter des commandesillicites
33 EnvironnementUn environnement est dit fenecirctreacute quand il y a possibiliteacute de pouvoir faire apparaicirctre plusieurs fenecirctresil va de pair avec lutilisation dune souris Windows est par exemple un exemple denvironnementfenecirctreacute On parle aussi denvironnement graphique
A lopposeacute on trouve aussi des environnements textuels non graphiques DOS en est un bel exemple
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
1 Historique du document27 deacutecembre 1999 version 10 du document
Next Previous Contents
Next Previous Contents
2 PreacuteambuleUNIX est un systegraveme dexploitation dune richesse incroyable il serait bien preacutetentieux dessayer enquelques pages den faire le tour Cest pourquoi je me suis fixeacute comme objectif de ne preacutesenter queles commandes les plus courantes qui permettront agrave un utilisateur de se deacutebrouiller avec nimportequel systegraveme UNIX de HP-UX agrave Solaris en passant par Linux sans oublier les autres
Ce document sadresse agrave toute personne ayant une petite expeacuterience dun systegraveme informatique ilsadresse aussi agrave ceux connaissant deacutejagrave UNIX qui voudraient approfondir certaines notions
Le but de ce document nest pas de traiter de ladministration dun systegraveme UNIX
Next Previous Contents
Next Previous Contents
3 Principes de base UNIX
31 Les processus ou processTout logiciel est agrave la base un programme constitueacute dun ensemble de lignes de commandes eacutecritesdans un langage particulier appeleacute langage de programmation Cest uniquement quand on exeacutecute lelogiciel que le programme va reacutealiser la tacircche pour laquelle il a eacuteteacute eacutecrit dans ce cas lagrave on dira quon aaffaire agrave un processus ou process En dautres termes le programme est reacutesolument statique cest deslignes de code alors que le process est dynamique cest le programme qui sexeacutecute
Par exemple le logiciel Winword sous Windows est en fait un becircte programme eacutecrit dans un langageabscons qui a eacuteteacute ensuite compileacute pour le rendre compreacutehensible par la machine ce nest uniquementque quand vous le lancez que vous avez alors affaire au process Winword
32 Deacutefinition dun systegraveme dexploitationUn systegraveme dexploitation est un ensemble de programmes chargeacute de faire linterface entre lutilisateuret le mateacuteriel Cest agrave dire que quand un utilisateur tape une commande au niveau dun logiciel (ouapplication) le logiciel interpregravete la commande la transmet au systegraveme dexploitation qui la transmetau mateacuteriel dans un format compreacutehensible
Un exemple vaut mieux quun grand discours quand vous ouvrez un fichier dans votre traitement detexte favori vous avez appuyeacute sur licocircne qui va bien votre traitement de texte interpregravete lactiondouverture de fichier et transmet lordre au systegraveme dexploitation ce dernier va alors commander aucontrocircleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent aufichier en question Normalement un logiciel ne devrait jamais discuter avec le mateacuteriel le systegravemedexploitation se place entre les deux pour transmettre et eacuteventuellement rejeter des commandesillicites
33 EnvironnementUn environnement est dit fenecirctreacute quand il y a possibiliteacute de pouvoir faire apparaicirctre plusieurs fenecirctresil va de pair avec lutilisation dune souris Windows est par exemple un exemple denvironnementfenecirctreacute On parle aussi denvironnement graphique
A lopposeacute on trouve aussi des environnements textuels non graphiques DOS en est un bel exemple
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
2 PreacuteambuleUNIX est un systegraveme dexploitation dune richesse incroyable il serait bien preacutetentieux dessayer enquelques pages den faire le tour Cest pourquoi je me suis fixeacute comme objectif de ne preacutesenter queles commandes les plus courantes qui permettront agrave un utilisateur de se deacutebrouiller avec nimportequel systegraveme UNIX de HP-UX agrave Solaris en passant par Linux sans oublier les autres
Ce document sadresse agrave toute personne ayant une petite expeacuterience dun systegraveme informatique ilsadresse aussi agrave ceux connaissant deacutejagrave UNIX qui voudraient approfondir certaines notions
Le but de ce document nest pas de traiter de ladministration dun systegraveme UNIX
Next Previous Contents
Next Previous Contents
3 Principes de base UNIX
31 Les processus ou processTout logiciel est agrave la base un programme constitueacute dun ensemble de lignes de commandes eacutecritesdans un langage particulier appeleacute langage de programmation Cest uniquement quand on exeacutecute lelogiciel que le programme va reacutealiser la tacircche pour laquelle il a eacuteteacute eacutecrit dans ce cas lagrave on dira quon aaffaire agrave un processus ou process En dautres termes le programme est reacutesolument statique cest deslignes de code alors que le process est dynamique cest le programme qui sexeacutecute
Par exemple le logiciel Winword sous Windows est en fait un becircte programme eacutecrit dans un langageabscons qui a eacuteteacute ensuite compileacute pour le rendre compreacutehensible par la machine ce nest uniquementque quand vous le lancez que vous avez alors affaire au process Winword
32 Deacutefinition dun systegraveme dexploitationUn systegraveme dexploitation est un ensemble de programmes chargeacute de faire linterface entre lutilisateuret le mateacuteriel Cest agrave dire que quand un utilisateur tape une commande au niveau dun logiciel (ouapplication) le logiciel interpregravete la commande la transmet au systegraveme dexploitation qui la transmetau mateacuteriel dans un format compreacutehensible
Un exemple vaut mieux quun grand discours quand vous ouvrez un fichier dans votre traitement detexte favori vous avez appuyeacute sur licocircne qui va bien votre traitement de texte interpregravete lactiondouverture de fichier et transmet lordre au systegraveme dexploitation ce dernier va alors commander aucontrocircleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent aufichier en question Normalement un logiciel ne devrait jamais discuter avec le mateacuteriel le systegravemedexploitation se place entre les deux pour transmettre et eacuteventuellement rejeter des commandesillicites
33 EnvironnementUn environnement est dit fenecirctreacute quand il y a possibiliteacute de pouvoir faire apparaicirctre plusieurs fenecirctresil va de pair avec lutilisation dune souris Windows est par exemple un exemple denvironnementfenecirctreacute On parle aussi denvironnement graphique
A lopposeacute on trouve aussi des environnements textuels non graphiques DOS en est un bel exemple
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
3 Principes de base UNIX
31 Les processus ou processTout logiciel est agrave la base un programme constitueacute dun ensemble de lignes de commandes eacutecritesdans un langage particulier appeleacute langage de programmation Cest uniquement quand on exeacutecute lelogiciel que le programme va reacutealiser la tacircche pour laquelle il a eacuteteacute eacutecrit dans ce cas lagrave on dira quon aaffaire agrave un processus ou process En dautres termes le programme est reacutesolument statique cest deslignes de code alors que le process est dynamique cest le programme qui sexeacutecute
Par exemple le logiciel Winword sous Windows est en fait un becircte programme eacutecrit dans un langageabscons qui a eacuteteacute ensuite compileacute pour le rendre compreacutehensible par la machine ce nest uniquementque quand vous le lancez que vous avez alors affaire au process Winword
32 Deacutefinition dun systegraveme dexploitationUn systegraveme dexploitation est un ensemble de programmes chargeacute de faire linterface entre lutilisateuret le mateacuteriel Cest agrave dire que quand un utilisateur tape une commande au niveau dun logiciel (ouapplication) le logiciel interpregravete la commande la transmet au systegraveme dexploitation qui la transmetau mateacuteriel dans un format compreacutehensible
Un exemple vaut mieux quun grand discours quand vous ouvrez un fichier dans votre traitement detexte favori vous avez appuyeacute sur licocircne qui va bien votre traitement de texte interpregravete lactiondouverture de fichier et transmet lordre au systegraveme dexploitation ce dernier va alors commander aucontrocircleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent aufichier en question Normalement un logiciel ne devrait jamais discuter avec le mateacuteriel le systegravemedexploitation se place entre les deux pour transmettre et eacuteventuellement rejeter des commandesillicites
33 EnvironnementUn environnement est dit fenecirctreacute quand il y a possibiliteacute de pouvoir faire apparaicirctre plusieurs fenecirctresil va de pair avec lutilisation dune souris Windows est par exemple un exemple denvironnementfenecirctreacute On parle aussi denvironnement graphique
A lopposeacute on trouve aussi des environnements textuels non graphiques DOS en est un bel exemple
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
4 Preacutesentation du systegraveme UNIX
41 Les utilisateurs UNIXSur un systegraveme UNIX on trouve deux types de personnes celle qui va utiliser le systegraveme dans le butde produire quelque chose le systegraveme UNIX est pour elle un moyen un outil Cette personne estlutilisateur UNIX on peut trouver dans cette cateacutegorie le programmeur lutilisateur de base dedonneacutees etc La deuxiegraveme cateacutegorie de personnes est chargeacute de linstallation de la configuration et dela bonne marche du systegraveme UNIX ce sont les administrateurs systegravemes UNIX
Sur un systegraveme UNIX les utilisateurs UNIX ont des droits limiteacutes cest agrave dire que certainescommandes leurs sont interdites et ils nont pas accegraves agrave certaines parties du systegraveme Lesadministrateurs systegravemes ont par contre tous les droits sur le systegraveme
Geacuteneacuteralement sur un systegraveme UNIX on limite volontairement le nombre dadministrateur (appeleacuteROOT ou super utilisateur)
42 Les fonctions principalesUNIX est un systegraveme dexploitation dont voici les tacircches principales
Partage des ressources eacutequitables
UNIX veille agrave ce que toutes les ressources de lordinateur (imprimante meacutemoire ) soient partageacuteeseacutequitablement entre tous les processus
Par exemple si vous travaillez sur une appli du genre base de donneacutees vous lancez une requecircte(commande dans le langage base de donneacutees) coucircteuse en temps pour patienter rien ne vous empecircchede vous lancer un Doom de derriegravere les fagots Vous vous retrouvez donc avec deux process lanceacutes enmecircme temps cest le systegraveme dexploitation qui est chargeacute de faire en sorte que les deux processpuissent utiliser les ressources de maniegravere eacutequitable et que le deuxiegraveme process lanceacute nattende pas laterminaison du premier pour se lancer
Le fait de pouvoir exeacutecuter plusieurs process ou tacircches en mecircme temps en parallegravele est appeleacutemultitacircches UNIX est multitacircches
Interface avec le mateacuteriel
UNIX par deacutefinition des systegravemes dexploitation fait en sorte quaucun process accegravede directement agraveune ressource mateacuteriel (disque dur lecteur de disquette) Pour acceacuteder agrave ces ressources on passe parlintermeacutediaire de fichiers speacuteciaux un fichier speacutecial est vu pour un utilisateur comme un fichierclassique pour eacutecrire sur une disquette dans le lecteur de disquette on na quagrave eacutecrire dans le fichierspeacutecial du lecteur de disquette De mecircme pour lire dans un disque dur on va lire le fichier speacutecial dudisque dur
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Gestion de la meacutemoire
Il existe deux types de meacutemoire la meacutemoire volatile et la meacutemoire statique quand on eacuteteint etrallume lordinateur toutes les donneacutees preacutesentes dans la premiegravere ont disparu et les donneacutees dans laseconde sont toujours preacutesentes Concregravetement la meacutemoire volatile se trouve dans la RAM lameacutemoire statique dans le disque dur Dans le vocabulaire Unix quand on parle de meacutemoire on sousentend meacutemoire volatile ou RAM cest la convention qui sera adopteacutee pour la suite du cours
Tout programme qui sexeacutecute ou process a besoin de meacutemoire pour y stocker notamment lesdonneacutees qui manipulent Malheureusement lordinateur dispose geacuteneacuteralement dune quantiteacute demeacutemoire limiteacutee et non extensible UNIX doit donc faire en sorte que la meacutemoire soit bien partageacuteeentre tous les process un process ne doit pas saccaparer toute la meacutemoire sans quoi les autres processne pourraient plus fonctionner
La meacutemoire est vue comme une ressource mateacuterielle UNIX doit donc veacuterifier quaucun processaccegravede agrave la meacutemoire directement ou ne se reacuteserve une zone de la meacutemoire
Gestion des fichiers
UNIX fournit les outils neacutecessaires pour stocker les donneacutees et pour pouvoir les reacutecupeacuterer rapidementet facilement Il fournit les outils pour pouvoir visualiser lensemble des fichiers de maniegravere simpleCes fichiers se trouvent sur le disque dur on nomme cela un systegraveme de fichiers ou File System enanglais
UNIX fournit en outre un meacutecanisme de protection des fichiers Plusieurs utilisateurs peuventtravailler en mecircme temps sur la mecircme machine cest la notion de multi-utilisateurs Chaque utilisateurdu systegraveme dispose de ses fichiers UNIX lui donne le moyen de proteacuteger ses fichiers et daccorder ledroit ou non agrave dautres utilisateurs dacceacuteder agrave ses fichiers
43 Structure du systegraveme UNIX
Applications | ----------------------------------------------------------- | Appels systegraveme UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Systegraveme de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver peacuteripheacuterique | | --------------------------- | | ------------------------------------------------------------- | Controcircle mateacuteriel |
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
------------------------------------------------------------ | ------------------------------ | Mateacuteriel | ------------------------------
Concregravetement le systegraveme dexploitation est lui aussi un ensemble de programme et de sousprogrammes regroupeacutes dans ce quon appelle un noyau (kernel en anglais)
On a vu auparavant que les process ne pouvaient pas acceacuteder directement aux ressources mateacuteriels enfait les process passent par le noyau pour y acceacuteder pour cela ils disposent dun ensemble decommandes appeleacutees appels systegraveme UNIX
Ces appels systegravemes commandent deux composantes principales du noyau le gestionnaire deprocessus et le systegraveme de gestion de fichiers Le premier a pour rocircle de faire en sorte que les processsexeacutecutent et accegravedent agrave la meacutemoire de maniegravere eacutequitable on le nomme aussi scheduler Le deuxiegravemea pour rocircle la gestion du systegraveme de fichiers notamment pour ce qui concerne les droits daccegraves
Ce sont ces deux derniers composants du noyau qui accegravedent directement au mateacuteriel
44 Le shellPour faire marcher lordinateur lutilisateur dispose des logiciels ou dun utilitaire qui lui permet lasaisie directe de commandes On appelle cet utilitaire le shell (coquille en franccedilais) Son rocircle estdinterpreacuteter les commandes de lutilisateur avant transmission au noyau cest pourquoi on parle aussidinterpreacuteteur de commandes On trouve leacutequivalent sous DOS qui peut ecirctre consideacutereacute comme unshell
Il existe plusieurs types de shell ils se diffeacuterencient par la syntaxe et la richesse des commandes Leplus commun est le Bourne-Shell on trouve aussi le C-Shell qui sapparente au langage deprogrammation C le Korn Shell le Posix Shell et sous Linux le bash-shell
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
5 Ouverture et fermeture de session
51 Ouverture de sessionAvant de tenter une connexion il faut dabord vous assurer que vous ayez eacuteteacute deacuteclareacute sur la machinecest agrave dire que vous posseacutediez un compte utilisateur caracteacuteriseacute par un nom ou login et un mot depasse associeacute
A la mise sous tension apparaissent agrave leacutecran toute une liste de termes plus ou moins barbares vouspouvez ignorer tout ccedila Au bout dun certain temps apparaicirct enfin le message login avec un curseurqui clignote Le systegraveme attend que vous rentriez votre login Rentrez votre login Puis tapez Enterapparaicirct alors le message Password tapez votre mot de passe vous pouvez vous rendre compte quevotre mot de passe napparaicirct pas en clair agrave leacutecran il est remplaceacute pour des raisons de seacutecuriteacuteeacutevidente par des
A la mise sous tension vous pouvez aussi disposer dune interface graphique de connexion au lieudavoir un simple login avec le curseur qui clignote vous avez une fenecirctre ou banniegravere qui vousinvite agrave saisir votre login et votre mot de passe Cest notamment le cas pour la configuration pardeacutefaut de la Mandrake 60 mais aussi pour les versions reacutecentes de HP-UX et de Solaris
Une fois le login et le mot de passe saisi deux possibliteacutes peuvent soffrir agrave vous vous pouvezretrouver un eacutecran noir avec tout simplement un caractegravere du genre $ ou gt (appeleacute prompt) suivi ducurseur qui clignote apparaicirct Vous ecirctes dans un shell precirct agrave taper des commandes Par exemple sousLinux le prompt par deacutefaut est le suivant
[loginlocalhost login]$
Ou alors vous pouvez trouver un environnement fenecirctreacute avec utilisation de la souris ougrave il vous serapossible de lancer un shell pour pouvoir taper des commandes UNIX
52 Changement de passwordEn vous deacuteclarant sur la machine on vous a imposeacute un mot de passe vous pouvez le changer pourcela vous disposez de la commande passwd Certains UNIX font en sorte que vous ne puissiez passaisir un mot de passe simple il faudra mettre au moins 6 caractegraveres avec au moins un voie deuxcaractegravere non alphabeacutetique
Rappelons que quand vous saisissez votre mot de passe il ne paraicirct pas en clair aussi par preacutecautionle systegraveme vous demande de le saisir deux fois
ATTENTION Evitez de vous servir du paveacute numeacuterique car dun poste agrave un autre il peut y avoir desgrosses diffeacuterences agrave ce niveau lagrave
Si vous avez oublieacute votre mot de passe vous devez vous adresseragrave ladministrateur du systegraveme (root)qui est le seul habiliteacute agrave vous deacutebloquer
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
gtpasswd Old passwd Setting password for user olivier New password Reenter password gt
ATTENTION Sur certains systegravemes on ne doit pas taper passwd mais yppasswd demandez le agravevotre administrateur Pour informations on utilise yppasswd pour les client NIS
53 Fermeture de sessionQuand on a fini dutiliser le systegraveme on doit se deacuteconnecter ou fermer la session Si vous ecirctes dans unenvironnement non graphique il vous suffit au prompt de taper logout Vous vous retrouvez alorsavec 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 lemecircme effet
Vous devez veiller agrave vous deacuteconnecter quand vous nutilisez plus le systegraveme pour des raisons deseacutecuriteacute mais aussi tout simplement pour libeacuterer le poste de travail
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
6 Commandes UNIX et redirection
61 Syntaxe dune commandeLa syntaxe standard dune commande UNIX est la suivante
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande le nombre des arguments qui suivent deacutepend aussi de la commande parexemple la commande
sort -r mon-fichier
sort (trier) permet de trier un fichier loption r (reverse) permet de trier en sens inverse le fichier Largument unique de lacommande est le nom du fichier Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un reacutepertoire (option R) vers un autre reacutepertoire on a ici deux arguments
On peut coupler deux options ps -ef avec cette commande on a loption e et f (voir plus loin la signification de lacommande)
A noter que pour introduire une option on met - ce nest pas neacutecessaire pour certaines commandes (tar par exemple)
62 Les entreacutees sortiesIl y a trois sortes dentreacutees sorties ou flux de donneacutees le premier est lentreacutee standard cest agrave dire ce que vous saisissez auclavier le deuxiegraveme est la sortie standard cest agrave dire leacutecran plus preacuteciseacutement le shell et le troisiegraveme est la sortie standard desmessages derreurs conseacutecutifs agrave une commande qui est geacuteneacuteralement leacutecran
Chacun de ces flux de donneacutees est identifieacute par un numeacutero descripteur 0 pour lentreacutee standard 1 pour la sortie standard et 2pour la sortie standard des messages derreur
63 Redirection des entreacutees sortiesQuand vous lancez une commande dans un shell il peut y avoir du texte qui saffiche suite agrave lexeacutecution de la commande cetexte par deacutefaut saffiche dans le shell On dit que le shell (ou terminal) est la sortie standard cest lagrave ougrave va safficher tous lescommentaires dune commande
Vous pouvez changer ce comportement en tapant
ma-commande gt mon-fichier
Tous les commentaires les sorties de la commande ne vont pas apparaicirctre au shell mais ecirctre eacutecrits dans un fichier En dautrestermes la standard standard est redirigeacute vers un fichier Cela peut ecirctre utile si vous avez une commande qui geacutenegravereeacutenormeacutement de commentaire et que vous voulez les reacutecupeacuterer pour les exploiter par la suite agrave la terminaison de lacommande
La redirection gt a pour effet de creacuteer le fichier mon-fichier si ce fichier existait deacutejagrave il est tout simplement eacutecraseacute (supprimeacuteet recreacuteeacute) ce qui peut ecirctre gecircnant si vous ne voulez pas perdre ce quil contient vous disposez donc de la redirection gtgt Entapant
ma-commande gtgt mon-fichier
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Le fichier mon-fichier nest pas eacutecraseacute mais la sortie standard (les commentaires de la commande) sont ajouteacutes en fin defichier agrave la suite du texte qui eacutetait deacutejagrave dans le fichier
Les redirections marchent dans les deux sens par exemple en tapant la commande suivante
sort lt mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie) celle-ci va donc trier le contenu du fichier pardeacutefaut le reacutesultat sort sur la sortie standard cest agrave dire agrave leacutecran plus preacuteciseacutement sur le shell Avec
sort lt mon-fichier gt fichier-trie
On a vu que sort lt mon-fichier avait pour effet de trier le fichier mon-fichier lexpression gtfichier-trie a pour effetdenvoyer le reacutesultat (le fichier trieacute) dans un fichier fichier-trie le reacutesultat napparaicirct plus agrave leacutecran mais est sauvegardeacute dansun fichier
Avec la redirection ltlt la commande va lire les caractegraveres jusquagrave la rencontre dune certaine chaicircne de caractegraveres Exempleavec la commande cat (catalogue permet deacutediter le contenu dun fichier)
gtcat ltlt fin je tape du texte jusquagrave la chaicircne de caractegravere fin gt
En tapant la commande vous revenez agrave la ligne mais perdez le prompt cat va lire (et eacutediter) les caractegraveres que vous saisissezjusquagrave quil rencontre la chaicircne fin agrave ce moment lagrave le prompt apparaicirct agrave nouveau Si vous voulez creacuteer un fichier avec un peude texte agrave linteacuterieur vous ferez
gtcat ltlt fin gt mon-fichier je tape du texte qui sera sauvegardeacute dans mon-fichier pourterminer le texte fin gt
Le texte que vous venez de saisir se trouve donc dans mon-fichier
Avec la commande
gtfichier-vide
Vous creacuteez un fichier vide fichier-vide
64 Redirection des erreursPar deacutefaut les messages derreur saffichent agrave leacutecran (sortie standard par deacutefaut) vous pouvez modifier ce comportement Onrappelle que la sortie derreur a pour code 2 Vous pouvez sauvegarder dans un fichier vos messages derreur pour analyseulteacuterieure en tapant
cat mon-fichier 2gtfichier-erreur
Si on rencontre une erreur pendant lexeacutecutionde la commande deacutedition cat de mon-fichier (absence du fichier par exemple)le message derreur sera sauvegardeacute dans le fichier fichier-erreur
En tapant
sort mon-fichier gt fichier-trie
Vous redirigez le reacutesultat de la commande sort mon-fichier vers le fichierfichier-trie la sortie standard (descripteur 1) nestdonc plus leacutecran (plus preacuteciseacutement le shell ou terminal) mais le fichier fichier-trie
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Par deacutefaut les messages derreur saffichent dans le shell vous pouvez faire en sorte quils saffichent dans le fichierfichier-trie en tapant
sort mon-fichier gt fichier-trie 2gtamp1
Avec la syntaxe gtamp vous indiquez que les messages derreurs seront redirigeacutes vers la sortie standard qui est le fichierfichier-trie
65 Les pipesUn pipe (en franccedilais tube de communication) permet de rediriger la sortie dune commande vers une autre En dautres termespour rediriger les reacutesultats (la sortie) dune commande on a vu quon pouvait taper
commande1 gt sortie1
On redirige cette sortie vers une autre commande ccedila devient donc une entreacutee pour cette derniegravere commande pour cela voustapez
commande2 lt sortie1
En fait la syntaxe commande1|commande2 (| eacutetant le symbole de pipe) est totalement eacutequivalente aux deux lignes decommandes preacuteceacutedentes
Exemple ls permet la visualisation de fichiers en tapant ls on obtient
fichier1 fichier2 totofichier
grep permet la recherche dune chaicircne de caractegravere dans une liste donneacutee en tapant grep toto ( signifie tous les fichiersgrep recherche la chaicircne de caractegravere toto dans les noms de tous les fichiers) on obtient
totofichier
On a le mecircme reacutesultat avec le | en tapant
ls | grep toto
La premiegravere commande aura pour effet de lister le nom des fichiers se trouvant agrave lendroit ougrave lon a tapeacute la commande la sortiestandard (le reacutesultat de la commande) est donc une liste de nom elle est redirigeacutee vers la commande grep qui va y chercherune chaicircne de caractegravere contenant toto Le reacutesultat est donc aussi
totofichier
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
7 Le systegraveme de fichiers
71 Les types de fichierIl existe trois types de fichier le fichier quon pourrait qualifieacute de normal le reacutepertoire ou catalogue(en anglais directory) et les fichiers speacuteciaux
Un fichier normal contient des donneacutees ce fichier peut ecirctre lisible cest agrave dire contenir desinformations compreacutehensibles eacutecrites en claire ce fichier peut ecirctre aussi totalement illisibleConcregravetement un fichier texte qui comme son nom lindique contient du texte est lisible alors quunexeacutecutable ne lest pas si vous cherchez agrave leacutediter vous ne verrez rien de compreacutehensible dans cedernier cas on dit aussi quon a affaire agrave un fichier binaire
Un reacutepertoire peut ecirctre consideacutereacute comme un classeur dans lequel on met des fichiers cest un eacuteleacutementdorganisation de lespace du disque dur Les fichiers ayant les mecircmes affiniteacutes peuvent ranger sousun mecircme reacutepertoire de mecircme on peut trouver des sous reacutepertoires dans un reacutepertoire qui eux mecircmescontiennent des fichiers et dautres sous reacutepertoires Ce systegraveme hieacuterarchique fait penser agrave un arbredougrave le terme darborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Il existe un ancecirctre agrave tous les reacutepertoires cest la racine ou le (slash) sur le sheacutema Tout reacutepertoirequi nest pas la racine elle mecircme possegravede un reacutepertoire qui le contient (appeleacute reacutepertoire pegravere) et peutposseacuteder des sous-reacutepertoires (reacutepertoires fils) et des fichiers
Quand on creacutee un reacutepertoire le systegraveme creacutee automatiquement deux fichiers sous le reacutepertoire lepremier est un qui repreacutesente le reacutepertoire lui-mecircme le deuxiegraveme est un qui repreacutesente lereacutepertoire pegravere
Le troisiegraveme type de fichier est le fichier dit speacutecial quon a abordeacute briegravevement auparavant rappelonsque lon doit passer par eux si on veut dialoguer avec un peacuteripheacuterique mateacuteriel
72 Atteindre un fichier
Nommer un fichier
Tout fichier quelle que soit son type doit pouvoir ecirctre identifieacute cest pourquoi on les nomme avec unnom en rapport avec le fichier Ce nom comporte au maximum 255 caractegraveres sachant quil existe unedistinction entre les lettres minuscules et majuscules et que certains caractegraveres sont interdits ce sontpar exemple le les parenthegraveses () lespace ou
Le chemin daccegraves
Ce fichier est rangeacute dans un reacutepertoire du systegraveme de fichiers on doit pouvoir y acceacuteder en suivant unchemin dans larborescence
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
| |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple) on part de la racine () onindique le premier reacutepertoire traverseacute puis les autres en seacuteparant chacun des reacutepertoires dun Ainsidonc pour notre fichier le chemin daccegraves est
homeolivierlinux
En indiquant homeolivierlinuxHOW-TOppp le fichier est parfaitement identifieacute en effet on saitougrave le trouver puisquon a son chemin et le nom du fichier HOW-TOppp
A noter quon peut avoir des fichiers portant le mecircme nom dans le systegraveme de fichiers deacutes lors quilsnont pas le mecircme chemin et donc quils ne se trouvent pas au mecircme endroit
On dit que le chemin du fichier est absolu parce quagrave la vue de son chemin daccegraves en partant de laracine on sait exactement ougrave se trouve le fichier
Un chemin est dit relatif quand il nest pas neacutecessaire dindiquer le chemin complet de lendroit ougraveon se trouve dans larborescence il suffit de rajouter le chemin par rapport agrave ce mecircme endroit
En admettant quon se trouve sous homeolivier si lon veut acceacuteder agrave notre fichier HOW-TOppp lechemin relatif au reacutepertoire courant est linux le point repreacutesentant le reacutepertoire courant comme onla vu auparavant Ce qui donne en chemin absolu homeolivierlinux
Les commandes
La commande pour se deacuteplacer dans larborescence est cd Si lon est au niveau de la racine pour alleragrave notre reacutepertoire homeolivierlinux on doit taper
cd homeolivierlinux
On a tapeacute un chemin absolu on se trouve maintenant sous homeolivierlinux si lon veut aller soushomeolivier on doit taper
cd
En effet repreacutesente le reacutepertoire pegravere homeolivier eacutetant le reacutepertoire pegravere de homeoliverlinuxen tapant cette commande on se retrouve agrave lendroit deacutesireacute
Si vous voulez connaicirctre ou vous vous trouvez vous disposez de la commande pwd ainsi si voustapez pwd juste apregraves la seacutequence de commandes preacuteceacutedentes vous obtenez
homeolivier
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
73 Visualiser les fichiersLa commande ls permet de visualiser le contenu de reacutepertoires vous voyez les noms des fichierspreacutesents sous le reacutepertoire
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| -| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous homeolivierlinux (commande cd homeolivierlinux) si vous voulez visualiserles fichiers contenus vous tapez ls vous obtenez
HOW-TOppp Readme
La commande ls peut ecirctre utiliseacutee avec des options si preacuteceacutedemment vous aviez tapez ls -l vousauriez obtenu
-rw-rw-rw- 1 olivier users 17356 Dec 3 1211 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 0221 Readme
La signification des champs est la suivante
-rw-rw-rw- type de fichier et ses caracteacuteristiques de protection
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
1 le nombre de lien
olivier le nom du proprieacutetaire
users le groupe dutilisateurs auquel appartient le proprieacutetaire
17356 la taille du fichier (en octets)
Dec 3 le jour de derniegravere modification
12 11 lheure de derniegravere modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement dun fichier vous taperez
ls -l nom-du-fichier
A noter que sur beaucoup de systegraveme la commande ll est eacutequivalent agrave ls -l
74 Commandes de gestion des reacutepertoiresPour geacuterer les reacutepertoires vous disposez des commandes suivantes
mkdir nom-de-reacutepertoire Creacuteation dun reacutepertoire
rmdir nom-de-reacutepertoire Suppression dun reacutepertoire vide
mv reacutepertoire reacutepertoire-daccueil deacuteplacement dun reacutepertoire
mv reacutepertoire nouveau-nom Changement de nom dun reacutepertoire
75 Commandes de gestion des fichiersPour geacuterer les fichiers vous disposez des commandes suivantes
touch mon-fichier creacuteation dun fichier vide
more mon-fichier visualisation dun fichier page agrave page
rm mon-fichier suppression dun fichier
mv mon-fichier reacutepertoire daccueil deacuteplacement dun fichier
mv mon-fichier nouveau-nom changement de nom dun fichier
cp nom-fichier reacutepertoire-daccueilautre-nom copie de fichier
file mon-fichier pour savoir si on a un fichier binaire (exeacutecutable) ou un fichier texte Onobtient pour un fichier texte comme sortie mon-fichier ascii text
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
76 Les liensDans larborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peuparticuliegravere
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le reacutepertoire bin endautres termes Mail est un lien vers le fichier mail
Un lien est creacuteeacute pour pouvoir accegraveder au mecircme fichier agrave diffeacuterents endroits de larborescence SousWindows on retrouve agrave peu pregraves leacutequivalent avec la notion de raccourci
La commande ln (pour link) sert agrave creacuteer des liens Par exemple
ln -s homeolivierlinuxreadme tmplisezmoi
Le fichier source est readme sous homeolivierlinux le lien creacuteeacute est lisezmoi sous tmp En faisantun man ln vous deacutecouvrirez quil existe des liens hards et softs sans rentrer dans les deacutetails je vousconseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards nepermettents pas de visualiser directement le lien (la petite flegraveche -gt quand on tape ls -l)
77 Les inodesSous un systegraveme UNIX un fichier quel que soit son type est identifieacute par un numeacutero appeleacute numeacuterodinode quon pourrait traduire en franccedilais par i-noeud Ainsi derriegravere la faccedilade du shell unreacutepertoire nest quun fichier identifieacute aussi par un inode contenant une liste dinode repreacutesentantchacun un fichier
La diffeacuterence entre un lien hard et symbolique se trouve au niveau de linode un lien hard na pasdinode propre il a linode du fichier vers lequel il pointe Par contre un lien symbolique possegravede sapropre inode A noter que vous ne pouvez pas creacuteer de liens hards entre deux partitions de disquediffeacuterente vous navez pas cette contrainte avec les liens symboliques
Pour connaicirctre le numeacutero dinode dun fichier vous pouvez taper
ls -i mon-fichier
78 Les meacutetacaractegraveresSi vous ecirctes agrave la recherche dun fichier qui commence par la lettre a en faisant ls vous voudriez voirque les fichiers commenccedilant par a De mecircme si vous voulez appliquer une commande agrave certainsfichiers mais pas agrave dautres Cest le but des meacutetacaractegraveres ils vous permettent de faire une seacutelectionde fichiers suivant certains critegraveres
Le meacutetacaractegravere le plus freacutequemment utiliseacute est il remplace une chaicircne de longueur non deacutefinie
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Avec le critegravere vous seacutelectionnez tous les fichiers Par le critegravere a vous seacutelectionnez tous lesfichiers commenccedilant par a
ls a
Va lister que les fichiers commenccedilant par a De mecircme a opegravere une seacutelection des noms de fichiers seterminant par a Le critegravere a va faire une seacutelection sur les noms de fichiers qui ont le caractegravere adans leur nom quelque soit sa place
Le meacutetacaractegravere remplace un caractegravere unique Avec le critegravere a vous seacutelectionnez les fichiersdont le nom commence par a mais qui contiennent au total trois caractegraveres exactement
Les meacutetacaractegraveres [ ] repreacutesente une seacuterie de caractegraveres Le critegravere [aA] permet la seacutelection desfichiers dont le nom commence par un a ou A (minuscule ou majuscule) Le critegravere [a-d] fait laseacutelection des fichiers dont le nom commence par a jusquagrave d Le critegravere [de] fait la seacutelection desfichiers dont le nom se termine par d ou e
Vous voyez donc que les caractegraveres [] et sont des caractegraveres speacuteciaux quon ne peut utilisercomme des simples caractegraveres parce quils sont interpreacuteteacutes par le shell comme des meacutetacaractegraveresVous pouvez cependant inhiber leur fonctionnement En tapant
ls mon-fichier
Le shell va interpreacuteter le comme un meacutetacaractegravere et afficher tous les fichiers qui commencent parmon-fichier et qui se termine par un caractegravere unique quelconque Si vous ne voulez pas que le soitinterpreacuteteacute vous devez taper
ls mon-fichier
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
8 Les droits daccegraves
81 Identification de lutilisateurOn a vu auparavant que pour pouvoir se connecter sur une machine on doit ecirctre deacuteclareacute sur la machine Toututilisateur appartient agrave un groupe concregravetement dans une universiteacute par exemple vous aurez les professeursdans le groupe enseignant et les eacutelegraveves dans le groupe eacutelegraveve
Chaque utilisateur est identifieacute par un numeacutero unique UID (User identification) de mecircme chaque groupe estidentifieacute par un numeacutero unique GID (Group identification)
Vous pouvez voir votre UID et GID en eacuteditant le fichier etcpasswd cest respectivement troisiegraveme etquatriegraveme champ apregraves le nom (le login) et le mot de passe crypteacute
82 Deacutefinition des droits dutilisateur
Cas dun fichier classique
Avec UNIX les fichiers beacuteneacuteficient dune protection en lecture eacutecriture et exeacutecution cest agrave dire vous pouvezchoisir si vous voulez que vos fichiers soient lisibles etou modifiables par dautres vous pouvez empecirccherque dautres utilisateurs lancent vos exeacutecutables Cest le principe des droits daccegraves
Nous avons vu quen tapant ls -l le premier champ correspondait au droit daccegraves on avait une sortie de ce type
-rwxrw-r-- 1 olivier users 34568 Dec 3 14 34 mon-fichier
La signification des lettres rwx et la suivante
r (read) on peut lire le fichier w (write) on peut modifier le fichier x (exeacutecutable) on peut exeacutecuter le fichier(cest donc un exeacutecutable) - aucun droit autoriseacute
Le champ -rwxrw-r-- regroupe les droits du proprieacutetaire du fichier du groupe auquel appartient le proprieacutetaireet les autres utilisateurs
- on a affaire agrave un fichier classique (cest agrave ni un reacutepertoire ni un fichier speacutecial) rwx droits sur le fichier duproprieacutetaire rw- droits sur le fichier du groupe auquel appartient le proprieacutetaire (users) r-- droits sur le fichierdes autres utilisateurs (ceux nappartenant au groupe users)
Par exemple pour notre fichier le proprieacutetaire olivier a des droits en eacutecriture lecture et exeacutecution le groupe aun droit en lecture et eacutecriture mais aucun droit en exeacutecution les autres utilisateurs ont uniquement le droit enlecture du fichier
Pour info le 1 apregraves les droits signifie que le fichier mon-fichier na aucun lien qui pointe vers lui si on avaiteu 2 cela signifiait que quelque part dans larborescence il y a un lien qui pointe vers lui ce nombresincreacutementant avec le nombre de lien
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Cas dun reacutepertoire
Pour un reacutepertoire le x nest pas un droit en exeacutecution mais un droit daccegraves au reacutepertoire sans ce droit on nepeut pas acceacuteder au reacutepertoire et voir ce quil y a dedans
En tapant ls -l sur un reacutepertoire vous obtenez
drwxr-x--- 1 olivier users 13242 Dec 2 13 14 mon-reacutepertoire
d signifie quon a affaire agrave un reacutepertoire rwx sont les droits du proprieacutetaire olivier qui est autoriseacute en lectureeacutecriture et droit daccegraves au reacutepertoirer-x droits du groupe users autoriseacute en lecture droit daccegraves au reacutepertoirepas de droit en eacutecriture --- droits des autres utilisateurs aucun droit dans le cas preacutesent
Cas dun lien
Pour un lien la signification est similaire agrave celle dun fichier classique agrave la diffeacuterence que vous avez un l agrave laplace du - en tout deacutebut de ligne
lrwxrwxrwx 1 root root 14 Aug 1 0158 Mail -gt binmail
83 Commandes associeacutees
Changer les droits chmod
La commande chmod permet de modifier les droits daccegraves dun fichier (ou reacutepertoire) Pour pouvoir lutilisersur un fichier ou un reacutepertoire il faut en ecirctre le proprieacutetaire La syntaxe est la suivante
chmod utilisateur opeacuteration droit daccegraves u proprieacutetaire (user) +ajout dun droit r droit en lecture g groupe (group) -suppression dun droit w droit en eacutecriture o les autres (other) =ne rien faire x
droit en exeacutecution pour un fichier droit daccegraves pour un reacutepertoire
Exemple vous voulez donner un droit en eacutecriture pour le groupe du fichier mon-fichier
chmod g+w mon-fichier
Pour supprimer le droit daccegraves du reacutepertoire mon-reacutepertoire aux autres utilisateurs (autres que proprieacutetaire etutilisateurs du groupe)
chmod o-x mon-repertoire
En tapant
chmod u+xg-w mon-fichier
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Vous ajoutez le droit en exeacutecution pour le proprieacutetaire et enlevez le droit en eacutecriture pour le groupe du fichier
Vous avez une autre meacutethode pour vous servir de la commande chmod On considegravere que r=4 w=2 et x=1 sivous avez un fichier avec les droits suivants -rw-rw-rw- pour les droits utilisateurs vous avez(r=)4+(w=)2=6 de mecircme pour le groupe et les autres Donc -rw-rw-rw- est eacutequivalent agrave 666 En suivant lamecircme regravegle rwxrw-r-- est eacutequivalent agrave 754
Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper
chmod 444 mon-fichier
On appelle ce systegraveme de notation la notation octale
Changer les droits par deacutefaut umask
Quand vous creacuteer un fichier par exemple avec la commande touch ce fichier par deacutefaut possegravede certainsdroits Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un reacutepertoire (-rwxrwxrwx) ce sont les droitsmaximum Vous pouvez faire en sorte de changer ces paramegravetres par deacutefaut La commande umask est lagrave pourccedila
Pour un fichier
Si vous tapez umask 022 vous partez des droits maximum 666 et vous retranchez 022 on obtient donc 644par deacutefaut 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 422par deacutefaut les fichiers auront comme droit 422 (-rw--w--w-)
Pour un reacutepertoire
Si vous tapez umask 022 vous partez des droits maximum 777 et vous retranchez 022 on obtient donc 755par deacutefaut 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 533par deacutefaut les fichiers auront comme droit 422 (-rwx-wx-wx)
umask nest utilisatable que si on est proprieacutetaire du fichier
Changer le proprieacutetaire et le groupe
Vous pouvez donner un fichier vous appartenant agrave un autre utilisateur cest agrave dire quil deviendraproprieacutetaire du fichier et que vous naurez plus que les droits que le nouveau proprieacutetaire voudra bien vousdonner sur le fichier
chown nouveau-proprieacutetaire nom-fichier
Dans le mecircme ordre dideacutee vous pouvez changer le groupe
chgrp nouveau-groupe nom-fichier
Ces deux commandes ne sont utilisables que si on est proprieacutetaire du fichier
NOTA Sur certains UNIX suivant leur configuration on peut interdire lusage de ces commandes pour desraisons de seacutecuriteacute
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
9 Gestion des processus
91 Les caracteacuteristiques dun processusOn a vu auparavant quon pouvait agrave un moment donneacute avoir plusieurs processus en cours agrave un tempsdonneacute Le systegraveme doit ecirctre capable de les identifier Pour cela il attribue agrave chacun dentre eux un numeacuteroappeleacute PID (Process Identification)
Un processus peut lui mecircme creacuteer un autre processus il devient donc un processus parent ou pegravere et lenouveau processus un processus enfant Ce dernier est identifieacute par son PID et le processus pegravere par sonnumeacutero de processus appeleacute PPID (Parent Process Identification)
Tous les processus sont ainsi identifieacutes par leur PID mais aussi par le PPID du processus qui la creacuteeacute cartous les processus ont eacuteteacute creacuteeacutes par un autre processus Oui mais dans tout ccedila cest qui a creacuteeacute le premierprocessus Le seul qui ne suit pas cette regravegle est le premier processus lanceacute sur le systegraveme le processusinit qui na pas de pegravere et qui a pour PID 1
92 Visualiser les processusOn peut visualiser les processus qui tournent sur une machine avec la commande ps (options) lesoptions les plus inteacuteressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichagedeacutetailleacutee) La commande ps -ef donne un truc du genre
UID PID PPID C STIME TTY TIME COMMAND root 1 0 0 Dec 6 102 init jean 319 300 0 103030 002 usrdtbindtsession olivier 321 319 0 103034 ttyp1 002 csh olivier 324 321 0 103212 ttyp1 000 ps -ef
La signification des diffeacuterentes colonnes est la suivante
UID nom de lutilisateur qui a lanceacute le process
PID correspond au numeacutero du process
PPID correspond au numeacutero du process parent
C au facteur de prioriteacute plus la valeur est grande plus leprocessus est prioritaire
STIME correspond agrave lheure de lancement du processus
TTY correspond au nom du terminal
TIME correspond agrave la dureacutee de traitement du processus
COMMAND correspond au nom du processus
Pour lexemple donneacute agrave partir dun shell vous avez lanceacute la commande ps -ef le premier processus agrave pourPID 321 le deuxiegraveme 324 Vous noterez que le PPID du process ps -ef est 321 qui correspond aushell par conseacutequent le shell est le process parent de la commande quon vient de taper
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Certains processus sont permanents cest agrave dire quils sont lanceacutes au deacutemarrage du systegraveme et arrecircteacutesuniquement agrave larrecirct du systegraveme On appelle ces process des daemons le terme deacutemon est unefrancisation daemon sont des abreacuteviations
Pour voir les process dun seul utilisateur vous pouvez taper
ps -u olivier
Dun UNIX agrave lautre la sortie peut changer Sous LINUX par exemple ps -Al permet une sortie assezriche en faisant un man ps vous aurez leacuteventail de tous les paramegravetres possibles
93 Commandes de gestion des processus
Changer la prioriteacute dun processus
Les processus tournent avec un certain degreacute de prioriteacute un processus plus prioritaire aura tendance agravesaccaparer plus souvent les ressources du systegraveme pour arriver le plus vite possible au terme de sonexeacutecution Cest le rocircle du systegraveme dexploitation de geacuterer ces prioriteacutes
Vous disposez de la commande nice pour modifier la prioriteacute dun processus La syntaxe est la suivante
nice -valeur commande
Plus le nombre est grand plus la prioriteacute est faible Par exemple une valeur de 0 donne la prioriteacute la plushaute 20 donne la prioriteacute la plus faible
La fourchette de valeur deacutepend de lUNIX quon utilise
Par exemple
nice -5 ps -ef
Geacuteneacuteralement on utilise nice sur des commandes qui prennent du temps sur des commandes courantesleffet de nice est imperceptible On lutilisera par exemple pour compiler un programme
nice -5 cc monprogrammec
Arrecircter un processus
Vous disposez de la commande kill pour arrecircter un processus on doit aussi tuer un processus Si vousvoulez arrecircter un processus vous devez connaicirctre son PID (commande ps) puis vous tapez
kill -9 PID
Un utilisateur ne peut arrecircter que les processus qui lui appartient (quil a lanceacute) Seul ladministrateursystegraveme a le droit darrecircter un processus ne lui appartenant pas
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
94 Lancer en processus en tacircche de fondPour lancer une commande quelconque vous en saisissez le nom apregraves le prompt du shell tant que lacommande nest pas termineacutee vous navez plus la main au niveau du shell vous ne disposez plus duprompt Si la commande prend un certain temps votre shell ne vous donnera pas la main tant que lacommande nest pas termineacutee vous ecirctes obligeacute de lancer un autre shell pour taper une autre commande
Vous disposez dune technique simple qui permet de lancer une commande agrave partir dun shell et dereprendre aussitocirct la main Il vous suffit de rajouter un amp agrave la fin de commande Celle-ci se lancera en tacircche de fond et vous reviendrez directement au prompt du shell
En tapant une commande en tacircche de fond vous aurez agrave laffichage
gt ps ef amp [321] gt
A la suite de la saisie de la commande suivie dun amp le shell vous donne immeacutediatement la main etaffiche le numeacutero du PID du processus lanceacute
En lanccedilant une commande agrave partir du shell sans le amp agrave la fin et si celle-ci prend du temps agrave vous rendre lamain vous pouvez faire en sorte quelle bascule en tacircche de fond pour que vous repreniez la main
gtnetscape
Vous voulez basculer netscape en tacircche de fond tapez CTRL+Z il va afficher
311 stopped +
311 eacutetant le PID du process netscape Tapez ensuite bg (pour background) vous voyez safficher
[311]
Ca y est votre processus netscape est en tacircche de fond et le shell vous rend la main
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
10 Les titres UNIX
101 Modifier les donneacutees dun fichier
Coupe un fichier en morceau split
La commande split permet de couper un fichier en morceau (en plusieurs fichiers) en tapant
split -10 mon-fichier fichier
Vous allez creacuteer les fichiers fichieraa fichierab fichierac qui contiendront tous 10 lignes Lepremier fichieraa contient les 10 premiegraveres lignes ainsi de suite
Trier des fichiers sort
Soit le fichier carnet-adresse suivant
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne920133444335Palaiseau
Le premier champ repreacutesente le nom le deuxiegraveme le deacutepartement le troisiegraveme le numeacutero de teacuteleacutephoneet le dernier la ville Attention le premier champ est noteacute 0 le deuxiegraveme 1 ainsi de suite
En faisant sort sans argument
sort carnet-adresse
Par deacutefaut il va trier sur le premier caractegravere et ranger donc dans lordre alphabeacutetique
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Si vous voulez trier sur le deuxiegraveme champ (le deacutepartement) vous devez dabord indiquer que le estle caractegravere qui seacutepare deux champs (par deacutefaut cest lespace) avec loption -t Vous devez ensuiteindiquer que vous trier un chiffre avec loption -n (numeacuterique) Pour indiquer quon veut trier ledeuxiegraveme champ il faut marquer quon veut trier agrave partir du second champ (+1) jusquau troisiegraveme(-2) Soit le reacutesultat suivant
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
sort -n -t +1 -2 carnet-adresse
On obtient
marcel130466342233Marseille maurice290298334432Crozon robert750144234452Paris yvonne92013344433Palaiseau
Avec la commande
sort -t +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatriegraveme champ (numeacutero 3) cest agrave dire la ville (tri par ordre alphabeacutetiquesur le premier caractegravere) en mettant +0 il va effectuer un deuxiegraveme tri pour les villes quicommencent par le mecircme caractegravere le deuxiegraveme tri porte sur le preacutenom (le premier caractegravere)
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Les options de sort sont les suivantes
-b ignore les espaces et les tabulations en deacutebut de champ
-d tri sur les caractegraveres alphanumeacuteriques (caractegraveres chiffreset espace) uniquement
-r inverse lordre de tri
-f pas de diffeacuterence entre minuscule et majuscule
-tx Le caractegravere x est consideacutereacute comme seacuteparateur de champ
-u supprime les lignes doublons
-n trie sur des chiffres
En tapant la commande suivante
sort -t +32 +0 carnet-adresse
Vous allez effectuer le tri sur le troisiegraveme caractegravere (numeacutero 2 le premier a pour numeacutero 0) duquatriegraveme champ (numeacutero 3) En cas deacutegaliteacute du premier tri on fait un dernier tri sur le premiercaractegravere du preacutenom Soit le reacutesultat
yvonne92013344433Palaiseau maurice290298334432Crozon
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
marcel130466342233Marseille robert750144234452Paris
Conversion de chaicircne de caractegravere tr
La commande tr permet de convertir une chaicircne de caractegravere en une autre de taille eacutegale Les optionssont les suivantes
-c Les caractegraveres qui ne sont pas dans la chaicircne dorigine sont convertis selon les caractegraveres dela chaicircne de destination
-d destruction des caractegraveres appartenant agrave la chaicircne dorigine
-s si la chaicircne de destination contient une suite contigueuml de caractegraveres identiques cette suite estreacuteduite agrave un caractegravere unique
La commande tr a besoin quon lui redirige en entreacutee un fichier le reacutesultat de la conversion saffichantsur la sortie standard
Soit notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Pour remplacer le par un nous taperons
tr lt carnet-adresse
Pour faire la mecircme chose on peut aussi bien eacutediter le fichier avec cat et rediriger par pipe vers tr entapant
cat carnet-adresse | tr
On peut utiliser des meacutetacaractegraveres En tapant
cat carnet-adresse | tr [a-f] [A-F]
Vous allez remplacer les caractegraveres de a agrave f de minuscule en majuscule Soit
mAuriCE290298334432Crozon mArCEl130466342233MArsEillE robErt750144234452PAris yvonnE92013344433PAlAisEAu
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
102 Edition de fichiers avec critegraveres
Editer un fichier par la fin tail
Si vous avez un fichier tregraves long et que vous voulez visualiser que la fin vous disposez de lacommande tail
La syntaxe est la suivante si vous tapez
tail +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquagrave la fin
tail -10 mon-fichier
Vous obtenez les 10 derniegraveres lignes agrave partir de la fin
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
tail -10 -c mon-fichier
Vous obtenez les 10 derniers caractegraveres du fichier
Editer un fichier par le deacutebut head
Si vous avez un fichier tregraves long et que vous voulez visualiser que le deacutebut vous disposez de lacommande head
La syntaxe est la suivante si vous tapez
head +10 mon-fichier
Vous obtenez toutes les lignes du fichier de la 10eme jusquau deacutebut
head -10 mon-fichier
Vous obtenez les 10 premiegraveres lignes agrave partir du deacutebut
Vous pouvez indiquer si votre uniteacute est la ligne (par deacutefaut) le bloc ou le caractegravere avec loption -t
head -10 -c mon-fichier
Vous obtenez les 10 premiers caractegraveres du fichier
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Compter les lignes dun fichier wc
La commande wc permet de compter le nombre de ligne dun fichier mais aussi le nombre de mot oude caractegraveres
wc -l mon-fichier
Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier Pour avoir lenombre de mot loption est -w loption -c compte le nombre de caractegraveres
La commande wc sans option donne agrave la fois le nombre de ligne le nombre de caractegraveres et le nombrede mots
Si vous voulez connaicirctre le nombre de fichier dans un reacutepertoire la commande sera donc
ls -l | wc -l
Edition de champ dun fichier cut
La commande cut permet dextraire certains champs dun fichier Les options sont les suivantes
-c extrait suivant le nombre de caractegraveres
-f extrait suivant le nombre de champs
-dx Le caractegravere x est le seacuteparateur de champ
Avec la commande cut contrairement agrave sort le premier champ a comme numeacutero 1 le deuxiegraveme 2 estainsi de suite
Nous prendrons toujours notre fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
La commande
cut -c-10 carnet adresse
Va extraire les 10 premiers caractegraveres de chaque ligne on obtient
maurice29 marcel13 robert75 yvonne92
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
La commande
cut -c2-5 carnet adresse
Va extraire les deuxiegraveme au cinquiegraveme caractegravere de chaque ligne
auri arce ober vonn
La commande
cut -c25-
Va extraire du 25eme caractegravere jusquagrave la fin de chaque ligne
La commande
cut -d -f14 carnet adresse
Va extraire le premier et quatriegraveme champ le fixant le seacuteparateur de champ On obtient
mauriceCrozon marcelMarseille robertParis yvonnePalaiseau
La commande
cut -d -f3- carnet adresse
Va extraire du troisiegraveme champ jusquau dernier champ soit
0298334432Crozon 0466342233Marseille 0144234452Paris 0133444335Palaiseau
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Fusion de fichier paste
La commande paste permet la fusion de lignes de fichiers Les options sont les suivantes
-dx Le caractegravere x deacutefinit le seacuteparateur de champ
-s Les lignes sont remplaceacutees par des colonnes
Soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et le fichier travail
ingeacutenieur pacirctissier facteur vendeuse
En tapant la commande
paste -d carnet-adresse travail
Vous obtenez
maurice290298334432Crozoningeacutenieur marcel130466342233Marseillepacirctissier robert750144234452Parisfacteur yvonne92013344433Palaiseauvendeuse
Vous pouvez eacutevidemment rediriger le reacutesultat vers un fichier
Extraction de lignes communes de deux fichiers comm
Cette commande permet dextraire les lignes communes agrave deux fichiers soit le fichier carnet-adresse
maurice290298334432Crozon marcel130466342233Marseille robert750144234452Paris yvonne92013344433Palaiseau
Et carnet-adresse2
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
comm carnet-adresse carnet-adresse2
Nous donnera
marcel130466342233Marseille yvonne92013344433Palaiseau
103 Comparaison de fichiers
Comparer deux fichiers cmp
La commande cmp indique si deux fichiers sont identiques En tapant
cmp fichier1 fichier2
Si les deux sont identiques la commande ne geacutenegravere aucune sortie sils sont diffeacuterents la commandeindique la position de la premiegravere diffeacuterence (ligne et caractegravere) avec une sortie du genre
fichier1 fichier2 differ char 34 line 2
Edition des diffeacuterences entre deux fichiers diff
Cette commande permet de rechercher les diffeacuterences entre deux fichiers La syntaxe est la suivantediff fichier1 fichier2 diff fait en sorte de vous donner des indications pour que le fichier1 soitidentique au fichier2 Soit le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Marseille myriam300434214452Nimes yvonne92013344433Palaiseau toto120434231122Rodez
et carnet-adresse2
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
La commande
diff carnet-adresse carnet-adresse2
Geacutenegravere comme sortie
2c2 lt marcel130466342233 Marseille --- ltmarcel130466342233 Gardagnes 5d gttoto 12 0434231122 Rodez
Ce qui nous indique que pour carnet-adresse soit identique agrave carnet-adresse2 il faut que ladeuxiegraveme ligne du premier fichier soit eacutechangeacutee (c pour change) contre la ligne du second Il fautaussi supprimer (d pour delete) la cinquiegraveme ligne du premier fichier
Dans dautres exemples on pourrait avoir aussi une sortie du genre 1015c 1217 ce qui signifie quepour que le premier fichier soit identique au second les lignes 10 agrave 15 doivent inteacutegralementeacutechangeacutees contre les lignes 12 agrave17 du second fichier
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
11 Les commandes grep et find
111 Les expressions reacuteguliegraveresOn a vu auparavant ce queacutetaient les meacutetacaractegraveres Les expressions reacuteguliegraveres sont aussi des suitesde caractegraveres permettant de faire des seacutelections Elles fonctionnent avec certaines commandes commegrep
Les diffeacuterentes expressions reacuteguliegraveres sont
deacutebut de ligne
un caractegravere quelconque
$ fin de ligne
x zeacutero ou plus doccurrences du caractegravere x
x+ une ou plus occurrences du caractegravere x
x une occurrence unique du caractegravere x
[] plage de caractegraveres permis
[] plage de caractegraveres interdits
n pour deacutefinir le nombre de reacutepeacutetition n du caractegravere placeacutedevant
Exemple lexpression [a-z][a-z] cherche les lignes contenant au minimum un caractegravere enminuscule [a-z] caractegravere permis [a-z] recherche doccurrence des lettres permises
Lexpression [0-9] 4$ a pour signification du deacutebut agrave la fin du fichier $ recherche lesnombres[0-9] de 4 chiffres 4
112 La commande grepLa commande grep permet de rechercher une chaicircne de caractegraveres dans un fichier Les options sontles suivantes
-v affiche les lignes ne contenant pas la chaicircne
-c compte le nombre de lignes contenant la chaicircne
-n chaque ligne contenant la chaicircne est numeacuteroteacutee
-x ligne correspondant exactement agrave la chaicircne
-l affiche le nom des fichiers qui contiennent la chaicircne
Exemple avec le fichier carnet-adresse
olivier290298333242Brest marcel130466342233Gardagnes myriam300434214452Nimes yvonne92013344433Palaiseau
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
On peut utiliser les expressions reacuteguliegraveres avec grep Si on tape la commande
grep ^[a-d] carnet-adresse
On va obtenir tous les lignes commenccedilant par les caractegraveres compris entre a et d Dans notre exempleon nen a pas dougrave labsence de sortie
grep Brest carnet-adresse
Permet dobtenir les lignes contenant la chaicircne de caractegravere Brest soit
olivier290298333242Brest
Il existe aussi les commandes fgrep et egrep eacutequivalentes
113 La commande find
Preacutesentation
La commande find permet de retrouver des fichiers agrave partir de certains critegraveres La syntaxe est lasuivante
find ltreacutepertoire de recherchegt ltcritegraveres de recherchegt
Les critegraveres de recherche sont les suivants
-name recherche sur le nom du fichier
-perm recherche sur les droits daccegraves du fichier
-links recherche sur le nombre de liens du fichier
-user recherche sur le proprieacutetaire du fichier
-group recherche sur le groupe auquel appartient le fichier
-type recherche sur le type (d=reacutepertoire c=caractegraveref=fichier normal)
-size recherche sur la taille du fichier en nombre de blocs (1bloc=512octets)
-atime recherche par date de dernier accegraves en lecture dufichier
-mtime recherche par date de derniegravere modification du fichier
-ctime recherche par date de creacuteation du fichier
On peut combiner les critegraveres avec des opeacuterateurs logiques
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
critegravere1 critegravere2 ou critegravere1 -a critegravere2 correspond au et logique
critegravere non logique
(critegravere1 -o critegravere2) ou logique
La commande find doit ecirctre utiliseacute avec loption -print Sans lutilisation de cette option mecircme en casde reacuteussite dans la recherche find naffiche rien agrave la sortie standard (leacutecran plus preacuteciseacutement leshell)
La commande find est reacutecursive cest agrave dire ougrave que vous tapiez il va aller scruter dans les reacutepertoireset les sous reacutepertoires quil contient et ainsi de suite
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaicircne de caractegraveres toto agrave partir du reacutepertoire usrvous devez tapez
find usr -name toto -print
En cas de reacuteussite si le(s) fichier(s) existe(nt) vous aurez comme sortie
toto
En cas deacutechec vous navez rien
Pour rechercher tous les fichiers se terminant par c dans le reacutepertoire usr vous taperez
find usr -name c -print
Vous obtenez toute la liste des fichiers se terminant par c sous les reacutepertoires contenus dans usr (etdans usr lui mecircme)
Recherche suivant la date de derniegravere modification
Pour connaicirctre les derniers fichiers modifieacutes dans les 3 derniers jours dans toute larborescence ()vous devez taper
find -mtime 3 -print
Recherche suivant la taille
Pour connaicirctre dans toute larborescence les fichiers dont la taille deacutepasse 1Mo (2000 blocs de512Ko) vous devez taper
find -size 2000 -print
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Recherche combineacutee
Vous pouvez chercher dans toute larborescence les fichiers ordinaires appartenant agrave olivier dont lapermission est fixeacutee agrave 755 on obtient
find -type f -user olivier -perm 755 -print
Redirection des messages derreur
Vous vous rendrez compte assez rapidement quen tant que simple utilisateur vous navez pasforceacutement le droit daccegraves agrave un certain nombre de reacutepertoires par conseacutequent la commande find peutgeacuteneacuterer beaucoup de messages derreur (du genre permission denied) qui pourraient noyerlinformation utile Pour eacuteviter ceci vous pouvez rediriger les messages derreur dans un fichierpoubelle (comme devnull) les messages derreur sont alors perdus (rien ne vous empecircche de lessauvegarder dans un fichier mais ccedila na aucune utiliteacute avec la commande find)
find -name bobo -print
Recherche en utilisant les opeacuterateurs logiques
Si vous voulez connaicirctre les fichiers nappartenant pas agrave lutilisateur olivier vous taperez
find -user olivier -print
-user olivier est la neacutegation de -user olivier cest agrave dire cest tous les utilisateurs sauf olivier
Recherche des fichiers qui ont pour nom aout et des fichiers se terminant par c On tape
find ( -name aout -o -name c ) -print
On recherche donc les fichiers dont le nom est aout ou les fichiers se terminant par c une conditionou lautre
Recherche des fichiers qui obeacuteissent agrave la fois agrave la condition a pour nom core et agrave la condition a unetaille supeacuterieure agrave 1Mo
find (-name core -a size +2000 ) -print
Les commandes en option
Loption -print est une commande que lon passe agrave find pour afficher les reacutesultats agrave la sortie standardEn dehors de print on dispose de loption -exec find coupleacute avec exec permet dexeacutecuter unecommande sur les fichiers trouveacutes dapregraves les critegraveres de recherche fixeacutes Cette option attend commeargument une commande celle ci doit ecirctre suivi de
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Exemple recherche des fichiers ayant pour nom core suivi de leffacement de ces fichiers
find -name core -exec rm
Tous les fichiers ayant pour nom core seront deacutetruits pour avoir une demande de confirmation avantlexeacutecution de rm vous pouvez taper
find -name core -ok rm
Autres subtiliteacutes
Une fonction inteacuteressante de find est de pouvoir ecirctre utiliseacute avec dautres commandes UNIX Parexemple
find -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le reacutepertoire courant tous les fichiers normaux(sans les reacutepertoires fichiers speacuteciaux) et rechercher dans ces fichiers tous ceux contenant la chaicircnetoto
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
12 Expressions reacuteguliegraveres et sed
121 Les expressions reacuteguliegraveres
Preacutesentation
Une expression reacuteguliegravere (en anglais Regular Expression ou RE) sert agrave identifier une chaicircne decaractegravere reacutepondant agrave un certain critegravere (par exemple chaicircne contenant des lettres minusculesuniquement) Lavantage dune expression reacuteguliegravere est quavec une seule commande on peut reacutealiserun grand nombre de tacircche qui seraient fastidieuses agrave faire avec des commandes UNIX classiques
Les commandes ed vi ex sed awk expr et grep utilisent les expressions reacuteguliegraveres
Lexemple le plus simple dune expression reacuteguliegravere est une chaicircne de caractegraveres quelconque toto parexemple Cette simple expression reacuteguliegravere va identifier la prochaine ligne du fichier agrave traitercontenant une chaicircne de caractegravere correspondant agrave lexpression reacuteguliegravere
Si lon veut chercher une chaicircne de caractegravere au sein de laquelle se trouve un caractegravere speacutecial ( $ [ ] entre autres) (appeleacute aussi meacutetacaractegravere) on peut faire en sorte que ce caractegravere ne soitpas interpreacuteteacute comme un caractegravere speacutecial mais comme un simple caractegravere Pour cela vous devez lefaire preacuteceacuteder par (backslash) Ainsi si votre chaicircne est dev pour que le ne soit pas interpreacuteteacutecomme un caractegravere speacutecial vous devez tapez dev pour lexpression reacuteguliegravere
Le meacutetacaractegravere
Le meacutetacaractegravere remplace dans une expression reacuteguliegravere un caractegravere unique agrave lexception ducaractegravere retour chariot ( n) Par exemple chaine va identifier toutes les lignes contenant la chainechaine suivit dun caractegravere quelconque unique Si vous voulez identifier les lignes contenant la chaicircnecshrc lexpression reacuteguliegravere correspondante est cshrc
Les meacutetacaractegraveres [ ]
Les meacutetacaractegraveres [] permettent de deacutesigner des caractegraveres compris dans un certain intervalle devaleur agrave une position deacutetermineacutee dune chaicircne de caractegraveres Par exemple [Ff]raise va identifier leschaicircnes Fraise ou fraise [a-z]toto va identifier une chaicircne de caractegravere commenccedilant par une lettreminuscule (intervalle de valeur de a agrave z) et suvi de la chaicircne toto (atoto btoto ztoto)
Dune maniegravere plus geacuteneacuterale voici comment [] peuvent ecirctre utiliseacutes
[A-D] intervalle de A agrave D (A B C D) par exemple bof[A-D] donne bofA bofB bofC bofD
[2-5] intervalle de 2 agrave 5 (2 3 4 5) par exemple 12[2-5]2 donne 1222 1232 1242 1252
[2-56] intervalle de 2 agrave 5 et 6 (et non pas 56) (2 3 4 5 6) par exemple 12[2-56]2 donne 1222 12321242 1252 1262
[a-dA-D] intervalle de a agrave d et A agrave D (a b c d A B C D) par exemple z[a-dA-D]y donne zayzby zcy zdy zAy zBy zCy zDy
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
[1-3-] intervalle de 1 agrave 3 et - (1 2 3 -) par exemple [1-3-]3 donne 13 23 33 -3
[a-cI-K1-3] intervalle de a agrave c I agrave K et 1 agrave 3 (a b c I J K 1 2 3)
On peut utiliser [] avec un pour identifier le complegravement de lexpression reacuteguliegravere En franccedilais pouridentifier lopposeacute de lexpression reacuteguliegravere Vous avez toujours pas compris Voici un exemple[0-9]toto identifie les lignes contenant une chaicircne toto le caractegravere juste avant ne doit pas ecirctre unchiffre (exemple atoto gtoto mais pas 1toto 5toto) Autre exemple [a-zA-Z] nimporte quel caractegraveresauf une lettre minuscule ou majuscule Attention agrave la place de si vous tapez [1-3] cest eacutequivalentaux caractegraveres 1 2 3 et
Les meacutetacaractegraveres et $
Le meacutetacaractegravere identifie un deacutebut de ligne Par exemple lexpression reacuteguliegravere a va identifier leslignes commenccedilant par le caractegravere a
Le meacutetacaractegravere $ identifie une fin de ligne Par exemple lexpression reacuteguliegravere a$ va identifier leslignes se terminant par le caractegravere a
Lexpression reacuteguliegravere chaine$ identifie les lignes qui contiennent strictement la chaicircne chaine
Lexpression reacuteguliegravere $ identifie une ligne vide
Le meacutetacaractegravere
Le meacutetacaractegravere est le caractegravere de reacutepeacutetition
Lexpression reacuteguliegravere a correspond aux lignes comportant 0 ou plusieurs caractegravere a Son utilisationest agrave proscrire car toutes les lignes mecircme celles ne contenant pas le caractegravere a reacutepondent auxcritegraveres de recherche x est une source de problegravemes il vaut mieux eacuteviter de lemployer
Lexpression reacuteguliegravere aa correspond aux lignes comportant 1 ou plusieurs caractegraveres a
Lexpression reacuteguliegravere correspond agrave nimporte quelle chaicircne de caractegraveres
Lexpression reacuteguliegravere [a-z][a-z] va chercher les chaicircnes de caractegraveres contenant 1 ou plusieurslettres minuscules (de a agrave z)
Lexpression reacuteguliegravere [ ][ ] est eacutequivalent agrave tout sauf un blanc
Les meacutetacaractegraveres ( )
Pour le traitement complexe de fichier il est utile parfois didentifier un certain type de chaicircne pourpouvoir sen servir dans la suite du traitement comme un sous programme Cest le principe des souschaicircnes pour meacutemoriser une sous chaicircne on utilise la syntaxe (expression reacuteguliegravere) cette souschaicircne sera identifieacute par un chiffre compris par 1 et 9 (suivant lordre de deacutefinition)
Par exemple ([a-z][a-z]) est une sous chaicircne identifiant les lignes contenant une ou plusieurs lettresminuscules pour faire appel agrave cette sous chaicircne on pourra utiliser 1 Voir dans le paragraphe sedpour un exemple
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
122 La commande sed
Preacutesentation
sed est eacutediteur ligne non interactif il lit les lignes dun fichier une agrave une (ou provenant de lentreacuteestandard) leur applique un certain nombre de commandes deacutedition et renvoie les lignes reacutesultantes surla sortie standard Il ne modifie pas le fichier traiteacute il eacutecrit tout sur la sortie standard
sed est une eacutevolution de leacutediteur ed lui mecircme preacutecurseur de vi la syntaxe nest franchement pas tregravesconviviale mais il permet de reacutealiser des commandes complexes sur des gros fichiers
La syntaxe de sed est la suivante
sed -e programme sed fichier-a-traiter
ou
sed -f fichier-programme fichier-a-traiter
Vous disposez de loption -n qui supprime la sortie standard par deacutefaut sed va eacutecrire uniquement leslignes concerneacutees par le traitement (sinon il eacutecrit tout mecircme les lignes non traiteacutees) Loption -e nestpas neacutecessaire quand vous avez une seule fonction deacutedition
La commande sed est une commande tregraves riche ne vous sont preacutesenteacutees ici que les fonctions les pluscourantes pour plus de deacutetails faites un man sed etou man ed
La fonction de substitution s
La fonction de substitution s permet de changer la premiegravere ou toutes les occurences dune chaicircne parune autre La syntaxe est la suivante
sed stotoTOTO fichier va changer la premiegravere occurence de la chaicircne toto par TOTO (lapremiegravere chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTO3 fichier va changer la troisiegraveme occurence de la chaicircne toto par TOTO (latroisiegraveme chaicircne toto rencontreacutee dans le texte uniquement)
sed stotoTOTOg fichier va changer toutes les occurences de la chaicircne toto par TOTO (toutesles chaicircnes toto rencontreacutees sont changeacutees
sed stotoTOTOp fichier en cas de remplacement la ligne concerneacutee est afficheacutee sur la sortiestandard (uniquement en cas de substitution)
sed stotoTOTOw resultat fichier en cas de substitution la ligne en entreacutee est inscrite dans unfichier reacutesultat
La fonction de substitution peut eacutevidemment ecirctre utiliseacutee avec une expression reacuteguliegravere
sed -e s[Ff]raiseFRAISEg fichier substitue toutes les chaicircnes Fraise ou fraise par FRAISE
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
La fonction de suppression d
La fonction de suppression d supprime les lignes comprises dans un intervalle donneacute La syntaxe estla suivante
sed 2030d fichier
Cette commande va supprimer les lignes 20 agrave 30 du fichier fichier On peut utiliser les expressionsreacuteguliegraveres
sed totod fichier
Cette commande supprime les lignes contenant la chaicircne toto Si au contraire on ne veut pas effacerles lignes contenant la chaicircne toto (toutes les autres sont supprimeacutees) on tapera
sed totod fichier
En fait les lignes du fichier dentreacutee ne sont pas supprimeacutees elles le sont au niveau de la sortiestandard
Les fonctions p l et =
La commande p (print) affiche la ligne seacutelectionneacutee sur la sortie standard Elle invalide loption -n
La commande l (list) affiche la ligne seacutelectionneacutee sur la sortie standard avec en plus les caractegraveres decontrocircles en clair avec leur code ASCII (deux chiffres en octal)
La commande = donne le numeacutero de la ligne seacutelectionneacutee sur la sortie standard
Ces trois commandes sont utiles pour le deacutebogage quand vous mettez au point vos programmes sed
sed toto= fichier
Cette commande va afficher le numeacutero de la ligne contenant la chaicircne toto
Les fonctions q r et w
La fonction q (quit) va interrompre lexeacutecution de sed la ligne en cours de traitement est afficheacutee surla sortie standard (uniquement si -n na pas eacuteteacute utiliseacutee)
La fonction r (read) lit le contenu dun fichier et eacutecrit le contenu sur la sortie standard
La fonction w (write) eacutecrit la ligne seacutelectionneacutee dans un fichier
sed ^totow resultat fichier
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Cette commande va eacutecrire dans le fichier resultat toutes les lignes du fichier fichier commenccedilant parla chaicircne toto
Les fonctions a et i
La fonction a (append) va placer un texte apregraves la ligne seacutelectionneacutee La syntaxe est la suivante
a le texte
La fonction i (insert) va placer un texte avant la ligne seacutelectionneacutee La syntaxe est la suivante
i le texte
Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante
ligne 1 du texte ligne 2 du texte ligne n du texte derniegravere ligne
Concregravetement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed Parexemple soit votre fichier progsed suivant
1i deacutebut du traitement s[tT]otoTOTOg $a fin du traitement de notre fichier
On exeacutecute la commande en tapant
sed -f progsed fichier-a-traiter
progsed a pour effet dinscrire avant la premiegravere ligne (1i) le texte deacutebut de traitement et apregraves laderniegravere ligne ($a) le texte fin du traitement (retour agrave la ligne) de notre fichier
sed et les sous chaicircnes
La commande
sed -e s ([0-9][0-9] )aa 1aa fichier
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
La sous expression (sous chaicircne) ([0-9][0-9]) deacutesigne un ou plusieurs chiffres chacun sera entoureacutedes caractegraveres aa La chaicircne to2to deviendra toaa2aato
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Next Previous Contents
13 La commande awk
131 Preacutesentation
Preacutesentation et syntaxe
awk est une commande tregraves puissante cest un langage de programmation a elle tout seule qui permet une recherche de chaicircneset lexeacutecution dactions sur les lignes seacutelectionneacutees Elle est utile pour reacutecuperer de linformation geacuteneacuterer des rapportstransformer des donneacutees entre autres
Une grande partie de la syntaxe a eacuteteacute emprunteacutee au langage c dailleurs awk sont les abreacuteviations de ces 3 creacuteateurs dont kpour Kernighan un des inventeurs du c
La syntaxe de awk est la suivante
awk [-F] [-v var=valeur] programme fichier
ou
awk [-F] [-v var=valeur] -f fichier-config fichier
Largument -F doit ecirctre suivi du seacuteparateur de champ (-F pour un comme seacuteparateur de champ)
Largument -f suivi du nom du fichier de configuration de awk
Largument -v deacutefinit une variable (var dans lexemple) qui sera utiliseacutee par la suite dans le programme
Un programme awk possegravede la structure suivante critegravere de seacutelection dune chaicircne action quand il ny a pas de critegraverecest que laction sapplique agrave toutes les lignes du fichier
Exemple
awk -F print $NF etcpasswd
Il ny a pas de critegraveres donc laction sapplique agrave toutes les lignes du fichier etcpasswd Laction consiste agrave afficher le nombrede champ du fichier NF est une variable preacutedeacutefinie dawk elle est eacutegale au nombre de champs dans une ligne
Geacuteneacuteralement on utilisera awk en utilisant un script
binsh awk [-F] [-v var=valeur] programme $1
Vous appelerez votre script mon-scriptawk lui donnerez des droits en exeacutecution (755 par exemple) et lappelerez ainsi
mon-scriptawk fichier-a-traiter
Dans la suite du cours on utilisera awk en sous entendant que celui-ci est agrave inseacuterer dans un script
Le quote se trouve sur un clavier azerty standard avec le 4 et eacuteventuellement laccolade gauche
ATTENTION ils existent plusieurs varieacuteteacutes de awk il se pourrait que certaines fonctions ou variables systegravemes qui voussont preacutesenteacutees dans ce cours nexistent pas sur votre UNIX Faites en sorte si vos scripts awk doivent fonctionner sur desplates-formes diffeacuterentes dutiliser gawk sous licence GNU qui est totalement POSIX
Jai constateacute des grosses diffeacuterences de comportement entre le awk natif quon soit sous HP-UX Solaris et sous LINUX demecircme quand on insegravere la commande dans un script on fait appel agrave un shell suivant son type (bash shell csh ksh ) vous
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
pouvez avoir quelques surprises
Enregistrements et champs
awk scinde les donneacutees dentreacutee en enregistrements et les enregistrements en champ Un enregistrement est une chaicircne dentreacuteedeacutelimiteacutee par un retour chariot un champ est une chaicircne deacutelimiteacutee par un espace dans un enregistrement
Par exemple si le fichier agrave traiter est etcpasswd le caractegravere de seacuteparation eacutetant un enregistrement est une ligne dufichier et un champ correspond au chaicircne de caractegravere seacutepareacute par un (loginmot de passecrypteacuteUIDGIDcommentaireshome directoryshell)
Dans un enregistrement les champs sont reacutefeacuterenceacutes par $1 $2 $NF (dernier champ) Par exemple pour etcpasswd $1correspond au login $2 au mot de passe crypteacute $3 agrave lUID et $NF (ou $7) au shell
Lenregistrement complet (une ligne dun fichier) est reacutefeacuterenceacute par $0
Par exemple si lon veut voir les champs login et home directory de etcpasswd on tapera
awk -F print $1$6 etcpasswd
132 Critegraveres de seacutelection
Preacutesentation
Un critegravere peut ecirctre une expression reacuteguliegravere une expression ayant une valeur chaicircne de caractegraveres une expressionarithmeacutetique une combinaison des expressions preacuteceacutedentes
Le critegravere est inseacutereacute entre les chaicircnes BEGIN et END avec la syntaxe suivante
awk -F BEGINinstructions critegraveres ENDinstructions fichier
BEGIN peut ecirctre suivi dinstruction comme une ligne de commentaire ou pour deacutefinir le seacuteparateur Exemple BEGIN printVeacuterification dun fichier FS= Le texte agrave afficher peut ecirctre un reacutesumeacute de laction de awk De mecircme pour ENDon peut avoir ENDprint travail termineacute qui indiquera que la commande a acheveacute son travail Le END nest pasobligatoire de mecircme que le BEGIN
Les expressions reacuteguliegraveres
La syntaxe est la suivante
expression reacuteguliegravere instructions $0 expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne contenant une chaicircne satisfaisant agrave lexpression reacuteguliegravere
expression expression reacuteguliegravereinstructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression contient une chaicircne satisfaisant agravelexpression reacuteguliegravere
expression expression reacuteguliegravere instructions
les instructions sont exeacutecuteacutees pour chaque ligne ougrave la valeur chaicircne de lexpression ne contient pas une chaicircne satisfaisant agravelexpression reacuteguliegravere
Soit le fichier adresse suivant (nom numeacutero de teacuteleacutephone domicile numeacutero de portable numeacutero quelconque)
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
gwenael | 0298452223 | 0638431234 | 50 marcel | 0466442312 | 0638453211 | 31 judith | 0154674487 | 0645227937 | 23
Lexemple suivant veacuterifie que dans le fichier le numeacutero de teacuteleacutephone domicile (champ 2) et le numeacutero de portable (champ 3)sont bien des nombres
awk BEGIN print On veacuterifie les numeacuteros de teacuteleacutephone FS=| $2 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone domicile lignendegNR n$0 $3 ^[0-9][0-9]$ print Erreur sur le numeacutero de teacuteleacutephone du portable lignendegNR n$0 END print Veacuterification termineacute adresse
BEGIN est suivi dune instruction daffichage qui reacutesume la fonction de la commande et de la deacutefinition du seacuteparateur dechamp Lexpression $2 se reacutefeacutere au deuxiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero de teacuteleacutephonedomicile on recherche ceux qui ne contiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on afficheraun message derreur le numeacutero de ligne courante un retour agrave la ligne puis le contenu entier de la ligne Lexpression $3 sereacutefeacutere au troisiegraveme champ dune ligne (enregistrement) de adresse soit le numeacutero du portable on recherche ceux qui necontiennent pas de chiffre (neacutegation de contient des chiffres) en cas de succeacutes on affichera un message derreur le numeacutero deligne courante un retour agrave la ligne puis le contenu entier de la ligne END est suivi dune instruction daffichage indiquant lafin du travail
Les expressions relationnelles
Un critegravere peut contenir des opeacuterateurs de comparaison (- lt lt====gt=gt) Exemple avec le fichier adresse suivant
awk BEGIN print On cherche lignes dont le numeacutero (champ 4) est supeacuterieur agrave 30FS=| $4 gt 30 print Numeacutero supeacuterieur agrave 30 agrave la ligne ndegNR n$0 END print Veacuterification termineacute adresse
Combinaison de critegraveres
Un critegravere peut ecirctre constitueacute par une combinaison booleacuteenne avec les opeacuterateurs ou (||) et (ampamp) et non () Exemple
awk BEGIN print On cherche la ligne avec judith ou avec un numeacutero infeacuterieur agrave30 FS=| $1 = = judith || $4 lt 30 print Personne $1 numeacutero $4 ligne ndegNR n$0 END print Veacuterification termineacute adresse
Plage denregistrement deacutelimiteacutees par des critegraveres
La syntaxe est la suivante critegravere1critegravere2 instructions Les instructions sont exeacutecuteacutees pour toute les lignes entre la lignereacutepondant au critegravere1 et celle au critegravere2 Laction est exeacutecuteacutee pour les lignes comprises entre la ligne 2 et 6
awk BEGIN NR==2NR==6 print ligne ndegNR n$0 END adresse
133 Les actions
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Preacutesentation
Les actions permettent de transformer ou de manipuler les donneacutees elles contiennent une ou plusieurs instructions Les actionspeuvent ecirctre de diffeacuterents types fonctions preacutedeacutefinies fonctions de controcircle fonctions daffectation fonctions daffichage
Fonctions preacutedeacutefinies traitant des numeacuteriques
atan2(yx) arctangente de xy en radian (entre -pi et pi)
cos(x) cosinus (radian)
exp(x) exponentielle agrave la puissance x
int(x) partie entiegravere
log(x) logarithme naturel
rand(x) nombre aleacuteatoire (entre 0 et 1)
sin(x) sinus (radian)
sqr(t) racine carreacutee
srand(x) deacutefinition dune valeur de deacutepart pour geacuteneacuterer un nombre aleacuteatoire
Fonctions preacutedeacutefinies traitant de chaicircnes de caractegraveres
Pour avoir la liste des fonctions preacutedeacutefinies sur votre plate-forme vous devez faire un man awk voici la liste des fonctions lesplus courantes sur un systegraveme UNIX
gsub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) danschaine-de-caractegraveres tous les caractegraveres deacutecrits par lexpression reacuteguliegravere sontremplaceacutes par nouvelle-chaine gsub et eacutequivalent agrave gensub
gsub(aaioi) Remplace la chaine oi par ai
index(chaine-de-caractegraverescaractegravere-agrave-rechercher) donne la premiegravere occurence ducaractegravere-agrave-rechercher dans la chaine chaine-de-caractegraveres
n=index(patateta) n=3 length(chaine-de-caractegraveres) renvoie la longueur de lachaine-de-caractegraveres
n=length(patate) n=6
match(chaine-de-caractegraveresexpression-reacuteguliegravere) renvoie lindice de la position dela chaicircne chaine-de-caractegraveres repositionne RSTART et RLENGTH
n=match(PO1235D[0-9][0-9]) n=3 RSTART=3 et RLENGTH=4
printf(formatvaleur) permet denvoyer des affichages (sorties) formateacutees la syntaxeest identique de la mecircme fonction en C
printf(La variable i est eacutegale agrave 72fi) sortie du chiffre i avec 7 caractegraveres(eacuteventuellement caractegraveres vides devant) et 2 chiffres apregraves la virgule
printf(La ligne est s$0) gt fichierint Redirection de la sortie vers un fichieravec gt on peut utiliser aussi la redirection gtgt Veillez agrave ne pas oublier les autour du nom du fichier
split(chaine-de-caractegraverestableauseacuteparateur) scinde la chaicircne chaine-de-caractegraveresdans un tableau le seacuteparateur de champ est le troisiegraveme argument
n=split(zorro est arriveacutetab ) tab[1]=zorro tab[2]=est tab[3]=arriveacuten=3 correspond au nombre deacuteleacutements dans le tableau
sprintf(formatvaleur) printf permet dafficher agrave leacutecran alors que sprintf renvoiela sortie vers une chaicircne de caractegraveres
machaine=sprintf(Jai d patatesi) machaine=Jai 3 patates (si i=3)
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
substr(chaine-de-caractegraveresposlong) Extrait une chaine de longueur long dans lachaicircne chaine-de-caractegraveres agrave partir de la position pos et laffecte agrave une chaicircne
machaine=substr(Zorro est arriveacute53) machaine=o e
sub(expression-reacuteguliegraverenouvelle-chainechaine-de-caractegraveres) idem que gsub sauf queseul la premiegravere occurence est remplaceacutee (gsub=globale sub)
system(chaine-de-caractegraveres) permet de lancer des commandes dautres programmes
commande=sprintf(ls | grep toto) Exeacutecution de la commande UNIX ls |grep toto
system(commande)
tolower(chaine-de-caracteres) retourne la chaicircne de caractegraveres convertie en minuscule
toupper(chaine-de-caracteres) retourne la chaicircne de caractegraveres convetie en majuscule
Fonctions deacutefinies par lutilisateur
Vous pouvez deacutefinir une fonction utilisateur de telle sorte quelle puisse ecirctre consideacutereacutee comme une fonction preacutedeacutefinie Lasyntaxe est la suivant
fonction mafonction(liste des paramegravetres) instructions return valeur
134 Les variables et opeacuterations sur les variables
Preacutesentation
On trouve les variables systegraveme et les variables utilisateurs Les variables systegravemes non modifiables donnent des informationssur le deacuteroulement du programme Les variables utilisateurs sont deacutefinies par lutilisateur
Les variables utilisateur
Le nom des variables est formeacute de lettres de chiffres (sauf le premier caractegravere de la variable) dunderscore Ce nest pasneacutecessaire dinitialiser une variable par deacutefaut si cest un numeacuterique elle est eacutegale agrave 0 si cest une chaicircne elle est eacutegale agrave unechaicircne vide Une variable peut contenir du texte puis un chiffre en fonction de son utilisation awk va deacuteterminer son type(numeacuterique ou chaicircne)
Les variables preacutedeacutefinies (systegraveme)
Les variables preacutedeacutefinies sont les suivantes (en italique les valeurs par deacutefaut)
ARGC nombre darguments de la ligne de commande neacuteant
ARGIND index du tableau ARGV du fichier courant
ARGV tableau des arguments de la ligne de commande neacuteant
CONVFMT format de conversion pour les nombres 6g
ENVIRON tableau contenant les valeurs de lenvironnement courant
ERRNO contient une chaicircne deacutecrivant une erreur
FIELIWIDTHS variable expeacuterimentale agrave ne pas utiliser
FILENAME nom du fichier dentreacutee neacuteant
FNR numeacutero denregistrement dans le fichier courant neacuteant
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
FS controcircle le seacuteparateur des champs dentreacutee
IGNORECASE controcircle les expressions reacuteguliegraveres et les opeacuterations sur les chaicircnes decaractegraveres 0
NF nombre de champs dans lenregistrement courant neacuteant
NR nombre denregistrements lus jusqualors neacuteant
OFMT format de sortie des nombres (nombre apregraves la virgule) 6g
OFS seacuteparateur des champs de sortie
ORS seacuteparateur des enregistrements de sortie
RLENGTH neacuteant longueur de la chaicircne seacutelectionneacutee par le critegravere n
RS controcircle le seacuteparateur des enregistrements dentreacutee n
RSTART deacutebut de la chaicircne seacutelectionneacutee par le critegravere neacuteant
SUBSEP seacuteparateur dindiccedilage 034
Opeacuterations sur les variables
On peut manipuler les variables et leur faire subir certaines opeacuterations On trouve diffeacuterents types dopeacuterateurs les opeacuterateursarithmeacutetiques classiques (+ - (modulo reste de la division) (puissance)) les opeacuterateurs daffectation (= += -= = == =) Exemples
var=30 affectation du chiffre 30 agrave var
var=toto affectation de la chaicircne toto agrave var
var=toto est grand concateacutenation des chaicircnes
toto et est grand reacutesultat dans var
var=var-valeur var-=valeur expressions eacutequivalentes
var=var+valeur var+=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=varvaleur var=valeur expressions eacutequivalentes
var=var+1 var++ expressions eacutequivalentes
var=var-1 var-- expressions eacutequivalentes
Les variables de champ
Comme on la deacutejagrave vu auparavant les champs dun enregistrement (ligne) sont deacutesigneacutes par $1 $2$NF(dernier champ duneligne) Lenregistrement complet (ou ligne) est deacutesigneacute par $0 Une variable champ est a les mecircmes proprieacuteteacutes que les autresvariables Le signe $ peut ecirctre suivi par une variable exemple
i=3 print $(i+1)
Provoque laffichage du champ 4
Lorsque $0 est modifieacute automatiquement les variables de champs $1$NF sont redeacutefinies
Quand lune des variables de champ est modifeacutee $0 est modifieacute ATTENTION le seacuteparateur ne sera pas celui deacutefinit par FSmais celui deacutefinit par OFS (output field separator) Exemple
awk BEGINprint Tous les utilisateurs du groupe users(GID 22)basculeront dans le
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
groupe boulot(GID 24) FS=OFS= $4 = 22 print $0 Si le groupe nest pas users on fait rien $4 ==22 $4=24print $0 Si le groupe est 22 on lui reacuteaffecte 24 END printCest fini etcpasswd gt passwdessai
135 Les structures de controcircle
Preacutesentation
Parmi les structures de controcircle on distingue les deacutecisions (if else) les boucles (while for do-while loop) et les sauts (nextexit continue break)
Les deacutecisions (if else)
La syntaxe est la suivante
if (condition) si la condition est satisfaite (vraie) instruction1 on exeacutecute linstruction else sinon instruction2 on exeacutecute linstruction 2
Si vous avez une suite dinstructions agrave exeacutecuter vous devez les regrouper entre deux accolades Exemple
awk BEGINprinttest de labsence de mot de passeFS= NF==7 pour toutes les lignes contenant 7 champss if ($2==) si le deuxiegraveme champ est vide (correspond au mot de passe crypteacute)) print $1 na pas de mot de passe on affiche le nom de lutilisateur($1=login) qui na pas de mot de passe else sinon print $1 a un mot de passe on affiche le nom de lutilisateur posseacutedant unmot de passe ENDprintCest fini) etcpasswd
Les boucles (while for do-while)
while for et do-while sont issus du langage de programmation C La syntaxe de while est la suivante
while (condition) tant que la condition est satisfaite (vraie) instruction on exeacutecute linstruction
Exemple
awk BEGINprintaffichage de tous les champs de passwdFS= i=11 initialisation du compteur agrave 1 (on commence par le champ 1) while(i=ltNF) tant quon nest pas en fin de ligne print $ii on affiche le champ i+++ increacutementation du compteur pour passer dun champ au suivant ENDprintCest fini) etcpasswd
La syntaxe de for est la suivante
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
for (instruction de deacutepart condition instruction dincreacutementation) On part dune instruction de deacutepart on increacutementeinstruction on exeacutecute linstruction jusquagrave que la condition soit satisfaite
Exemple
awk BEGINprint affichage de tous les champs de passwdFS= for (i=1i=gtltNFi++) initialisation du compteur agrave 1 on increacutemente le compteurjusquagrave ce quon atteigne NF (fin de la ligne) print $i on affiche le champ tant que la condition nest pas satisfaite ENDprintCest fini) etcpasswd
Avec for on peut travailler avec des tableaux Soit le tableau suivant tab[1]=patatetab[2]=courgettetab[3]=poivron Pour afficher le contenu de chacun des eacuteleacutements du tableau on eacutecrira
for (index in tab) print legume tab[index]
La syntaxe de do-while est la suivante
do instructions on exeacutecute les instructions while (condition) jusquagrave que la condition soit satisfaite
La diffeacuterence avec while est quon est sucircr que linstruction est exeacutecuteacutee au moins une fois
Sauts controleacutes (break continue next exit)
break permet de sortir dune boucle la syntaxe est la suivante
for () boucle infinie instructions on exeacutecute les instructionss if (condition) break si la condition est satisfaite on sort de la boucle instructions
Alors que break permet de sortir dune boucle continue force un nouveau passage dans une boucle
next permet dinterrompre le traitrement sur la ligne courante et de passer agrave la ligne suivante (enregistrement suivant)
exit permet dabandonner la commande awk les instructions suivant END sont exeacutecuteacutees (sil y en a)
136 Les tableaux
Preacutesentation
Un tableau est une variable se composant dun certains nombres dautres variables (chaicircnes de caractegraveres numeacuteriques)rangeacutees en meacutemoire les unes agrave la suite des autres Le tableau est dit unidimensionnelle quand la variable eacuteleacutement de tableaunest pas elle mecircme un tableau Dans le cas de tableaux imbriqueacutes on parle de tableau unidimensionnels
Les termes matrice vecteur ou table sont eacutequivalents agrave tableau
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents
Les tableaux unidimensionnels
Vous pouvez deacutefinir un tableau unidimensionnel avec la syntaxe suivantetab[index]=variable lindex est un numeacuterique (maispas obligatoirement voir les tableaux associatifs) la variable peut ecirctre soit un numeacuterique soit une chaicircne de caractegravere Il nestpas neacutecessaire de deacuteclarer un tableau la valeur initiale des eacuteleacutements est une chaicircne vide ou zeacutero Exemple de deacutefinition duntableau avec une boucle for
var=1 for (i=1ilt=NFi++) mon-tab[i]=var++
On dispose de la fonction delete pour supprimer un tableau (delete tab) Pour supprimer un eacuteleacutement de tableau on taperadelete tab[index]
Les tableaux associatifs
Un tableau associatif est un tableau unidimensionnel agrave ceci pregraves que les index sont des chaicircnes de caractegraveres Exemple
age[olivier]=27 age[veronique]=25 age[benjamin]=5 age[veronique]=3 for (nom in age) print nom a age[nom] ans
On a un tableau age avec une chaicircne de caractegraveres preacutenom comme index on lui affecte comme eacuteleacutements de tableau unnumeacuterique (age de la personne mentionneacutee dans le preacutenom) Dans la boucle for la variable nom est remplie successivementdes chaicircnes de caractegraveres de lindex (olivier veronique )
Les valeurs de lindex ne sont pas toujours trieacutees
Les tableaux multidimensionnels
awk nest pas preacutevu pour geacuterer les tableaux multidimensionnels (tableaux imbriqueacutes ou agrave plusieurs index) neacuteanmoins on peutsimuler un tableau agrave deux dimensions de la maniegravere suivante On utilise pour cela la variable preacutedeacutefinie SUBSEP quirappelons le contient le seacuteparateur dindiccedilage Le principe repose sur la creacuteation de deux indices (i j) quon va concateacutener avecSUBSEP (ij)
SUBSEP= i=Aj=B tab[ij]=Coucou
Leacuteleacutement de tableau Coucou est donc indexeacute par la chaicircne AB
Next Previous Contents