57
Next Previous Contents Cours utilisateur UNIX Olivier Hoarau V1.0, 27 décembre 1999 Ce document est un essai de vulgarisation d'UNIX. Il est destiné à ceux qui l'utilisent déjà mais aussi aux débutants qui voudraient en apprendre plus sur ce système d'exploitation qui est en train de se populariser à vitesse grand V avec l'explosion de Linux. La dernière version de ce document est consultable sur le site officiel http://www.linux-france.org/article/ohoarau. La version en construction se trouve sur le site http://funix.free.fr. Toutes remarques et suggestions concernant ce document sont à expédier à Olivier Hoarau mailto:[email protected]. 1. Historique du document 2. Préambule 3. Principes de base UNIX 3.1 Les processus ou process 3.2 Définition d'un système d'exploitation 3.3 Environnement 4. Présentation du système UNIX 4.1 Les utilisateurs UNIX 4.2 Les fonctions principales 4.3 Structure du système UNIX 4.4 Le shell 5. Ouverture et fermeture de session 5.1 Ouverture de session 5.2 Changement de password 5.3 Fermeture de session

Cours UNIX (Olivier Hoarau - Linux-France)

  • Upload
    niko

  • View
    1.956

  • Download
    2

Embed Size (px)

DESCRIPTION

un cours assez complet sur unix en francais

Citation preview

Page 1: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 2: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 3: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 4: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 5: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 6: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 7: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 8: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 9: Cours UNIX (Olivier Hoarau - Linux-France)

------------------------------------------------------------ | ------------------------------ | 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

Page 10: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 11: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 12: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 13: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 14: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 15: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 16: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 17: Cours UNIX (Olivier Hoarau - Linux-France)

| |------- 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

Page 18: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 19: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 20: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 21: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 22: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 23: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 24: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 25: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 26: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 27: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 28: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 29: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 30: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 31: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 32: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 33: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 34: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 35: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 36: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 37: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 38: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 39: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 40: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 41: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 42: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 43: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 44: Cours UNIX (Olivier Hoarau - Linux-France)

[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

Page 45: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 46: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 47: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 48: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 49: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 50: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 51: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 52: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 53: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 54: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 55: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 56: Cours UNIX (Olivier Hoarau - Linux-France)

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

Page 57: Cours UNIX (Olivier Hoarau - Linux-France)

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